对于Web应用来说,注射式攻击由来已久,攻击方式也五花八门,常见的攻击方式有SQL注射、命令注射以及新近才出现的XPath注射等等
本文将以SQL注射为例,在源码级对其攻击原理进行深入的讲解
一、注射式攻击的原理 注射式攻击的根源在于,程序命令和用户数据(即用户输入)之间没有做到泾渭分明
这使得攻击者有机会将程序命令当作用户输入的数据提交给We程序,以发号施令,为所欲为
为了发动注射攻击,攻击者需要在常规输入中混入将被解释为命令的“数据”,要想成功,必须要做三件事情: 1
确定 Web应用程序所使用的技术 注射式攻击对程序设计语言或者硬件关系密切,但是这些可以通过适当的踩点或者索性将所有常见的注射式攻击都搬出来逐个试一下就知道了
为了确定所采用的技术,攻击者可以考察Web页面的页脚,查看错误页面,检查页面源代码,或者使用诸如 Nessus等工具来进行刺探
确定所有可能的输入方式 Web应用的用户输入方式比较多,其中一些用户输入方式是很明显的,如 HTML表单;另外,攻击者可以通过隐藏的HTML表单输入、HTTP头部、cookies、甚至对用户不可见的后端 AJAX请求来跟 Web应用进行交互
一般来说,所有HTTP的GET和POST都应当作用户输入
为了找出一个 Web应用所有可能的用户输入,我们可以求助于Web代理,如 Burp等
查找可以用于注射的用户输入 在找出所有用户输入方式后,就要对这些输入方式进行筛选,找出其中可以注入命令的那些输入方式
这个任务好像有点难,但是这里有一个小窍门,那就是多多留意 Web应用的错误页面,很多时候您能从这里得到意想不到的收获
二、SQL注射原理 上面对注射攻击做了一般性的解释,下面我们以SQL注射为例进行讲解,以使读者对注射攻击有一个感性的认识,至于其他攻击,原理是一致的
SQL注射能使攻击者绕过认证机制,完全控制