提问人:NotACodER 提问时间:6/27/2023 最后编辑:NotACodER 更新时间:6/28/2023 访问量:65
Sleep() 不适用于 mysql-connector-python 中的堆叠查询
Sleep() not working with stacked query in mysql-connector-python
问:
我正在努力在 Django 中创建一个基于安全性的 CTF 应用程序。我目前正在构建的练习是基于时间的盲目 sql 注入。由于 Django 似乎不支持堆叠查询,因此我导入了 mysql-connector-python,它确实支持使用 .Model.raw()
cursor.execute(query, multi=True)
但是,当尝试在堆叠查询中使用时,sleep 语句将不会执行。下面是一个示例:sleep(X)
视图:
query = f"select sleep(2); select 1;"
mydb = mysql.connector.connect(
host="localhost",
user="****",
password="****",
database="****"
)
cursor = mydb.cursor()
cursor.execute(query, multi=True)
return HttpResponse(f"query: {cursor}")
SQLI脚本:
url = f"http://127.0.0.1:8080/books/book/?q=1"
start = time.perf_counter()
response = requests.get(f'{url}')
end = time.perf_counter()
print(response.text)
print(f'response time: {end-start}')
这将返回以下内容:
query: MySQLCursor: select sleep(2); select 1;
response time: 0.005476321006426588
但是,如果删除 multi=True 并运行单个查询,则睡眠将正常工作。
视图:
query = f"select sleep(2);"
mydb = mysql.connector.connect(
host="localhost",
user="****",
password="****",
database="****"
)
cursor = mydb.cursor()
cursor.execute(query)
return HttpResponse(f"query: {cursor}")
SQLI脚本:
url = f"http://127.0.0.1:8080/books/book/?q=1"
start = time.perf_counter()
response = requests.get(f'{url}')
end = time.perf_counter()
print(response.text)
print(f'response time: {end-start}')
这将返回以下内容:
query: MySQLCursor: select sleep(2);
response time: 2.010241993004456
请注意,我已经尝试使用,但它也不会执行。这也是一个简单的例子,因为练习的真正内容是读取一个文件(例如 /etc/passwd)并使用基于时间的盲响应从临时表中一次一个字符地拉回数据。do sleep(X)
查询在MySQL控制台和工作台中工作正常,因此它应该不是查询本身的问题。select sleep(2); select 1;
执行文档的 URL:https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html
我一直在搜索MySQL文档以及有关堆叠查询的问题,但找不到任何使用sleep命令的内容。
提前感谢大家的帮助!
答:
链接的文档说:
如果设置为 , ...返回一个迭代器,该迭代器允许处理每个语句的结果。
multi
True
execute()
若要查看工作,请遍历迭代器:。sleep(2)
list(cursor.execute(query, multi=True))
评论