我正在搞乱我朋友的代码(他给了我100%的权限来测试他的网络应用程序的乐趣)我发现了一个漏洞,让我可以查看他的代码的某些部分。但是,在尝试利用各种模糊测试/手动测试技术时,我无法获得详细的错误,也无法使用查询绕过身份验证。我试图通过--cookie =“”标志使用sqlmap来解决这个问题但是没有成功。
我知道$ token变量没有包含在''之间,因此我想我可以添加以下内容:1 OR 1 = 1“ - (这不起作用)
到目前为止,我只能获得一个mysqli_result对象作为返回:
mysqli_result Object
(
[current_field] => 0
[field_count] => 5
[lengths] =>
[num_rows] => 0
[type] => 0
)
//which, by the way, changes values depending upon what I input/fuzz.
<?php
include_once("mysql.php");
$ck = $_COOKIES;
if(isset($ck["session"])){
$token = $ck['session'];
$conn->query("SELECT * FROM sessions WHERE token=$token AND loggedin=1");
if ($result->num_rows > 0) {
header("Location: account.php");
}
}
?>
答案 0 :(得分:4)
是的,这行代码容易受到SQL注入攻击。
如果您要求的模式会暴露漏洞,请考虑只提供字符串'token'
。
然后生成的SQL将是:
SELECT * FROM sessions WHERE token=token AND loggedin=1
或者,使用1 OR 1=1 --
添加--
来发表评论,以便查询可以是:
SELECT * FROM sessions WHERE token=1 OR 1=1 -- AND loggedin=1
-
就进一步利用该漏洞而言,黑客拥有可以帮助他们快速解决问题的工具。
我们不需要花时间深入研究它。只需通过重构代码以使用带有绑定占位符的预处理语句来修复漏洞。
如果这是易受攻击的,很可能是同一个开发人员在整个代码中留下了大量的SQL注入漏洞。所有代码都需要修复。