一、概要
靶机地址:192.168.56.107
攻击机地址:192.168.56.101
靶机下载地址:https://download.vulnhub.com/digitalworld/SNAKEOIL.7z
二、主机发现
sudo arp-scan -l
目标靶机地址为192.168.56.107
三、信息收集
sudo nmap -sS -A -T4 -p- 192.168.56.107
开放了22、80和8080三个端口
四、渗透测试
1)JWT配置信息
80端口是个初始界面,目测没有什么有用的东西
8080端口的Useful Links给了一个链接
Configuration Options — flask-jwt-extended 4.4.4 documentation
这是一个flask和jwt的配置信息
2)目录扫描
扫一手目录
gobuster dir -u "http://192.168.56.107:8080/" -w /usr/share/wordlists/dirb/common.txt
3)页面信息
逐个页面看一下
1)/login页面
均修改后显示用户不存在,明显我们需要先注册一个用户
2)/registration页面
修改为POST方法后,显示需要username
修改后显示用户创建成功并返回了access_token
回到/login页面登录后返回了access_token和refresh_token
/run页面
修改传输方法为POST,content-type和表单内容后显示需要secret key,先不管
/secret页面
/test页面
/users页面
test和users界面都没有什么有价值的信息
4)secret key
secret key应该就是在secret页面
HTTP500应该是响应包里面缺了什么
查看规则发现在Cookie中需要access_token_cookie这个参数,而我们前面也获得这个了
请求成功,获得到secret key
返回正常了
查看一下这个开头发现是curl执行的统计信息
5)命令注入
尝试一下命令注入,可以实现
先查看一下当前路径下的文件
获取一下app.py的内容,查看过滤信息
过滤了很多内容,常用的反弹shell是行不通了
6)反弹shell
在本地创建反弹shell脚本并使用wget下载到靶机上
单纯的上传还不行,有点小问题,shell.sh里面的内容是执行的日志,需要把shell.sh删除,把shell.sh.1重命名为shell.sh,然后再给shell.sh加权限:chmod 777 shell.sh
加完权限后,本地开启监听然后直接./shell.sh即可
拿到shell
7)root权限
sudo -l查看,发现可以root权限执行任意命令,但是需要密码
在app.py中有两个可疑的密码
使用下面这个可以成功登录
直接拿到root权限
结束
五、总结
1、靶机给出的配置相关信息,有时藏着重要思路
2、发包放包记得仔细观察HTTP响应
3、命令注入除了可以直接使用命令反弹shell,还可以使用wget上传文件进行shell的获取
4、仔细查看已有的信息,尤其那些存在配置信息的文件