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

SQL Injection | SQL 注入概述

关注这个漏洞的其他相关笔记:SQL 注入漏洞 - 学习手册-CSDN博客

0x01:SQL 注入漏洞介绍

SQL 注入就是指 Web 应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是可控的,并且参数会带入到数据库中执行,导致攻击者可以通过构造不同的 SQL 语句来实现对数据库进行任意操作的一种攻击方式。

0x0101:SQL 注入漏洞演示

实验工具准备

  • PHP 运行环境:phpstudy_x64_8.1.1.3.zip(Apache2.4.39 + PHP 5.6.9nts)

  • 实验环境:PIKACHU 靶场 - 字符型注入(get) => 参考:PIKACHU - 靶场笔记合集

本次的实验环境,我们采用现成的 PIKACHU 靶场,PIKACHU 靶场的安装方法参考上面提供的链接,这里就不多说了,下面直接开始演示。

输入下面的链接,访问实验环境:

 http://localhost/pikachu/vul/sqli/sqli_str.php

靶场要求我们输入 username,该值是一个字符串类型的值,我们可以随便输入一些内容,进行测试:

此时我们推测一下这个业务的查询逻辑,笔者以伪代码的形式表示出来了:

 // 获取用户输入的 name$username = $_GET['name'];// 将用户输入的 name 拼接进预定义的 SQL 语句中$sql = "select * from username where name='$username'";// 将 $sql 中的内容传递到后端数据库执行,并获取结果$result = exec_sql($db_connect, $sql);// 如果查询到结果,则返回 “欢迎”,否则返回 “您输入的用户不存在”if ($result == True) {// 成功查询到用户信息echo "欢迎你" . $username;} else {echo "您输入的用户不存在";}

在上面假设的业务逻辑中,代码未对用户传递的数据做任何的过滤就直接拼接到了 SQL 语句中,并传递给了后端,因此会造成 SQL 注入漏洞:

 测试 Payload: ' or 1=1 #'​后端实际执行的的 Payload: select * from username where name='' or 1=1 #''

如上,我们通过传入 SQL 语句,尝试与服务器后端的查询语句拼接,成功让服务端返回了数据库中的所有内容。

除了让服务端直接爆出数据库内容,我们还可以尝试去读取目标数据库中更多的内容,甚至通过 MySQL 往目标服务器写入木马程序,进而控制整个服务器。当然,这都是后话,上面主要就是简单演示一下 SQL 注入的攻击思路和危害,更进一步的内容,笔者后面会出单期讲。

0x02:SQL 注入漏洞详解

0x0201:SQL 注入漏洞产生的条件

SQL 注入漏洞的产生需要满足以下两个条件:

  • 参数用户可控: 前端传给后端的参数内容是用户可以控制的。

  • 参数带入数据库执行: 传入的参数拼接到 SQL 语句中,且被带入数据库进行执行。

0x0202:SQL 注入通常出现的位置

一般的 Web 应用程序都是由 “视图层 + 业务逻辑层 + 数据访问层” 构成的,如下图所示:

我们以一个简单的登录操作,讲解一下上图的流程:

用户通过浏览器访问京东的首页,进入了登录页面。用户在视图层,输入了自己的账号和密码,浏览器将用户输入的账号密码通过某种方式传递到服务器的业务逻辑层,然后业务逻辑层将拿到的账号密码到数据库中进行匹配,如果匹配成功,则返回登录后的界面,否则返回登录失败的提示。

SQL 注入发生的位置,其实就是执行 SQL 语句的位置。在上面的流程中,就是业务逻辑层将拿到的账号和密码到数据库中进行匹配的地方(如果用户输入正常的账号信息,则无问题,但是如果用户传递过来的是 SQL 语句呢?)。

总的来说,所有可能与后端数据库发生交互的地方,都有可能出现 SQL 注入漏洞。

0x0203:SQL 注入漏洞产生的危害

  • 未经授权的数据访问:攻击者可以利用 SQL 注入漏洞,无需授权即可访问数据库中的数据,从而窃取用户数据,如用户凭证、个人信息或业务数据,导致用户信息泄露。

  • 数据篡改:攻击者可以修改数据库中的数据,导致数据的完整性受损。这可能导致数据不一致,对业务流程和决策产生负面影响。

  • 数据库被恶意操作:攻击者可以对数据库进行增加或删除操作,例如删除数据库中重要数据的表,或篡改数据库的系统管理员账户。

  • . 服务器被远程控制:攻击者可能获取服务器的最高权限,远程控制服务器,安装后门,从而修改或控制操作系统。此外,他们还可能破坏硬盘数据,导致整个系统瘫痪。

  • 网站被挂马,传播恶意软件:攻击者可以修改数据库中的一些字段值,嵌入网马链接,进行挂马攻击,或者用来传播恶意软件。

  • 影响业务运营:SQL 注入攻击可能导致业务中断,降低用户信任度,损害品牌声誉,甚至带来法律责任。

0x0204:SQL 注入漏洞的防范措施

  • 使用参数化查询或预编译语句,而不是直接拼接 SQL 语句。

  • 对用户输入进行严格的验证和过滤,防止恶意输入。

  • 使用最小权限原则,为数据库账户分配必要的权限。

  • 定期更新和修补数据库管理系统和应用程序的漏洞。

  • 使用 Web 应用防火墙(WAF)等安全设备,增强对 SQL 注入攻击的防御能力。

0x03:参考资料

  • 《Web 安全攻防:渗透测试实战指南》 ISBN 978-7-121-34283-7

http://www.lryc.cn/news/464494.html

相关文章:

  • 【Linux 从基础到进阶】磁盘I/O性能调优
  • 浅谈AGI时代的“数据枢纽”——向量数据库
  • 生成 Excel 表列名称
  • 基于yolov10的烟雾明火检测森林火灾系统python源码+pytorch模型+评估指标曲线+精美GUI界面+数据集
  • UltraISO(软碟通)制作U盘制作Ubuntu20.04启动盘
  • 【EtherCAT实践篇一】TwinCAT 3安装、使用
  • 4、CSS3笔记
  • Docker无法拉取镜像解决办法
  • Ubuntu 20.04安装Qt 5.15(最新,超详细)
  • 桂林旅游一点通:SpringBoot平台应用
  • 【WPF】04 Http消息处理类
  • 如何精准设置线程数,提升系统性能的秘密武器!
  • 正则表达式:从入门到精通
  • CRMEB标准版Mysql修改sql_mode
  • linux驱动访问的地址为虚拟地址
  • 基于SpringBoot+Vue+uniapp微信小程序的社区门诊管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
  • 使用WPF写一个简单的开关控件
  • FPGA采集adc,IP核用法,AD驱动(上半部分)
  • MongoDB 如何做mapreduce
  • Vue是一套构建用户界面的渐进式框架,常用于构建单页面应用
  • c++ 桶排序(看这一篇就够了)
  • 格点拉格朗日插值与PME算法
  • 【LVGL快速入门(二)】LVGL开源框架入门教程之框架使用(UI界面设计)
  • jmeter中用csv data set config做参数化2
  • 背包问题整理
  • 基于Matlab车牌识别课程设计报告
  • SSM框架实战小项目:打造高效用户管理系统 day3
  • 一款现代化、可定制的跨平台文件浏览器,高颜值高效率的的管理神器!(附私活源码)
  • 【C】二分查找与函数1
  • 光纤光学的基本方程