工具参数获取
- 工具思路
- 验证sql注入是否存在
- 基于错误base_error
- You have an error in SQL syntax;
- 获取测试url,对指定参数进行模糊测试FUZZ
- 工具参数设置
- 测试url -u
- 测试FUZZ文件 -i
参数获取代码编写
parser = optparse.OptionParser()
parser.usage="sqlinjector.py -u url -i inject_fuzz.txt"
parser.add_option("-u",'--url',dest='url',help='url to test sql',action='store',type='string',metavar='URL')
parser.add_option('-i','--inject',dest='inject_file',help="fuzz fliename",action='store',type='string',metavar='FUZZFILE')
(options,args) = parser.parse_args()
url = options.url
fuzz_file = options.inject_file
Sql注入测试
- 原理
根据是否具有特定字符, you have an error in your SQL syntax实现
发送请求对每一个url进行拼接, 得到响应字符串,查看是否具有SQL syntax
def get_urls():
urls = []
with open(fuzz_file,'r')as f:
payload_list = f.readlines() #每一项之后都有一个\n需要使用strip()去除
for payload in payload_list:
temp_url = url #生成一个新的url,避免拼接内容后就
payload = payload.strip()
urls.append(temp_url.replace("FUZZ",payload)) #replace拼接内容,将前者替换为后者
return urls
inject_urls = get_urls()
result_list = [] # 存储sql注入验证成功的url列表
is_injectable = []
def test_sql():
print("testing url:")
for item in inject_urls:
r = requests.get(url=item)
print(r.url)
result = r.text
if result.find("SQL syntax") != -1: #判断返回结果是否存在SQL syntax
is_injectable.append(True)
result_list.append(r.url)
test_sql()
if len(result_list) == 0:
print("no sql inject")
else:
print("*"*50)
print("exist sql inject")
for item in result_list:
print(item)
print("*"*50)
探测表字段数
- 利用sql注入
- 获取当前注入点,对应数据表的字段数
- 定义
- def delect_columns_num():
- 探测当前字段数/列数