首页 > 代码库 > Web脚本攻击之注入攻击
Web脚本攻击之注入攻击
注入攻击的概念和原理
注入漏洞是Web服务器中广泛存在的漏洞类型,其基本原理是Web程序对用户输入请求中包含的非法数据检查过滤不严,使Web程序将用户的异常输入字符当做正常代码执行,从而使用户在未授权的情况下非法获取Web服务器的信息。
利用注入漏洞发起的攻击称为注入攻击,它是Web安全领域最为常见威胁也是最大的攻击,注入攻击包括SQL注入、代码注入、命令注入、LDAP注入、XPath注入等。实现注入攻击要具备两个关键条件,第一是用户能够自主编写输入的数据,第二是Web程序的执行代码被拼接了用户输入的数据。实施注入攻击的关键在于掌握被注入的后台数据库系统的组织结构特征,确保注入数据被拼接后符合Web程序语法规范,成为可被正确执行的操作语句。
SQL注入的原理
SQL注入攻击的原理是Web应用程序在接收到用户的请求参数后,如果没有对请求参数进行严格的过滤或检查,而直接将用户的请求参数作为拼接SQL语句的一部分进行解释执行,则攻击者就可以通过构造一小段SQL代码片段作为请求参数提交给Web应用程序,从而使这段SQL代码得到后台数据库程序的解释执行,使攻击者实现查询操作后台数据库的攻击意图。
为了理解SQL注入的原理,下面通过一个实例详细说明。
每次用户登陆网站,需要通过在登陆页面的表单中输入用户名和口令。下面这段代码是一个简化了的 用户登录表单HTML代码,表单中的两个基本表单项用于接收用户的登陆输入。
攻击者在userid字段填写“admin‘--”,passwd字段填写“password”,并点击“登陆”按钮提交表单等待后台程序认证。
程序中直接将用户提交的数据作为动态构造的SQL语句的一部分,并没有经过任何检查、过滤或转义操作。因此,最终在后台数据库服务器执行的SQL语句如下所示:
SELECT * FROM members WHERE userid = ‘admin‘--‘AND passwd = ‘password‘
因为符号“--”是许多数据库管理系统,如MySQL和SQL Server 的注释标记,所以上述SQL语句实际上等价于以下的SQL语句:
SELECT * FROM members WHERE userid = ‘admin‘
也就是说,用户并不需要输入密码就可以以admin用户的身份被后台的Web应用程序认证通过。
SQL注入攻击的步骤
①首先需要判断Web网站是否可以进行SQL注入。如果访问的URL地址仅仅是对静态网页的访问,则不存在SQL注入问题。只有访问的网页包含对后台数据库进行动态查询的操作才可能存在SQL注入。
②寻找SQL注入点。完成上一步的判断后,需要寻找可利用的SQL注入漏洞。攻击者通过输入一些特殊语句并根据浏览器返回信息判断数据库类型,从而构建数据库查询语句找到注入点。
③利用注入漏洞查询后台数据库并获取或猜解用户名和密码。数据库中存放的表名、字段名、用户名和密码的长度以及内容。这个猜测过程可以通过网上大量注入工具快速实现并借助破解网站轻易破解用户密码。
④寻找Web管理后台入口,通过用户名密码登录。通常Web后台管理的界面不面向普通用户开放,攻击者可以利用扫描工具快速搜索到可能的登陆地址,依次进行尝试,就可以找到后台管理界面的入口地址,通过用户名密码实现登陆。
⑤实现对网站的成功入侵和修改。攻击者登陆到后台管理页面后即可按照自己意愿进行修改。并进一步入侵数据库服务器,将数据库中的内容导出,即拖库。
(注:嗅探、扫描、密码算法、防火墙、VPN、IDS、逆向工程、常见攻击与防护方式、操作系统安全配置、网络设备安全配置、编解码、密码破解、逆向工程、SQL注入、Cookie注入、欺骗技术、日志分析、网络编程、脚本分析、缓冲区溢出等)
Web脚本攻击之注入攻击