需要sql注入的帮助

时间:2011-10-12 20:45:40

标签: php sql sql-injection

首先,我不是想破解或做任何违法行为。以为我让你们知道。我有一个客户希望我对他的系统进行一些修改,当我看着它时,我注意到NOTHING被转义了。我不是在开玩笑,没有任何东西被逃脱。我向他解释说拥有这样一个系统是不安全的。然后他继续告诉我他已经有这样的系统这样几年没有发生任何事情。我需要告诉他他的系统不安全,但我真的不知道要执行sql注入。这里有一些使用$ _GET且未被转义的查询。

SELECT *,DATE_FORMAT(joined,'%M %d, %Y') as \"Joined\" FROM `members` WHERE `name` LIKE '".$ltr."%' ORDER BY points DESC LIMIT $page,50

这是另一个:

SELECT * FROM groups WHERE id=$thisladder[grid]

我唯一看到“可能”清理$ _GET的是这个函数:

if (!ini_get('register_globals')) {
   $superglobals = array($_SERVER, $_ENV,
       $_FILES, $_COOKIE, $_POST, $_GET);
   if (isset($_SESSION)) {
       array_unshift($superglobals, $_SESSION);
   }
   foreach ($superglobals as $superglobal) {
       extract($superglobal, EXTR_SKIP);
   }
}

上述函数可能正在清理变量。是的,系统也使用寄存器全局变量,这也很糟糕。

我也做了备份,以防万一。

3 个答案:

答案 0 :(得分:6)

不能说比http://xkcd.com/327/更好。

然而再次,正如Marc B所说,忘记SQL注入,register_globals更糟糕。从来没有想过我会真正看到它模仿,以防万一它已经关闭。

答案 1 :(得分:5)

向你的'朋友'展示他的代码是多么愚蠢的一些有趣的事情:

http://example.com/badscript.php?_GET[]=ha+ha+I+pwned+your+GET+superglobal
http://example.com/badscript.php?_SESSION[issuperuser]=1

这种事情确实为什么register_globals是一个彻头彻尾的愚蠢想法,并且(在FAR太长时间之后)最终被默认为OFF。

忘记SQL注入 - 这段愚蠢的代码允许远程PHP变量注入。

答案 2 :(得分:1)

如果登录代码看起来像这样:

$query = 'SELECT id FROM users WHERE username=\''.$_POST['username'].'\' AND password=\''.$_POST[password].'\'';
$result = mysql_query($query);
etc, etc...

尝试在登录字段中输入此内容

username = "whatever"
password = "' OR 1"

有意义吗?