目录
简述:
1、几乎所有应用程序都依赖数据存储区来管理在应用程序中处理的数据,这些数据负责处理核心应用程序逻辑、保存用户账户、权限、应用程序配置设置等。现在, 数据存储区已不再只是被动的数据容器。大多数数据存储区都保存有结构化,可以使用预先定义的查询格式或语言访问的数据,并包含内部逻辑来管理这些数据
2、一般应用程序使用信用的权限级别来管理对数据存储区的各种访问操作, 以及处理属于不同应用程序用户的数据。如果攻击者能够破坏应用程序与数据存储区的交互, 使应用程序检索或修改各种数据, 那么攻击者就可以避开在应用层次对数据访问实施的任何控制。
3、上述原则适用于任何类型的数据存储技术。最常用的数据存储区是SQL数据库、基于XML的资料库、LDAP目录等。
简介:
1、解释型语言是一种在运行时由一个运行时组件解释语言代码并执行其中包含的指令的语言。与之相对, 编译型语言是这样一种语言它的代码在生成时转换成机器指令, 然后在运行时直接由使用该语言的计算机处理器执行这些指令。
2、理论上任何语言都可使用编译器或解释器来执行,这种区别并不是语言本身的内在特性。但通常大多数语言仅通过上述其中一种方式执行,开发Web应用程序使用的许多核心语言使用解释器执行, 包括SQL、LDAP、Perl和PHP
3、基于解释型语言的执行方式, 产生了一系列叫做代码注入的漏洞。任何有实际用途的应用程序都会收到用户提交的数据,对其进行处理并执行相应的橾作。因此由解释器处理的数据实际上是由程序员编写的代码和用户提交的数据共同组成的。有时攻击者可以提交专门设计的输入, 通常提交某个在应用程序中使用解释型语言语法的具有特殊意义的句法,向应用程序实施攻击。结果, 这个输入的一部分被解释成程序指令执行, 好像它们是由最初的程序员编写的代码一样。如果这种攻击取得成功, 它将完全攻破目标应用程序的组件。
另一方面, 在编译型语言中实施旨在执行任意命令的攻击往往非常困难。此时注入代码的方法通常并不利用开发目标程序所使用语言的任何语法特性, 注入的有效载荷为机器代码,而不是用那种语言编写的指令
避开登录
简述:
1、无论访问操作是由普通用户还是应用程序管理员触发, 应用程序访问数据存储区的过程都大致相同。Web应用程序对数据存储区实施自主访问控制, 构造查询基于用户的账户和类型来检索、添加或修改数据存储区中的数据。修改查询(不只是查询中的数据)的成功注入攻击可以避开应用程序的自主访问控制并获取未授权访问。
2、如果需要安全保护的应用程序逻辑由查询结果控制, 攻击者就可以通过修改查询来更改应用程序的逻辑。例如,在后端数据存储区的用户表中查询与用户提供的证书匹配的记录。许多实施基于表单的登录功能的应用程序使用数据库来存储用户证书, 并执行简单的SQL查询来确认每次登录尝试。攻击者可注入用户名或密码字段, 以修改应用程序执行的查询, 从而破坏它的逻辑。
eg:select * from where username='admin' --+ and password='passwd'
等同于select * from where username='admin'
3、假如攻击者不知道管理员的用户名,在大多数应用程序中, 数据库的第一个账户为管理用户, 因为这个账户通过手工创建, 然后再通过它生成其他应用程序账户。而且,如果查询返回几名用户的资料, 许多应用程序只会处理第一名用户。因此, 攻击者可利用这种行为,通过提交以下用户名,以数据库中的第一个用户的身份登录
eg:select * from where users=' ' or 1=1 --+ and password='passwd'
等同于select * from where users=' ' or 1=1
(该查询将返回全部应用程序用户的资料)