显错注入就是通过sql注入再利用网页的显示位进行数据的读取。
那么咱们废话不多说,开干,利用靶场进行分析解读:
这是靶场的原界面,我们要利用这个界面看这个网站是否存在显错注入,这一般分为这几个步骤
1,判断目标是否存在sql注入 | 利用 and or - + 等进行测试 |
2,判断有几个字段 | 利用order by |
3,找显错位 | union,同联合查询 |
4,找在什么表中,什么字段 | information_schema库中记载所以的库,表字段,databse()当前数据库 |
5,找数据 | union |
1,判断目标是否存在sql注入
如利用and or 进行测试,它的原理就是 你传入的代码被当作语句执行
如:
select * from user where id =1 and 1=1 就是你传入的数据被当作代码执行了
如果你传入 and 1=1 后页面没有发生变化,传入1=2 页面出错例如:
这时就极有可能是这个网站有sql注入,当然也可以用or来测试但是这都极容易被WAF(web防火墙)拦截,我们还可以利用例如:+ -来进行测试
如果页面正常也是很有可能出现sql注入,也可以用工具sqlmap进行测试 如果你传入什么数据页面都没有变化,这大概率就是被强制转换了,例如我传入1qweqw页面没有错误那是这个数据被强制转换成了1,这代概率就不会存在sql注入漏洞了,但这同时也会使网页的体验不佳。
遇到WAF拦截的情况也是有办法绕过的
2,判断有几个字段
利用order by进行测试,order by 1 就表示按第一个字段进行排序,如果我们 order by 10如果表中没有10个字段那么页面就会显示错误:我们省略靶场中测试正确的页面
上述把靶场中order by 3是正确的 order by 4就是错误的 所以此页面有三个字段
3,找显错位
select *from user where id =1 union select 1,2,3看显错位是哪一位
可以看出先错位是2,3位
4,找在什么表中,什么字段
information_schema 表里面有mysql数据库里面的库,表,和字段的名称
域名框中的是经过url编码的内容,输入的语句可参看图中的数据库查询语句
information_schema.tables 表示information_schema库中的 tables表里面有table_name,column_name,table_schema等字段分别表示,表名,字段名,库名
database()函数表示当前的数据 limit 0,1 表示第一行的数据,limit 1,1 表示第二行的数据
limit m,n
m:为阿拉伯数字,表示跳过第m行,从m+1行开始。
n:为阿拉伯数字,表示前n行
select 1,table_name,table_name from information_schema.tables where table_schema = database() limit 1,1这个语句便可以查询到我们所需要的表
cloumn_name table_schema都是information_schema库中columns表中的字段,表示字段名,和表名
select 1,column_name,column_name from information_schema.columns where table_schema = database() and table_name = 'error_flag' limit 2,1
where 后面的条件控制住表名,库名这样便,再利用limit,这样就可找打我们需要的字段名了
5,出数据
由于union联合查询是要排序的,为了防止得到前半部分查出的数据而不是我们的语句查出的数据所以 and 1=2 让前半部分无数据返回即可
如遇到这样的后面是传参带有‘’,“”,(‘’),(“”)这样的,要把利用sql里面的注释
如图
首先我们先给前面的单引号加一个’进行配对 再用-- abc注释掉后面的‘
-- 表示注释,但是代码中可能把后面的空格忽略不计,所以我们加个abc和’一起注释掉
后面几中情况也一样
以上靶场来自于掌控安全学院实战靶场,所有的渗透未经授权都是违法,慎记,以上均用于学习用途!!!