发帖
 找回密码
 立即注册
搜索
0 0

分享 WEB渗透系统班-SQL注入原理+SQL注入靶场(1-4)

技术分享 991 0 2025-4-2 19:36:02
WEB渗透测试工程师系统班250303期
第13节课作业
1. SQL注入漏洞的原理是什么?   
  核心原理:攻击者通过构造恶意输入,使应用程序将用户输入的数据未经充分过滤或转义直接拼接到SQL语句中,从而篡改原始SQL逻辑,执行非预期的数据库操作。  
  技术细节:  
  当用户输入(如URL参数、表单字段)直接拼接进SQL查询语句时,攻击者可通过注入特殊字符(如' " ; --)或SQL关键字(如 `UNION``SELECT``DROP`)改变原语句的语义。  
  例如:原始SQL`SELECT * FROM users WHERE id='用户输入'`,若用户输入 `1' OR '1'='1`,则语句变为 `SELECT * FROM users WHERE id='1' OR '1'='1'`,导致查询所有用户数据。
2. SQL注入漏洞的危害是什么?
     数据泄露 :窃取敏感数据(如用户密码、个人信息)。  
    数据篡改 :修改或删除数据库内容(如篡改订单金额、删除日志)。  
    权限提升 :通过执行系统命令获取服务器控制权(如MySQL`INTO OUTFILE` Webshell)。  
    绕过认证 :例如 ' OR 1=1-- 绕过登录验证。  
    业务瘫痪 :通过 DROP TABLE 或死循环查询导致服务不可用。
3. SQL注入漏洞的利用思路?
步骤示例   
1.探测注入点:
在参数中提交 `'``"``\` 等字符,观察是否报错(如数据库错误页面)。  
2.判断数据库类型:  
   通过报错信息或函数差异(如MySQL`@@version`SQL Server`@@version`)。  
3.确定注入类型:  
   联合查询注入  :利用 `UNION SELECT` 提取数据(需列数一致)。  
   布尔盲注  :通过页面返回真假状态推断数据(如 `AND 1=1` `AND 1=2` 的差异)。  
   时间盲注  :通过延时函数(如 `SLEEP(5)`)判断条件是否成立。  
4.提取数据:  
   获取表名、列名(如MySQL`information_schema` 数据库)。  
   导出敏感数据(如 `UNION SELECT username, password FROM users`)。  
4. 在一个真实站点,哪些功能点会存在SQL注入漏洞?
    登录功能  :用户名或密码字段未过滤(如 ' OR 1=1 -- )。  
    搜索功能  :搜索关键词拼接进SQL(如 ?keyword=test' UNION SELECT ...)。  
    URL参数  :动态参数如 ?id=1(如数字型注入 id=1 AND 1=1)。  
    订单/支付功能  :订单ID、用户ID等参数未过滤。  
    用户资料修改  :更新语句中的字段(如 UPDATE users SET email='注入点')。  
    分页参数  `page``limit` 参数未处理(如 `LIMIT 0,10` 注入)。  
    HTTP头注入  :`User Agent``Cookie` 等头部字段被记录到数据库。
5. 实际操作课堂讲解的yakit sql注入靶场
第一关:不存在SQL注入的情况(数字严格校验)
原码及解析


1.这个示例接收一个名为 id 的查询参数,该参数预期是一个整数。
2.通过使用 strconv.ParseInt 函数,将用户提供的 id 参数解析为一个 64 位整数。如果解析失败,将返回一个错误。
3.使用解析后的整数值来执行数据库查询,这个值不包含恶意的 SQL 注入代码。
4.最后,将查询结果返回给客户端。

第二关:ID 为数字型的简单边界 SQL注入
urlhttp://127.0.0.1:8787/user/id?id=1

第一步:yakit抓包


第二步:尝试注入1 OR 1=1(注意,该位置的特殊符号要用url编码,该结论通过尝试获得)


第三关:参数是 JSON,JSON中字段存在SQL注入
如图


第一步:发送到fuzzer观察包


第二步:解码+payload id={"uid":1,"id":"1 OR 1=1"}+编码


第三步:后台成功反馈数据出来


第四关:GET参数是被编码的JSONJSON中字段存在SQL注入
第一步:同上,抓包


第二步:解码+payload {"uid":1,"id":"1 OR 1=1"}+编码 (Base64


第三步:成功反馈数据


一、笔记标题:WEB渗透系统班-SQL注入原理+SQL注入靶场(1-4)

二、文章内容:

1. 课程内容概要

        主要知识点1:SQL注入原理
        主要知识点2:SQL注入靶场

2.重点知识与细节(针对本节课的核心内容进行详细记录,包含公式、代码、重要原理等)

        概念解析
        概念1: yakit靶场第一关【不存在SQL注入的情况(数字严格校验)】
                    这个示例演示了如何通过对用户输入的参数进行数字严格校验,从而防止 SQL 注入攻击。数字严格校验确保只有有效的数字被用作 SQL 查询的参数,而不允许插入恶意的 SQL 代码。
        概念2: yakit靶场第二关【ID 为数字型的简单边界 SQL注入】
                    ID 为数字型的简单边界 SQL 注入是一种常见的 SQL 注入漏洞,通常出现在 Web 应用程序中。这种漏洞的攻击目标是应用程序中处理 ID 参数的代码,由于没有对输入进行充分验证和过滤,导致攻击者可以在 ID 参数中注入 恶意的 SQL 代码。
                    在这种情况下,攻击者通常会尝试构造特定的输入,以绕过应用程序的验证和过滤机制,注入恶意的 SQL 语句。
                    攻击示例:#
                    1 OR 1=1
                    这样构造的 SQL 语句变成:
                    /*构造后的SQL*/
                    SELECT * FROM users WHERE id = 1 OR 1=1
                    由于 1=1 这个条件始终为真,整个查询语句将返回所有用户的数据,而不仅仅是匹配到的特定 ID 的用户数据。这就是 SQL 注入攻击的原理,攻击者可以通过注入恶意的 SQL 代码来绕过应用程序的身份验证,获取未授权的数据或执行恶意操作。
                   防御措施:#
                   使用参数化查询或预编译语句,确保用户输入的 ID 值不直接拼接到 SQL 查询中。
                   对输入的 ID 值进行验证,确保它是合法的数字,并限制 ID 值的范围在合理的边界内。
                   对输入的 ID 值进行过滤,确保它不包含任何恶意代码或特殊字符。
                   最小化数据库的权限,确保应用程序只能访问必要的数据,并限制对数据库的敏感操作。
                   定期进行安全审计和渗透测试,以发现和修复潜在的 SQL 注入漏洞。
                   通过采取这些安全措施,可以有效地防止 ID 为数字型的简单边界 SQL 注入漏洞,并提高 Web 应用程序的安全性。
        概念3:yakit靶场第三关【参数是 JSON,JSON中字段存在SQL注入】
                   有时,开发人员可能会使用 JSON 格式作为 GET 参数来传递更复杂的数据结构。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,因此在 Web 开发中广泛使用。JSON 由键值对组成,使用花括号{}表示,例如:http://example.com/api?data=``{``"name":"John","age":30}。
                   然而,如果在处理 GET 参数时,应用程序没有正确地验证和过滤输入的 JSON 数据,就可能导致 JSON 中的字段存在 SQL 注入漏洞。
                   防御措施:#
                   应该检查 JSON 对象中的每个字段和值,确保它们符合预期的数据类型和格式。
                   不应该直接将 JSON 数据作为 SQL 查询的一部分,而应该使用参数化查询或预编译语句,以确保输入数据不会被误解为可执行的 SQL 代码。
                   只有这样,才能有效地防止 JSON 中字段存在 SQL 注入的风险。
        概念4:yakit靶场第四关【GET参数是被编码的JSON,JSON中字段存在SQL注入】
                   这种漏洞是由于在处理 GET 参数时,服务器端接收到经过 Base64 编码的 JSON 数据,但在解码 JSON 数据后未对其中的字段进行适当的输入验证和处理,直接将其用于构建 SQL 查询语句,导致 SQL 注入漏洞的产生。
                   攻击者可以通过恶意构造经过 Base64 编码的 JSON 数据,利用 JSON 中存在的 SQL 注入漏洞来修改查询语句,执行恶意的数据库操作,甚至获取、修改或删除数据库中的数据。这种漏洞可能导致严重的安全问题,泄露用户隐私信息、破坏数据完整性等。
                   防御措施:#
                   避免直接拼接 SQL 查询: 绝不要直接将用户提供的数据直接拼接到 SQL 查询中,无论数据是否经过 Base64 编码。直接拼接会导致 SQL 注入漏洞,攻击者可以通过恶意构造的数据修改查询语句,从而访问、修改或删除数据库中的数据。
                   解码 Base64 数据: 首先,在服务器端接收到 GET 参数后,先进行 Base64 解码得到原始的 JSON 数据。
                   使用参数化查询或 ORM: 使用参数化查询或对象关系映射(ORM)库来与数据库进行交互。参数化查询将参数与查询语句分开,从而防止 SQL 注入攻击。
        关键步骤
        步骤1:抓包
        步骤2:看包
        步骤3:尝试,对症下药
        相关代码 无

3.实操练习 和 解析

观察url,看看存在哪些漏洞,然后注入payload

4.个人总结(写下自己对本节课的理解、收获、困惑和需要进一步学习的内容)

        本节课最大的收获是:学会了简单的SQL注入,以及明白了SQL注入原理
        仍然存在疑问的地方:SQL注入防御措施
        需要课后深入学习的内容:SQL剩下的靶场学习

──── 0人觉得很赞 ────

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
免责声明:
1、本论坛中所有用户发布的内容仅代表作者个人观点,与本网站立场无关,本站不对其真实性、完整性或观点承担任何责任。
2、本论坛所提供的全部信息与内容,不保证其准确性、完整性或时效性。因阅读或使用本站内容而产生的任何误导、损失或风险,本站概不承担任何连带或法律责任。
3、当国家司法、行政机关依照法定程序要求本论坛披露用户信息时,本站予以配合并因此免责。
4、因网络线路故障、技术问题、不可抗力或本站无法控制的其他原因导致的服务中断或暂停,本站不承担由此造成的任何直接或间接损失。
5、对于任何通过技术手段破坏、攻击本论坛系统或扰乱正常秩序的行为,本站有权采取包括但不限于限制账号、封禁账号、追究法律责任等措施。
您需要登录后才可以回帖 立即登录
高级模式
返回