前言

考完研了,复活了,虽然不知道能不能上岸就是了。

年后又快要开始做毕设了,然而我并不会做。

首先先把之前一直不会出了 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


CTF Web Python Django 远程调试 模板注入

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

gdb调试PHP
Go(2)