这行代码是否容易受到SQLI攻击?

时间:2017-03-22 01:22:49

标签: php mysql security

我正在搞乱我朋友的代码(他给了我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");
  }
}

?>

1 个答案:

答案 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注入漏洞。所有代码都需要修复。