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

news2024/11/14 6:16:30

文章目录

    • 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iOS 18.1,未公开的新功能

童锦程祖师爷曾说过:“发誓可以,发朋友圈不行。”表面上看是渣男语录,实际上也说明了人们对隐私的看重。 在当今生活中,智能手机可能是最私密的电子产品,没有之一。不管是照片、联系人、短信、APP数据,甚至…

网页版五子棋——对战模块(服务器端开发②)

前一篇文章:网页版五子棋——对战模块(服务器端开发①)-CSDN博客 项目源代码:Java: 利用Java解题与实现部分功能及小项目的代码集合 - Gitee.com 目录 前言 一、创建并注册 GameAPI 类 1.创建 GameAPI 类 2.注册 GameAPI 类 …

★ C++进阶篇 ★ 异常

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将和大家一起学习C中的异常 ~ ​❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页&#xff1a;椎名澄嵐-CSDN博客 C基础篇专栏&#xff1a;★ C基础篇 ★_椎名澄嵐的博客-CSDN博客 C进阶篇专栏&am…

MFC图形函数学习08——绘图函数的重载介绍

在《MFC图形函数学习06——画椭圆弧线函数》中介绍了CPoint类、POINT结构体&#xff1b;在《MFC图形函数学习07——画扇形函数》中介绍了CRect类、RECT结构体。在介绍完后&#xff0c;没有介绍它们怎样使用。实际上&#xff0c;这些类和结构体对象或指针也是我们学习过的绘图函…

尽量通俗易懂地概述.Net U nity跨语言/跨平台相关知识

本文参考来自唐老狮,Unity3D高级编程:主程手记,ai等途径 仅作学习笔记交流分享 目录 1. .Net是什么? 2. .Net框架的核心要点? 跨语言和跨平台 .Net x Unity跨平台发展史 Net Framework 2002 Unity跨平台之 Mono 2004 Unity跨平台之 IL2CPP 2015 二者区别 .NET Core …

Flink执行sql时报错

[ERROR] Could not execute SQL statement. Reason: java.lang.ClassNotFoundException: org.apache.flink.table.planner.delegation.ParserFactory flink-1.15.4的lib里面存在flink-sql-connector-hive-3.1.2_2.12-1.15.4.jar时&#xff0c;似乎会跟hdfs产生冲突&#xff0c…

实现API接口的自动化

API接口自动化测试的最佳实践有哪些&#xff1f; API接口自动化测试的最佳实践包括以下几个方面&#xff1a; 确定测试范围和目标&#xff1a;明确需要测试的API接口和功能点&#xff0c;确定测试的目标和预期结果 编写测试用例&#xff1a;根据API文档和需求&#xff0c;编…

uni-app中使用 unicloud 云开发平台③

文章目录 六、hbuilderX 中使用 unicloud 云开发平台文档传统业务开发流程什么是 unicloudunicloud 优点开发流程uncloud 构成云数据库云存储及 CDN创建云函数工程七、unicloud api 操作云函数调用云函数实现云数据库基本增删改查1. 获取数据库引用云存储操作六、hbuilderX 中使…

【缓存策略】你知道 Refresh-ahead(预刷新)这个缓存策略吗?

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区:个人社区 💞 个人主页:个人主页 🙉 专栏地址: ✅ Java 中级 🙉八股文专题:剑指大厂,手撕 J…

零基础Java第十六期:抽象类接口(二)

目录 一、接口&#xff08;补&#xff09; 1.1. 数组对象排序 1.2. 克隆接口 1.3. 浅拷贝和深拷贝 1.4. 抽象类和接口的区别 一、接口&#xff08;补&#xff09; 1.1. 数组对象排序 我们在讲一维数组的时候&#xff0c;使用到冒泡排序来对数组里的元素进行从小到大或从大…

django入门【05】模型介绍(二)——字段选项

文章目录 1、null 和 blank示例说明⭐ null 和 blank 结合使用的几种情况总结&#xff1a; 2、choices**choices 在 Django 中有以下几种形式&#xff1a;**&#xff08;1&#xff09; **简单的列表或元组形式**&#xff08;2&#xff09; **字典映射形式**&#xff08;3&#…

数据量大Excel卡顿严重?选对报表工具提高10倍效率

当几万行的数据把软件频频跑崩&#xff0c;当珍贵的数据资源无法便捷复用&#xff0c;当数据填报的本地文档在各个电脑中传来传去……在各大岗位要求中频频出现的Excel&#xff0c;作为个人办公软件绝无仅有&#xff0c;但作为企业场景下的报表工具&#xff0c;效率显然不足。 …

如何用WordPress和Shopify提升SEO表现?

选择合适的建站程序对于SEO优化非常重要。目前&#xff0c;WordPress和Shopify是两种备受推崇的建站平台&#xff0c;各有优势。 WordPress最大的优点是灵活性。它支持大量SEO插件&#xff0c;帮助你调整元标签、生成站点地图、优化内容结构等。这些功能让你能够轻松地提升网站…

vue 计算属性get set

<template><div id"app"><h1>用户信息</h1><p>全名&#xff1a;{{ fullName }}</p><input v-model"fullName" placeholder"请输入全名" /><p>姓&#xff1a;{{ firstName }}</p><p>…

PHP搭建开发环境(Windows系统)

要搭建一个完整的PHP动态网站&#xff0c;离不开操作系统、Web服务器、数据库、和PHP软件。 虽然有不错方便的方式&#xff0c;比如使用phpstudio等等等等许多面板都是非常快速不错的方式&#xff0c;但是这里是教会大家如何配置而不只是依赖别人整合好的面板软件&#xff0c;…

7.2 图像复原之空间滤波

图像复原&#xff08;只存在噪声的复原&#xff09;之空间滤波 文章目录 图像复原&#xff08;只存在噪声的复原&#xff09;之空间滤波前言1. 均值滤波器1.1 算术平均滤波器1.2 几何均值滤波器1.3 谐波平均滤波器1.4 反谐波平均滤波器 总结 前言 当一幅图像仅被加性噪声退化时…

化工防爆巡检机器人:在挑战中成长,为化工安全保驾护航

随着全球能源需求的不断攀升&#xff0c;化工行业的安全性与高效性愈发受到关注。化工设施规模巨大&#xff0c;而且其中多数存在高风险因素&#xff0c;像是易燃易爆化学物质、高温环境、有毒有害物质以及高压设备等。仅2023年&#xff0c;国内危化品事故就多达652起&#xff…

【数字图像处理+MATLAB】对图片进行伽马校正(Gamma Correction):使用幂律变换公式进行伽马变换

引言 伽马校正&#xff08;Gamma Correction&#xff09;是一种用于图像处理的技术&#xff0c;主要用于调整图像的亮度或对比度。其基本原理是对图像的每一个像素应用一个非线性变换&#xff0c;以更好地适应人眼的视觉感知。在数字图像处理中&#xff0c;伽马校正通常用于调…

scala 迭代更新

在Scala中&#xff0c;迭代器&#xff08;Iterator&#xff09;是一种用于遍历集合&#xff08;如数组、列表、集合等&#xff09;的元素而不暴露其底层表示的对象。迭代器提供了一种统一的方法来访问集合中的元素&#xff0c;而无需关心集合的具体实现。 在Scala中&#xff0c…

部署zabbix遇到问题: cannot find a valid baseurl for repo:centos-sclo-rh/x86 64 怎么解决 ?

安装 Zabbix 前端包&#xff0c;提示cannot find a valid baseurl for repo&#xff1a;centos-sclo-rh/x86 64 安装zabbix前端包 # yum install zabbix-web-mysql-scl zabbix-apache-conf-scl 解决办法&#xff1a; 原因是&#xff1a;CentOS7的SCL源在2024年6月30日停止维护…