前言
考完研了,复活了,虽然不知道能不能上岸就是了。
年后又快要开始做毕设了,然而我并不会做。
首先先把之前一直不会出了 wp 也没学习的 ph 牛的题目复现了,顺便学习一下 Python 的远程调试方式。
ph 牛的官方 wp:https://www.leavesongs.com/PENETRATION/code-breaking-2018-python-sandbox.html 。
Django 远程调试
因为我本地环境是 Windows,所以跑 Python 总会有各种包上面的不方便,调试起来就很麻烦,因此就采用远程调试的方法。
题目环境在 ph 牛的 GitHub 上面:https://github.com/phith0n/code-breaking ,我修改了 docker-compose.yml,把 Nginx 的部分去掉了,把容器的 22 端口映射了出来。
要进行远程调试,就要装上 SSH,然后修改配置允许 root 用户登录,再修改 root 用户的密码。
然后就是配置 PyCharm,我用的是 2019.3.1 的版本。
首先是配置 Deployment,还有 mapping 那里的路径映射也要配置一下:
然后配置项目解释器,注意配置远程 Python 解释器的时候要选对,在这个环境下是 /usr/local/bin/python,配置正确后能看到服务器的 Python 包:
最后配置 debug:
至此,Django 远程调试的配置就完成了,接下里就开始我们的题目复现吧。
模板注入
ph 牛以前写过的关于格式化字符串漏洞的文章:https://www.leavesongs.com/PENETRATION/python-string-format-vulnerability.html 。
就如 ph 牛在文章里所说的,_meta 的利用方式在 Django 中不可用,我们可以通过调试来找到其他的利用方式。
我们在模板渲染处下个断点:
可以发现一个类似的利用:request.user.groups.target_field.opts.app_config.module.admin.settings.SECRET_KEY
即可获得密钥。
Pickle
ph 牛写得很详细。
其他 opcode 的使用就留个坑,以后再来学习吧。
Orz