gpt4 book ai didi

MySQL注入(inject)渗透

转载 作者:行者123 更新时间:2023-11-29 00:21:32 33 4
gpt4 key购买 nike

我是新来的,所以我会尽量使我的帖子清晰易读。

在浏览某些站点的日志时,我遇到了一些我想在封闭服务器中重新创建/测试的黑客攻击尝试。我制作了一个简单的 PHP 网页,它获取一个名为“id”的变量,并且没有任何过滤/验证在查询中使用它。

相关PHP代码

$var = $_GET['id'];

echo $_GET['id'] . "<br>\n";

include ( "/var/www/dbconnect.php" );
$mysqli = new mysqli ( $db_host, $db_user, $db_password, "news" );
if ( $mysqli->connect_errno ) { echo "Failed to connect to MySQL: (" . $mysqli- >connect_errno . ") " . $mysqli->connect_error; }

$query = "SELECT id, date, subject FROM news_table WHERE id=" . $var;
//$query = "SELECT id, date, subject FROM news_table WHERE id=250; DROP TABLE test;"; // This won't work because in PHP's implementation multiple statements are not allowed
if ( ! $result = $mysqli->query ( $query ) ) { echo "CALL failed: (" . $mysqli->errno . ") " . $mysqli->error; } else { }

然后我使用以下内容加载页面

testserver/test-files/test-mysql-vulnerability.php?id=362099999.1
union select unhex(hex(version())) -- 1=1

得到这个结果:

 CALL failed: (1222) The used SELECT statements have a different number
of columns

黑客花了 5 分钟发送大量组合,试图闯入我们的生产服务器。我的生产服务器没有像上面的错误那样给出任何成功/失败的指示。

我的问题是:当列数不匹配时,上面的 hack 可以工作吗?如果是怎么办?

发送

最佳答案

如评论中所述,请勿这样做。

不过,要回答您的问题,union 在注入(inject)中很有用,因为它允许您在输出中使用不相关的表。您看到的错误是因为原始数据库查询需要一定数量和类型的列,而注入(inject)的查询只需要一个。在这种情况下,我们知道我们需要三列(从代码中),所以我们希望生成的 SQL 语句是

SELECT id, date, subject FROM news_table WHERE id=3 union select 0, 0, unhex(hex(version())) --

(根据您的数据类型和我的能力,这可能无法完全正常工作)。

关于MySQL注入(inject)渗透,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20853244/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com