2

我试图向我的客户证明系统对 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 处注入的查询。但由于引用,这非常复杂。

在这种特定情况下进行注入的任何想法或其他类型的技术?

4

3 回答 3

4

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

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

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

于 2012-05-27T15:56:52.833 回答
1

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

如果有人要入侵您的数据库,或发现转储部分或全部数据所需的适当 SQL 注入,则黑客将有权访问任何用户曾尝试用于登录网站的所有密码。

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

发冷。想到有这样的代码就让我不寒而栗。

于 2012-05-27T16:47:34.740 回答
0

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

如果您可以通过用户输入运行任何类型的 SQL,那是不安全且丑陋的!这不是你是否能弄清楚有效的攻击类型的问题,黑客可以通过许多创造性的方式获得他们想要的东西。

可以在插入查询上运行基于时间的 SQL 注入,无论选择查询是否通过都没有关系。

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

于 2012-05-27T16:02:32.110 回答