看完《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工具听说挺不错,可以试试。

