答:3级偏移可以,但是4级偏移不行,因为如果进行4级偏移的话,就会使得偏移注入基本公式:联合查询补充字段数=当前表的字段数-目标表的字段数 x 4 ==> 22-6x4=-2<0,即:会造成union关键字之前的select查询字段数的数量 < union关键字之后的字段数量,从而导致查询失败。
3级偏移的payload:?id=1513 union select top 1 1,2,3,4, * from((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)
access偏移注入是否是真的随机?
通过上述原理的讲解,这个问题也就不攻自破了,显然access注入并不是真正的随机,并不是完全不受我们控制的,在我们获取足够信息的情况下(如“当前表”和“目标表”的字段数量,已知的“目标表字段名"的数量),我们可以在一定范围内完全控制显示位处的数据显示,而之所以说是一定范围内,只是因为“显示位的位置”和“我们可以猜解到的目标表字段名的数量”这两个因素不是我们可以控制的。
是否可以只说:“当前表”的字段数越多成功率越大,或“目标表”的字段数越少成功率越大?
显然我们不能这样简单的得出结论,偏移注入是否能够成功,取决于:“显示位位置” 和 “目标字段能够移动到的位置” 是否可以重合,如果可以重合的话,即使“当前表”字段数小一点,“目标表”字段数多一点也是无妨的(但万万不可“当前表”的字段数量 > “目标表”的字段数量)
是什么决定着“目标表”的数据一次性前移的字段数?是什么决定着“目标表”的数据可以后移的字段数?
前者是由“目标表的字段数量”所决定的:目标表中的数据向前移动的字段数只能是目标表中的字段数的整数倍(这是由表自连接的特性所决定的)。
后者是由“我们可以猜解得到的目标表的字段名数量”所决定。若猜解出1个字段名,那么我们就可以让数据向后移动1个字段数,若猜解出2个字段名,那么我们就可以让数据向后移动2个字段数,以此类推。(不过这里所需要猜解的字段名不需要必须是我们想要查找的字段名,只要是admin表中的字段名均可)