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

分享 WEB渗透系统班 十三课 樊子健

技术分享 1113 0 2025-4-3 16:22:52
SQL注入漏洞(一)


sql 注⼊原理

我们输⼊的数据,被代⼊到了数据库,当做 sql 语句去执⾏


开发规范


<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id'])) //判断⽤户是否通过 get 请求 传⼊了⼀个参数




数据库注释符:语句不会⽣效了
--空格
--+
#
%23




payload:漏洞验证概念


sql注⼊-1(防护)


http://127.0.0.1:8787/user/by-id-safe?id=1



// 基础设置部分(相当于快递单上的默认信息)
DefaultQuery: "id=1", // 默认测试⽤的参数,就像默认快递地址
Path: "/user/by-id-safe", // 接⼝路径,类似银⾏柜台窗⼝名称
Title: "不存在SQL注⼊的情况(数字严格校验)", // 业务标题,像保险箱上的安全标签
// 核⼼处理逻辑(像银⾏柜员处理业务的流程)
Handler: func(writer http.ResponseWriter, request *http.Request) {
// 第⼀步:获取身份证(从URL参数取id)
var a = request.URL.Query().Get("id") // 就像从客户⼿中接过身份证复印件 a=1
// 第⼆步:严格验证身份(确保必须是纯数字)
// 就像银⾏柜员检查身份证是否伪造
i, err := strconv.ParseInt(a, 10, 64) // 10进制,最⼤64位数字


if err != nil { // 如果发现假证件(⾮法参数)
writer.Write([]byte(err.Error())) // 在回执单上写错误原因
writer.WriteHeader(500) // 盖⼀个红⾊的「操作失败」章
return // 终⽌业务办理
}
// 第三步:⾦库取钱(数据库查询)
// ⽤经过验证的保险箱号码(转换后的整数)开保险箱
u, err := s.database.GetUserById(int(i))
if err != nil { // 如果保险箱找不到
writer.Write([]byte(err.Error())) // 在回执单写错误原因
writer.WriteHeader(500) // 盖红⾊失败章
return
}
// 第四步:安全交付(返回查询结果)
sqliWriter(writer, request, []*VulinUser{u}) // ⽤防弹运钞⻋送现⾦
return
},
// 安全评估结果(像安检报告)
RiskDetected: false, // ⾦属探测器没响,说明没带危险品
// 预期检测结果(像安检员的检查清单)
ExpectedResult: map[string]int{"参数:id未检测到闭合边界": 1}, // 预计能拦截1种攻击⽅式
}


sql注⼊-2


http://127.0.0.1:8787/user/id?id=1


1 and 1=0 union select md5(2011-10-12),md5(2011-10-12),md5(2011-10-12),md5(2011-10-
12),md5(2011-10-12),md5(2011-10-12),md5(2011-10-12),md5(2011-10-12),md5(2011-10-12) --


sql注⼊-3


数据格式:
常⻅:user=admin,pass=root
JSON:{"user":"admin","pass":"root"}


http://127.0.0.1:8787/user/id-json?id=%7B%22uid%22%3A1%2C%22id%22%3A%221%22%7D
GET /user/id-json?id={"uid":1,"id":"1 and 1=1"} HTTP/1.1


sql注⼊-4


服务端使⽤什么数据格式类型和编码类型,那么我们在传参的时候也要使⽤相同的类型


http://127.0.0.1:8787/user/id-b64-json?id=eyJ1aWQiOjEsImlkIjoiMSJ9
{"uid":1,"id":"1 and 1=1"}

第13节课作业
1. SQL注入漏洞的原理是什么?
我们输⼊的数据,被代⼊到了数据库,当做 sql 语句去执⾏
2. SQL注入漏洞的危害是什么?
SQL注入漏洞的危害非常严重,主要包括以下几个方面:

1. 数据库信息泄露  
   攻击者可以通过SQL注入获取数据库中存储的敏感信息,如用户隐私数据、账户密码、信用卡信息等。

2. 数据篡改  
   攻击者可以修改数据库中的数据,例如更改用户账户余额、订单状态等,导致业务逻辑混乱或经济损失。

3. 网页篡改  
   通过操作数据库,攻击者可以篡改网站内容,植入恶意链接或虚假信息,损害企业声誉。

4. 网站挂马与恶意软件传播  
   攻击者可能修改数据库字段,嵌入恶意代码或链接,导致用户访问时感染恶意软件。

5. 数据库服务器被控制  
   SQL注入可能使攻击者获取数据库管理员权限,进一步操纵数据库甚至操作系统,例如通过`xp_cmdshell`执行系统命令。

6. 服务器被植入后门  
   攻击者可利用数据库漏洞安装后门程序,长期控制服务器,进行更广泛的攻击。

7. 系统瘫痪与数据破坏  
   部分数据库支持通过SQL指令操作文件系统,攻击者可能格式化硬盘或删除关键数据,导致业务中断。

8. 绕过身份验证  
   例如通过注入`' OR '1'='1`等语句,攻击者可绕过登录验证,直接访问系统后台。


3. SQL注入漏洞的利用思路?
寻找注入点,判断数据库类型,构造SQL语句试探,
4. 在一个真实站点,哪些功能点会存在SQL注入漏洞?
所有发生信息交互的地方都会有可能存在漏洞,例如留言板,头像上传,邮箱等
5. 实际操作课堂讲解的yakit sql注入靶场



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