复杂的mysql注入

时间:2012-05-27 15:45:10

标签: mysql sql-injection

我试图向我的客户证明该系统对mysql注入不安全。我希望有一些证据可以向我显示用户的完整列表(从*中选择)或在系统中注入新的用户/管理员,以便我可以在之后登录。

这是我构建系统的简化方法:

PHP登录网站:

$user = $_POST["user"];
$pwd = $_POST["pwd"];

$query1 = "INSERT INTO user_log (username, password,ip) VALUES ('$user','$pwd','127.1.1.1')";

$result1 = mysql_query($query1) or die("Query failed: "  . mysql_error());

$query2 = "select * from login where name = '$user' and pass = '$pwd' limit 1";

$result2 = mysql_query($query2) or die("Query failed: "  . mysql_error());

mysql表是这样的:

CREATE TABLE `user_log` (
  `idadmin` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(45) DEFAULT NULL,
  `password` varchar(45) DEFAULT NULL,
  `ip` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`idadmin`)
)

CREATE TABLE `login` (
  `idlogin` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `pass` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`idlogin`)
)

即使我看到它完全不安全,我发现很难注入它。

  1. 我尝试的第一件事是注入INSERT查询,但除了垃圾邮件user_log表之外,很难从中得到一些不错的结果。
  2. 我试图通过第一个query1进行查询并在query2中注入。但由于引用,这很复杂。
  3. 在这种特定背景下进行注射的任何想法或其他技术?

3 个答案:

答案 0 :(得分:4)

您无需证明您可以查看所有用户记录以证明系统不安全。

如果代码在magic_quotes_gpc下运行,它应该是相当安全的,尽管magic_quotes_gpc引入了各种其他问题。

如果您未在magic_quotes_gpc下运行,则无论提供什么密码,您都应该能够使用用户名' or true; --登录。

答案 1 :(得分:1)

忘记SQL注入。该系统可以被认为是非安全的,仅基于它将非散列/非盐渍密码存储在登录表和日志表中。

如果有人入侵您的数据库,或发现转储部分或全部数据所需的适当SQL注入,黑客就可以访问任何用户试图用来登录网站的所有密码。

想想安全隐患。如果您随机浏览到此网站,忘记了您使用的密码,然后尝试所有常见的密码变体,此数据库将保留其中的最后一个。

寒战。我觉得这样的代码在那里就让我感到寒意。

答案 2 :(得分:0)

如果客户使用的是旧版本的PHP,低于5.4.0版本,并且启用了mysql_quotes_gpc,那么这是安全的。

如果你可以通过用户输入运行任何类型的SQL,那就是 INSECURE 而且丑陋!这不是一个问题,你是否可以找出有效的攻击类型,黑客可以通过许多创造性的方式获得他们想要的东西。

可以在插入查询上运行

Time based SQL injection,如果选择查询是否通过则无关紧要。

如果mysql用户具有权限,SQL注入可以允许攻击者创建文件。 SELECT load_file('/ etc / passwd')INTO OUTFILE'/some/path/to/web/root/here.php'