Web安全之SQL注入---基础

文章目录

    • SQL注入简介
    • SQL注入基础
    • SQL注入分类
    • SQL注入流程

SQL注入简介

什么是SQL注入
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息,例如查询数据、下载数据、写入webshell、执行系统命令以及绕过登录限制等。

SQL原理图
在客户端,若存在可控参数能配合web页面返回的信息实现一定的操作,如实现无账号登录,窃取管理员账号、密码、关键信息,篡改数据库等操作
请添加图片描述

测试方法
在发现存在可控参数后,可直接使用sqlmap检测此网站是否存在sql注入,何种类型的sql注入,然后利用其爆库、爆表、爆字段。也可以用BurpsuiteCO2模块 sqlmap插件探测,亦可以通过积累的非法sql参数,利用intruder模块尝试。最后,在简单的sql下,可进行手工注入,使用积累的一些闭合符进行尝试

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

1、SQL提供参数化查询接口,而不是将用户输入变量的值嵌入到SQL语句中,使可控参数局限于设计者设计的功能,而不能进行其他恶意操作

2、对特殊字符,例如空格 、逗号,、单引号'、双引号"、反引号等进行转义处理,或编码转换。

3、判别数据类型要严格,规定为强等于,例如 0'0',前者为数字,后者为字符串,不相等。

4、规定数据长度,可在起一定程度的防范

5、网站各数据层编码统一,建议使用UTF8,上下层编码不一致,可能会导致一些过滤被绕过
6、限制网站用户的权限,给与最小权限,可进行正常操作请求即可

7、最小化返回信息,关闭显示错误信息,例如报错注入就是利用网站的报错回显而窃取信息的

SQL注入基础

基础不牢,地动山摇。要进行SQL注入,首先要了解数据库基础知识,从而才可以猜想设计者的思路,及其构筑的SQL,更进一步的窃取信息

information_schema
在mysql5 版本以后,mysql默认在数据库中存放在一个叫 infomation_schema的数据库, 这个库里面有很多表 重点是这三个表columns 、tables、schemata

table_namecontent
schemata所有数据库名
tables所有表名
columns所有列名

系统函数

以下是常用的几个系统函数

函数function
version()MySQL版本
user()数据库用户名
database()数据库名
@@datadir数据库路径
@@version_compile_os操作系统版本

字符串连接函数

concat

concat(str1,str2,...)
直接连接,无间隔符。可添加间隔符,如以下添加
concat(str1,':',str2)

concat_ws

concat_ws(separator,str1,str2,...)
第一个参数为间隔符,后跟要连接的字符串列名

group_concat

group_concat(str1,str2,...)
连接一个组的所有字符串,并以逗号分隔每一条数据

sql注释符

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

逻辑运算&字符优先级

万能密码' or 1=1#为什么可以直接登录

and
前后条件都为真时为真
or
前后有条件为真时为真

注意: and优先级高于or

在这里插入图片描述

判别sql注入点

控制可控参数,根据页面回显的内容判别是否存在注入点,例如以下是一些假设id参数可控进行的情况下判别网站是否存在注入点的测试语句

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"

回显是指页面有数据 信息返回
无回显是指 根据输入的语句 页面没有任何变化,或者没有数据库中的内容显示
到网页中.
思考:以下如何判别注入点,在无回显的情况下

sql注入原理

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

  • 参数用户可控:从前端传给后端的参数内容是用户可以控制的
  • 参数带入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询。

一般的代码为:

$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

此处考虑两个点,一个是闭合前面你的 '另一个是处理后面的 '
一般采用两种思路,闭合后面的引号或者注释掉,注释掉采用--+ #%23

一般用于尝试的语句

–+可以用#替换,url提交过程中Url编码后的#为%23

or 1=1--+
'or 1=1--+
"or 1=1--+
)or 1=1--+
')or 1=1--+
") or 1=1--+
"))or 1=1--+

以上仅是部分基础知识,后续会穿插基础知识

SQL注入分类

基于获取信息方式不同的分类

  • UNION query SQLinjection(可联合查询注入)
  • Stacked queries SQL injection(可多语句查询注入)堆叠查询
  • Boolean-based blind SQL injection(布尔型注入)
  • Error-based SQL injection(报错型注入)
  • Time-based blind SQL injection(基于时间延迟注入)

基于请求方式的分类

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

基于数据类型的分类

  • int 整型
select * from users where id=1
  • sting 字符型
select * from users where username='admin'
  • like 搜索型
select * from news where title like '%标题%'

基于程度和顺序的注入
一阶注射
二阶注射

基于布尔SQL盲注
•基于时间的SQL盲注
•基于报错的SQL盲注

一阶注射是指输入的注射语句对WEB直接产生了影响,出现了结果;二阶注入类似存储型XSS,是指输入提交的语句,无法直接对WEB应用程序产生影响,通过其它的辅助间接的对WEB产生危害,这样的就被称为是二阶注入.

SQL注入流程

常规注入流程

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

在这里插入图片描述

参考文章
SQL原理
SQL天书MadeByLcamry-2016-7

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

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

相关文章

黄仁勋对话孙正义:日本的AI新饼、Arm的AI野心与英伟达的东亚新机会

2020 年的软银世界大会上,孙正义与黄仁勋围绕「What’s Next for AI」展开了一次围炉对谈。黄仁勋穿着标志性的皮夹克坐在火堆旁,畅谈了将 Arm 纳入麾下的重要价值,孙正义也毫不吝啬赞美之词,称老黄在未来 10 年会达到史蒂夫 乔布…

【案例】Excel使用宏来批量插入图片

一、场景介绍 我有一个excel文件,需要通过一列的文件名称,按照规则给批量上传图片附件。 原始文件: 成功后文件: 二、实现方法 1. 使用【wps】工具打开Excel文件,将其保存为启用宏的文件。 2.找到编辑宏的【VB编辑器…

Kubernetes-ArgoCD篇-01-简介

1、什么是Argo CD Argo CD 是针对 Kubernetes 的声明式 GitOps 持续交付工具。 Argo CD官方文档地址:https://argo-cd.readthedocs.io Argo CD源码地址:https://github.com/argoproj/argo-cd 1.1 关于Argo Argo是一个开源的项目,主要是扩…

odoo17 前端 在头像下拉 dropdown 自定义菜单

odoo17 前端 在头像下拉 dropdown 自定义菜单 其实很简单, 我们先找到原来已经创建好的, 找到代码位置 使用 我的资料 为例 odoo-17.0\addons\hr\static\src\user_menu\my_profile.js /** odoo-module **/import { _t } from "web/core/l10n/translation"; import …

时序预测 | Python基于CNN-transformer时间序列预测

时序预测 | Python基于CNN-transformer时间序列预测 目录 时序预测 | Python基于CNN-transformer时间序列预测预测效果基本介绍参考资料 预测效果 基本介绍 时序预测 | Python基于CNN-transformer时间序列预测 Cnn-transformer-自适应稀疏自注意力ASSA-对比归一化contranorm预…

(干货)Jenkins使用kubernetes插件连接k8s的认证方式

#Kubernetes插件简介 Kubernetes 插件的目的是能够使用 Kubernetes 配合,实现动态配置 Jenkins 代理(使用 Kubernetes 调度机制来优化负载),在执行 Jenkins Job 构建时,Jenkins Master 会在 kubernetes 中创建一个 Sla…

Python学习25天

# 切片语法:序列[起始索引:结束索引:步长],起始不写默认为0,结束不写默认取到结尾,步长不写默认为1(步长为-反向截取,最后一位起始序列为-1),左闭右开,切片后原序列不变 str "lx,hahaha,呵呵" s…

API接口精准获取商品详情信息案例

在当今数字化时代,电子商务平台的蓬勃发展,使得商品信息的获取变得尤为重要。API(Application Programming Interface,应用程序编程接口)作为连接前端用户界面与后端服务的桥梁,扮演着至关重要的角色。本文…

MySQL算数运算符基础:详解与入门

目录 背景: 过程: 1.加法与减法运算符 1.2扩展: 1.3运算结果得出结论 : 2.乘法和除法运算 ​2.1练习: 2.2运算结果得出结论 : 3.求模取余运算符 3.1练习: 总结: 背景&a…

【vue2.0入门】vue基本语法

目录 引言一、页面动态插值1. 一般用法 二、计算属性computed三、动态class、style绑定四、条件渲染与列表渲染五、事件处理六、表单输入绑定七、总结 引言 本系列教程旨在帮助一些零基础的玩家快速上手前端开发。基于我自学的经验会删减部分使用频率不高的内容,并不…

丹摩征文活动 | 丹摩智算平台:服务器虚拟化的璀璨明珠与实战秘籍

丹摩DAMODEL|让AI开发更简单!算力租赁上丹摩! 目录 一、引言 二、丹摩智算平台概述 (一)平台架构 (二)平台特点 三、服务器虚拟化基础 (一)虚拟化的概念 &#xf…

蓝牙5.0模块助力闹钟升级,开启智能生活第一步

随着智能家居产业的快速发展,智能闹钟作为其中一个重要的品类,逐渐从单一的时间提醒功能演变为集音频播放、语音交互、智能控制等多种功能于一体的智能设备。而在这些功能的实现中,蓝牙音频模组扮演着核心角色。 1、蓝牙音频模组的功能概述 …

POI word转pdf乱码问题处理

1.使用poi 转换word文档成pdf 导入依赖 <dependency><groupId>com.aspose</groupId><artifactId>words</artifactId><version>16.8.0</version></dependency>2.代码实现: SneakyThrowspublic void wordToPdf(String docPath,…

有趣的Midjourney作品赏析(附提示词)

中文提示词&#xff1a;国风少年 C4D软件,高分辨率,超细节,超现实主义, 英文提示词&#xff1a;National Style Youth Cinema4D,high resolution,hyper detailed,surrealism, --niji 6 --ar 1:1 中文提示词&#xff1a;粘土模型&#xff0c;男性穿着中世纪欧洲蓝色盔甲&#x…

猫头虎分享: 小米大模型升级第二代MiLM2:从一代到二代,能力飞跃提升

小米大模型升级第二代MiLM2&#xff1a;从一代到二代&#xff0c;能力飞跃提升 大家好&#xff0c;我是猫头虎&#xff0c;今天给大家带来一篇关于小米大模型MiLM2的深度解读。作为技术圈的重磅消息&#xff0c;小米的第二代大模型&#xff08;MiLM2&#xff09;在多项领域实现…

解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url

解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url 第一类情况 在anaconda创建新环境时&#xff0c;使用如下代码 conda create -n charts python3.7 错误原因&#xff1a; 默认镜像源访问速度过慢&#xff0c;会导致超时从而导致更新和下载失败。 解决方…

【机器学习】机器学习中用到的高等数学知识-2.概率论与统计 (Probability and Statistics)

概率分布&#xff1a;理解数据的分布特征&#xff08;如正态分布、伯努利分布、均匀分布等&#xff09;。期望和方差&#xff1a;描述随机变量的中心位置和离散程度。贝叶斯定理&#xff1a;用于推断和分类中的后验概率计算。假设检验&#xff1a;评估模型的性能和数据显著性。…

ESLint 使用教程(四):ESLint 有哪些执行时机?

前言 ESLint 作为一个静态代码分析工具&#xff0c;可以帮助我们发现和修复代码中的问题&#xff0c;保持代码风格的一致性。然而&#xff0c;ESLint的最佳实践不仅仅在于了解其功能&#xff0c;更在于掌握其执行时机。本文将详细介绍ESLint在不同开发阶段的执行时机&#xff…

【设计模式系列】享元模式(十五)

目录 一、什么是享元模式 二、享元模式的角色 三、享元模式的典型应用场景 四、享元模式在ThreadPoolExecutor中的应用 1. 享元对象&#xff08;Flyweight&#xff09;- 工作线程&#xff08;Worker&#xff09; 2. 享元工厂&#xff08;Flyweight Factory&#xff09;- …