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

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

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

相关文章

机器学习——贝叶斯

🌺历史文章列表🌺 机器学习——损失函数、代价函数、KL散度机器学习——特征工程、正则化、强化学习机器学习——常见算法汇总机器学习——感知机、MLP、SVM机器学习——KNN机器学习——贝叶斯机器学习——决策树机器学习——随机森林、Bagging、Boostin…

gdb编译教程(支持linux下X86和ARM架构)

1、下载源码 http://ftp.gnu.org/gnu/gdb/ 我下载的8.2版本。 2、下载完后拷贝到linux的x86系统。 3、解压,然后进入到目录下,打开当前目录的命令行窗口。 4、创建一个生成目录。 5、我们先开始x86版本,这个比较简单,不需要配置…

10款翻译工具实践体验感受与解析!!!!!

在现今的数字化时代,翻译工具如同语言的桥梁,为我们打开了通向世界的大门。今天咱们不聊别的,就聊聊那些让我又爱不释手的翻译工具们。因为我的职业因素,作为一个经常需要跟各种语言打交道的“文字搬运工”,这些工具可…

【日志】392.判断子序列

2024.11.8 【力扣刷题】 392. 判断子序列 - 力扣(LeetCode)https://leetcode.cn/problems/is-subsequence/?envTypestudy-plan-v2&envIdtop-interview-150 整个题从一开始就是打算从双指针的思想往下走的。但是,我设置了四个变量sLeft…

C++20 中最优雅的那个小特性 - Ranges

C20 中最优雅的那个小特性 - Ranges 大家好,今天我们来聊聊 C20 的一项非常重要的新特性——Ranges,可以让你的代码更优雅、更高效、更炫酷,如果你是一个对代码有所追求的小伙伴,那么这个特性你绝对值得拥有! 啥是 …

Python多进程间通讯(包含共享内存方式)

文章目录 1 通过非共享内存配合队列方式2 通过共享内存配合队列方式 注:本博文测试环境为Linux系统。 1 通过非共享内存配合队列方式 下面是一个常见的生产者与消费者的模式示例,这里分别启动了两个子进程,一个为生产者(producer…

深入理解接口测试:实用指南与最佳实践5.0(一)

✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…

2024.11.12_大数据的诞生以及解决的问题

大数据的诞生以及解决的问题 视频一:大数据诞生的背景原因:传统的数据处理架构无法满足海量的数据存储和计算需求 视频三:区分离线处理场景和实时处理场景视频五:传统的大数据与现代的大数据区别(离线场景)…

ML 系列: 第 24 节 — 离散概率分布(泊松分布)

目录 一、说明 二、固定时间间隔示例 三、固定间隔的示例 四、泊松分布的主要特征 五、示例 5.1 平均客户数的计算: 5.2 用于计算和绘制泊松分布的 Python 代码: 一、说明 泊松概率分布是一种离散概率分布,它表示在固定的时间或空间间隔内发生…

闯关leetcode——3174. Clear Digits

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/clear-digits/description/ 内容 You are given a string s. Your task is to remove all digits by doing this operation repeatedly: Delete the first digit and the closest non-digit cha…

机器情绪及抑郁症算法

🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月12日17点02分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id17230869054974 计算机来理解你的情绪&a…

【深圳大学】数据结构A+攻略(计软版)

1. 考试 1.1 形式 分为平时,笔试,机试三部分。其中: 平时占30%,包含平时OJ测验和课堂练习,注意这个可能会因老师的不同和课题组的新策略而改变。笔试占60%,是分值占比的主要部分。机试占10%。 1.2 题型…

Chrome使用IE内核

Chrome使用IE内核 1.下载扩展程序IE Tab 2.将下载好的IE Tab扩展程序拖拽到扩展程序界面,之后重启chrome浏览器即可

使用pytest+openpyxl做接口自动化遇到的问题

最近使用pytestopenpyxl做了个接口自动化的小项目,遇到了一些问题。 首先,使用pytest这个框架,主要是使用了pytest.fixture, pytest.mark.parametrize这两个fixture去做参数化,里面注入的数据是用openpyxl来实现的。 接口介绍&a…

IEC60870-5-104 协议源码架构详细分析

IEC60870-5-104 协议源码架构 前言一、资源三、目录层级一二、目录层级二config/lib60870_config.hdependencies/READMEexamplesCMakeLists.txtcs101_master_balancedcs104_client_asyncmulti_client_servertls_clienttls_server说明 make这些文件的作用是否需要导入这些文件&a…

TensorRT基础知识

github:https://github.com/NVIDIA/TensorRT 官网快速入门链接:Quick Start Guide :: NVIDIA Deep Learning TensorRT Documentation 引言: TensorRT 是 NVIDIA 推出的一个高性能深度学习推理库,专门用于优化和加速已经训练好的深度学习模型…

jenkins提交gitee后自动部署

jenkins中安装gitee插件 Gitee Plugin​​​​​​ 配置gitee WebHook 生成giteeHook密码 去gitee中配置webHook 输入jenkins中的url和生成的密码 当我们再提交后就可以自动部署 gitee官方配置

软件测试面试八股文(超详细整理)

请你说一说测试用例的边界 参考回答: 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。 常见的边界值 1)对16-bit 的整数而言 32…

【金融风控】特征评估与筛选详解

内容介绍 掌握单特征分析的衡量指标 知道 IV,PSI等指标含义 知道多特征筛选的常用方法 掌握Boruta,VIF,RFE,L1等特征筛选的使用方法 【理解】单特征分析 什么是好特征 从几个角度衡量:覆盖度,区分度,相关性,稳定…

链游系统定制化开发:引领游戏产业的新时代

在数字革命的浪潮中,链游(区块链游戏)作为一种新兴游戏形式,正重新定义游戏产业的发展方向。链游将区块链技术与传统游戏结合,使游戏体验更加公平透明,并赋予玩家真正的资产所有权。这一领域不仅为玩家带来…