SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
对于初学者而言,找漏洞最好是基于白盒审计进行,所谓白盒审计可以简单地理解为就是看着代码找漏洞,当然了,在web方面的代码审计可没想象的那么轻松,不会像C语言中很经典的溢出,先定义一个buffer,然后用一个gets()函数直接获取内容,这么简单的溢出,泥萌也太小瞧程序媛/猿了。在web方面的代码审计,感谢伟大的社会主义社会,我国大部分的网站都是php建的(画外音:php是世界是最好的语言,哈哈),所以大多数情况下我们都是审计php代码,php函数又那么多,相互之间互相调用,使得代码审计不容易,当然了,也不难,只要掌握了技巧,结合经验,就能找出漏洞所在。
在正式挖洞前,我们先看看DVWA给出的四种级别的SQL注入的源代码。
0x01基于dvwa的代码审计
初学者接触到入门级别的代码审计的内容。
DVWA使用界面
SQL注入(SQL Injection)
在左下角的DVWA Security可以调节难度系数,即low,medium,high,impossible选中后点击submit提交即可。
点击左下角view source可以看到源代码,方便进行代码审计
我们可以看到四种级别的代码分别如下所示:
代码:
低级(low)
分析:
关键语句:
$id = $_REQUEST[ 'id' ];
// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
可以看到:
Low级别的代码对来自客户端的参数id没有进行任何的检查与过滤,存在明显的SQL注入。
中级(medium)
分析:
关键代码:
$id = mysql_real_escape_string( $id );
// Check database
$query = "SELECT first_name, last_name FROM
users WHERE user_id = $id;";
可以看到:
Medium级别的代码利用mysql_real_escape_string函数对特殊符号\x00,\n,\r,\,’,”,\x1a进行转义,在一定程度上控制了用户的输入
高级(high)
分析:
关键语句:
$query = "SELECT first_name, last_name FROM users WHERE user_id = $id
LIMIT 1
可以看到:
代码希望通过LIMIT 1来控制使得只输出一个查询结果
不可能(Impossible)
分析:
关键代码:
$data = $db->prepare( 'SELECT first_name, last_name FROM users WHERE user_id = (:id) LIMIT 1;' );
$data->bindParam( ':id', $id, PDO::PARAM_INT );
可以看到:
代码中限制返回的查询结果数量为一时,才会输出,防止了大量数据的泄露,同时采用了PDO技术,隔离了代码与数据,使得用户输入的数据不再被当作代码执行,采用这种方案,杜绝了SQL注入漏洞的发生
0x02挖掘漏洞
注:
1.接下来的过程中会大量用到sqlmap,部分站点的漏洞将直接以sqlmap的形式给出。所以建议小伙伴先去熟悉下sqlmap。
2. 以下提交的漏洞均已被厂家修复,小伙伴们就不要想搞事情了
3.本文展现的漏洞在测试前已获授权,请小伙伴们勿非法测试
先来枚有web页面的漏洞:
存在漏洞的页面
扫目录时发现该url下存在某事件型漏洞
采用某位大神的中转脚本:
通过sqlmap神器成功挖到漏洞
拿到的数据库
Sqlmap测试时截图
总结:第一枚漏洞主要是采用某事件型漏洞结合sqlmap挖到的,难度相当于DVWA中的Medium级别
什么?没有数据看着不过瘾?你这是要搞事情啊大兄弟!好吧,再来一枚数据量大的
第二枚漏洞:
测试时没有截web的图,只有sqlmap,将就着看吧,看看
存在漏洞的站点
Sqlmap扫一发
加个—tables继续
就拿上张图的mallbuilder来开刀吧
继续—current-db
红色打码的部分是手机号或真实姓名或邮箱号,过于敏感就打码了,可以看到图中下面password就是密码编码加密后的字符串
拿到用户名和密码后我们可以登陆后台
红色打码部分为收货人姓名及手机号,有一条还包括收货地址
红色打码部分为手机号
可以看到后台所有的功能我们都是可以使用的,就不继续了
总结:通过简单的sqlmap命令指定特定的表、数据库来“脱裤”,拿到后台登陆帐号密码,进而进行进一步的操作。此站点的代码强度相当于DVWA中的Medium级别.