一、命令注入漏洞详细介绍1. 漏洞核心定义完整版命令注入Command Injection是一种高危网络安全漏洞指应用程序在执行系统命令时未对用户输入进行有效过滤、校验或转义直接将不可信的用户输入拼接至系统命令中执行导致攻击者可构造恶意Payload绕过程序限制执行任意系统命令的攻击方式。其核心本质是“数据与命令未分离”——正常情况下用户输入应作为“数据”被程序处理而漏洞场景中用户输入被当作“命令的一部分”执行这也是命令注入与其他注入漏洞如SQL注入的核心区别SQL注入针对数据库查询命令注入针对系统命令。简单来说当程序使用system()、shell_exec()等危险函数执行系统命令且直接拼接用户输入时就可能存在命令注入漏洞这也是DVWA靶场Command Injection模块的核心漏洞原理与后续实操、源码解析高度关联。2. 漏洞分类按触发场景操作系统命令注入最常见主要发生在Web应用、网络服务、物联网设备等场景攻击者通过构造Payload执行服务器操作系统命令如Windows的dir、Linux的ls等也是本次DVWA实操的核心类型。例如Web应用中用户输入IP地址用于ping测试未过滤拼接符攻击者可注入恶意命令获取服务器信息。代码命令注入攻击者注入可执行的代码片段被程序当作代码执行而非系统命令常见于脚本语言PHP、Python开发的应用如PHP中的eval()函数未过滤用户输入可能导致代码注入与系统命令注入原理类似但攻击范围更偏向代码层面。间接命令注入程序未直接执行用户输入的命令而是将用户输入存入文件、数据库等介质后续程序读取该内容并执行系统命令时触发漏洞危害更隐蔽排查难度更高。3. 漏洞触发条件必记命令注入漏洞的触发必须同时满足以下3个条件缺一不可也是判断程序是否存在该漏洞的核心依据程序必须执行系统命令应用程序中使用了可执行系统命令的函数如PHP中的shell_exec()、system()、exec()、passthru()等对应DVWA源码中使用的shell_exec()函数这是触发漏洞的基础。用户输入可控制命令参数用户能够控制拼接至系统命令中的部分内容如DVWA中用户输入的IP地址直接拼接至ping命令后执行即用户输入成为命令的一部分。输入未做有效过滤/转义程序未对用户输入中的特殊字符如拼接符、恶意命令关键词进行过滤、校验或安全转义导致恶意输入被正常执行这是漏洞存在的核心原因也是不同安全级别防护的关键差异点。4. 漏洞危害按严重程度排序命令注入属于高危漏洞一旦被利用攻击者可实现从信息泄露到完全控制服务器的一系列攻击结合实操场景具体危害如下信息泄露执行whoami、id等命令获取服务器当前用户权限执行ls、dir等命令查看服务器目录结构执行cat /etc/passwdLinux、type C:\Windows\System32\drivers\etc\hostsWindows等命令读取敏感文件获取账号密码、配置信息等核心数据。权限提升通过注入恶意命令切换用户权限如sudo命令获取服务器管理员权限拥有对服务器的完全操作权限。服务器控制执行恶意脚本、植入后门程序建立反向连接长期控制服务器甚至将服务器作为肉鸡用于发起其他攻击。数据破坏/篡改执行rm -rfLinux、delWindows等命令删除服务器核心文件、数据库或通过echo命令篡改配置文件、业务数据导致服务瘫痪、业务中断。内网探测通过执行ping、traceroute等网络命令探测服务器所在内网的其他设备为后续内网攻击铺路。5. 常见触发场景贴合实操与实际应用命令注入漏洞多出现于需要执行系统命令的功能模块结合DVWA实操及实际Web应用常见场景包括网络测试功能如DVWA中的ping测试、端口扫描、 traceroute路由跟踪等用户输入IP、域名等参数程序直接拼接至系统命令执行。文件操作功能文件上传、下载、删除、查看等功能若用户输入的文件名、路径直接拼接至系统命令如rm、cat命令可能触发漏洞。系统管理功能后台管理系统中的服务器监控、进程管理、命令执行面板等若未做严格防护可能被攻击者利用注入恶意命令。物联网/网络设备路由器、摄像头、智能家居等设备的管理界面其配置功能可能执行系统命令输入未过滤易触发漏洞。脚本调用场景应用程序调用外部脚本如Shell脚本、批处理文件且脚本参数由用户控制未做过滤时可能导致命令注入。6. 与其他注入漏洞的区别易混点区分与SQL注入核心区别在于攻击目标不同——SQL注入针对数据库通过注入SQL语句操作数据库命令注入针对操作系统通过注入系统命令控制服务器二者注入原理、Payload格式、防御方式均不同。与XSS跨站脚本XSS是将恶意脚本注入到页面中针对前端用户命令注入是将恶意命令注入到系统中针对服务器前者危害用户数据后者危害服务器安全风险等级更高。二、核心知识点精简版1. 核心定义命令注入用户输入未被过滤直接拼接至系统命令执行攻击者可构造Payload执行任意系统命令。2. 关键拼接符必记; 顺序执行前后命令无论前命令是否成功| 管道符前命令输出作为后命令输入 后台执行前命令继续执行后命令 前命令成功才执行后命令|| 前命令失败才执行后命令3. 绕过技巧3种核心双写如id→iidd绕过黑名单过滤大小写混淆如whoami→WhoAmI编码绕过如whoami→URL编码%77%68%6f%61%6d%694. 核心防护思路白名单过滤输入、禁用system()等危险函数、服务权限最小化。三、实操流程DVWA环境实操前提1. 环境准备确保本地或服务器已搭建DVWA靶场版本无特殊要求默认配置即可靶场可正常访问已完成数据库连接配置2. 权限准备DVWA登录账号密码默认admin/password确保可正常切换安全级别。步骤1Low级别实操无过滤登录DVWA后点击左侧导航栏“Command Injection”模块进入实操页面在页面顶部安全级别下拉框中选择“Low”点击“Submit”确认切换在输入框中依次提交以下3条Payload每次提交后等待页面加载完成详细记录执行结果如返回的用户信息、目录内容等 127.0.0.1whoami 查看当前系统登录用户核心验证逻辑与符“”的用法后台执行前命令继续执行后命令127.0.0.1 | ifconfig 查看服务器网卡信息核心验证管道符“|”的用法前命令输出作为后命令输入127.0.0.1 dir 查看当前目录下所有文件核心验证逻辑与符“”的用法前命令执行成功才执行后命令额外测试尝试提交“127.0.0.1 || dir”观察执行结果前命令127.0.0.1执行成功后命令ls不执行辅助理解逻辑或符“||”的用法步骤2Medium级别实操基础过滤在实操页面顶部安全级别下拉框中切换为“Medium”点击“Submit”确认先尝试提交Low级别中使用的3条Payload127.0.0.1;whoami、127.0.0.1 ls、127.0.0.1 | ifconfig观察页面反馈记录过滤现象——可发现“;”“”被系统过滤提交后无有效执行结果仅返回正常的ping命令结果基于过滤现象使用未被过滤的拼接符|、提交以下Payload每次提交后记录执行结果重点观察与Low级别的差异 127.0.0.1 | whoami 利用管道符绕过过滤获取当前用户信息可以发现“”已经被注释了“”windows语法限制无法作为命令分隔符所以将127.0.0.1whoami进行ping命令全部执行了127.0.0.1 whoami/all利用后台执行符“”绕过过滤获取当前用户id信息127.0.0.1 | dir 查看当前目录文件的详细信息进一步验证管道符的可用性127.0.0.1systeminfo(可以看出来“”被过滤了)0.0.0.0 || dir (查看当前目录文件的详细信息进一步验证逻辑或符的可用性关键结论Medium级别仅过滤了“;”“”两种拼接符未过滤“|”“”“||”可通过未被过滤的拼接符构造Payload实现命令注入。步骤3High级别实操进阶绕过将安全级别切换为“High”点击“Submit”确认先尝试提交Low、Medium级别中有效的Payload如127.0.0.1; whoami、127.0.0.1 | whoami观察页面反馈发现多数拼接符、常用命令whoami均被黑名单过滤提交后无有效执行结果 1127.0.0.1; whoami2127.0.0.1whoami(3) 127.0.0.1whoami4127.0.0.1|whoami(5)0.0.0.0 ||whoami基于黑名单过滤规则依次测试3种核心绕过方式每次测试后记录Payload是否有效、执行结果若失败则分析失败原因如编码错误、双写格式错误 双写绕过127.0.0.1| ddirir 针对“dir”命令被过滤通过双写字符绕过黑名单执行后可获取用户目录信息若失败检查双写格式是否正确避免多写或少写字符大小写混淆127.0.0.1 | WhoAmI 针对“whoami”命令被过滤通过大小写交替绕过执行后可获取当前用户信息注意区分大小写避免全大写或全小写仍被过滤编码绕过127.0.0.1 | %77%68%6f%61%6d%69 将“whoami”进行URL编码绕过黑名单过滤编码前需确认靶场支持URL编码解析若执行失败检查编码是否正确可重新生成URL编码截图3种绕过方式的成功执行页面同时截图失败尝试的页面记录失败原因如“编码错误导致Payload无法解析”“双写格式错误被过滤”补充测试尝试组合绕过方式如大小写双写127.0.0.1 | WhOoAaMmIi验证绕过效果记录有效组合Payload丰富实操成果关键结论High级别并未采用黑名单过滤所以通过双写、大小写混淆、编码等方式绕过会显示空白或者错误参数只覆盖了常用拼接符和命令只能使用管道符进行绕过。步骤4复盘与成果整理对比3个安全级别的防护差异详细记录核心区别形成清晰的对比逻辑 Low级别无任何过滤可直接通过任意拼接符构造Payload执行命令防护等级最低Medium级别基础过滤仅过滤“;”“”两种拼接符未过滤“|”“”防护存在明显漏洞High级别进阶过滤过滤常用拼接符和命令只能通过管道符防护等级高于前两个级别但仍可被绕过。实操注意事项1. 实操过程中每一步都需截图留存确保汇报时有完整的成果支撑截图需清晰、完整包含关键信息安全级别、Payload、执行结果2. 若Payload执行失败先检查Payload格式是否正确、拼接符使用是否规范再分析是否被过滤避免因操作失误导致实操失败3. 实操仅在自己搭建的DVWA靶场进行严禁在未授权的服务器或网站上测试避免违反相关规定。四、DVWA Command Injection 源码深度解析全级别一Low 级别源码分析1. 核心代码2. 内置函数功能介绍简单易懂isset()判断变量是否已设置且非null此处用于判断用户是否点击了“Submit”提交按钮确认有提交请求后再执行后续逻辑。$_REQUEST[ ]PHP超全局变量可获取用户通过POST、GET等方式提交的参数此处用于获取输入框中用户输入的IP地址name为ip的输入框。stristr()字符串查找函数忽略大小写用于查找第一个参数此处是服务器系统信息中是否包含第二个参数此处是“Windows NT”判断服务器操作系统类型。php_uname(s)获取服务器操作系统名称参数s表示仅返回系统名称如Windows NT、Linux。shell_exec()执行系统命令并返回命令执行的输出结果此处用于执行ping命令将用户输入的IP拼接后执行。echo输出函数用于将ping命令的执行结果$cmd以预格式化pre标签的形式展示在页面上方便用户查看。3. 漏洞深度剖析漏洞点代码直接通过$_REQUEST[ ip ]获取用户输入未做任何过滤、校验直接将用户输入拼接至ping命令中属于完全无防护的状态与实操中Low级别“无任何过滤、可直接注入”的现象完全对应。攻击原理结合实操中使用的Payload如127.0.0.1; whoami拼接后最终命令为“ping 127.0.0.1; whoami”Windows系统或“ping -c 4 127.0.0.1; whoami”Linux系统服务器执行完ping命令后会强制执行后续的whoami命令从而实现命令注入泄露当前服务器登录用户信息。本质原因开发者未意识到用户输入的不可信性缺乏输入验证和命令拼接的风险控制直接将用户输入作为命令一部分执行是最典型、最基础的命令注入漏洞场景。4. 修复建议对用户输入的IP地址进行严格校验如验证是否为合法IP格式拆分IP为4段并确认每段为数字或使用安全函数如escapeshellarg()对输入进行转义禁止直接拼接用户输入至系统命令从源头避免恶意命令注入。二Medium 级别源码分析1. 核心代码2. 内置函数功能介绍简单易懂isset()、$_REQUEST[]、stristr()、php_uname(s)、shell_exec()、echo功能与Low级别一致此处不再重复。array()PHP数组函数此处用于定义黑名单关联数组键名为需要过滤的字符、;键值为空字符串用于后续替换过滤。array_keys()获取数组中所有的键名此处用于获取黑名单数组中的“”和“;”作为后续替换的目标字符。str_replace()字符串替换函数语法为str_replace(要替换的字符集合, 替换后的字符, 被替换的字符串)此处用于将用户输入$target中的“”和“;”替换为空字符串实现简单的黑名单过滤。3. 漏洞深度剖析防护机制相比Low级别增加了简单的黑名单过滤逻辑通过定义包含“”和“;”的黑名单数组使用str_replace函数删除用户输入中的这两种常见命令拼接符试图阻止命令注入与实操中“提交;和拼接的Payload无效果”的现象对应。绕过原理该级别采用黑名单过滤机制存在明显遗漏——未过滤“|”“”等其他常用命令拼接符攻击者可使用未被过滤的管道符“|”或后台执行符“”构造Payload如127.0.0.1 | whoami、127.0.0.1 id拼接后可正常执行恶意命令实现绕过与实操中Medium级别的绕过方式完全匹配。本质原因黑名单过滤方式本身存在缺陷无法覆盖所有可能的恶意拼接符和绕过方式仅能防御最简单的攻击防护不够全面无法从根本上杜绝命令注入。4. 修复建议放弃黑名单过滤方式采用白名单校验如严格验证用户输入是否为合法IP格式同时使用安全函数如escapeshellarg()对用户输入进行转义避免用户输入被当作命令的一部分执行彻底杜绝命令注入漏洞。三High 级别源码分析1. 核心代码2. 内置函数功能介绍简单易懂isset()、$_REQUEST[]、stristr()、php_uname(s)、shell_exec()、echo、array()、array_keys()、str_replace()功能与Low、Medium级别一致此处不再重复。trim()字符串处理函数用于去除用户输入字符串首尾的空白字符空格、换行、制表符等避免因首尾空白字符导致过滤失效但无法防御核心的命令注入漏洞。3. 漏洞深度剖析防护机制相比Medium级别黑名单大幅扩充覆盖了“”“;”“|”“-”“$”等几乎所有常见的命令拼接符和特殊字符同时增加trim()函数处理用户输入试图全面阻止命令注入与实操中“常规Payload均被过滤”的现象对应。绕过原理该级别仍采用黑名单过滤思路存在固有缺陷——无法覆盖所有绕过方式攻击者可通过双写、大小写混淆、编码等技巧绕过黑名单过滤如双写id→iidd、大小写混淆whoami→WhoAmI、URL编码whoami→%77%68%6f%61%6d%69构造有效的Payload执行恶意命令与实操中High级别的绕过技巧完全匹配。本质原因黑名单过滤思路本身存在局限性无论如何扩充黑名单都无法穷尽所有可能的恶意字符和绕过方式仅能提升攻击难度无法彻底防御命令注入。4. 修复建议摒弃黑名单过滤思路采用白名单校验机制如验证用户输入是否为合法IP地址拆分IP为4段并确认每段为数字同时使用escapeshellarg()等安全函数对用户输入进行转义将用户输入作为命令参数而非命令片段处理从源头杜绝命令注入。四Impossible 级别源码分析终极安全1. 核心代码2. 内置函数功能介绍简单易懂isset()、$_REQUEST[]、stristr()、php_uname(s)、shell_exec()、echo功能与前三个级别一致此处不再重复。checkToken()DVWA内置的CSRF防御函数用于验证用户提交的tokenuser_token与服务器会话中的tokensession_token是否一致确保请求来自合法的DVWA页面防止跨站请求伪造攻击。stripslashes()字符串处理函数用于移除用户输入字符串中的反斜杠“\”防止攻击者通过转义字符绕过过滤确保输入内容的纯净性。explode(., $target)字符串拆分函数用于按“.”将用户输入的IP地址拆分为一个数组$octet便于后续校验IP格式。is_numeric()判断变量是否为数字或数字字符串此处用于校验拆分后的IP数组$octet的每一段是否为数字确保IP格式合法。sizeof()用于计算数组的长度此处用于校验拆分后的IP数组是否恰好为4段符合IP地址的基本格式4段数字以“.”分隔。generateSessionToken()DVWA内置函数用于生成新的CSRF token并存储在会话中确保每次请求的token唯一提升CSRF防护的安全性。$_SESSION[]PHP超全局变量用于存储用户会话信息此处用于获取服务器会话中存储的CSRF tokensession_token与用户提交的token进行比对。3. 漏洞深度剖析无漏洞终极安全安全机制该级别采用三层防御体系彻底杜绝命令注入漏洞与实操中“Impossible级别无法注入”的现象完全对应三层防御逻辑如下1. 第一层CSRF防护checkToken()函数验证请求的合法性防止恶意网站伪造请求提交恶意Payload从请求源头进行防护。2. 第二层输入格式严格校验通过explode()、is_numeric()、sizeof()函数强制要求用户输入的IP地址必须是“4段数字.”的格式每一段均为数字、恰好4段不符合格式则直接拒绝执行命令从输入源头杜绝恶意字符。3. 第三层输入纯净处理stripslashes()函数移除输入中的反斜杠防止攻击者通过转义字符绕过校验进一步确保输入内容的安全性。本质该级别摒弃了黑名单过滤的缺陷采用“白名单校验请求防护输入净化”的组合方式从根本上实现了“数据与命令分离”用户输入仅能是合法IP地址无法构造恶意Payload彻底杜绝命令注入。4. 修复建议可直接用于实际开发参考Impossible级别防护逻辑实现三层防护1. 增加CSRF token校验防止跨站请求伪造2. 对用户输入进行严格的白名单格式校验如IP地址、合法参数等不符合格式直接拒绝3. 使用stripslashes()等函数对输入进行净化处理避免转义注入4. 坚持“最小权限原则”限制执行系统命令的函数权限进一步提升安全性。五、源码分析总结衔接实操与防护结合实操中三个级别的测试结果和源码解析可明确命令注入的核心漏洞根源是“用户输入未被有效校验直接拼接至系统命令”而不同级别防护的差异本质是对用户输入的校验方式和函数使用的不同。所有内置函数的核心作用的是“控制用户输入”和“规范命令执行”其中escapeshellarg()、is_numeric()是防御命令注入的关键函数checkToken()用于防御CSRF攻击共同构成安全的防护体系也是实操中防御建议的核心依据。
命令注入学习知识点+实操流程
发布时间:2026/6/4 16:31:19
一、命令注入漏洞详细介绍1. 漏洞核心定义完整版命令注入Command Injection是一种高危网络安全漏洞指应用程序在执行系统命令时未对用户输入进行有效过滤、校验或转义直接将不可信的用户输入拼接至系统命令中执行导致攻击者可构造恶意Payload绕过程序限制执行任意系统命令的攻击方式。其核心本质是“数据与命令未分离”——正常情况下用户输入应作为“数据”被程序处理而漏洞场景中用户输入被当作“命令的一部分”执行这也是命令注入与其他注入漏洞如SQL注入的核心区别SQL注入针对数据库查询命令注入针对系统命令。简单来说当程序使用system()、shell_exec()等危险函数执行系统命令且直接拼接用户输入时就可能存在命令注入漏洞这也是DVWA靶场Command Injection模块的核心漏洞原理与后续实操、源码解析高度关联。2. 漏洞分类按触发场景操作系统命令注入最常见主要发生在Web应用、网络服务、物联网设备等场景攻击者通过构造Payload执行服务器操作系统命令如Windows的dir、Linux的ls等也是本次DVWA实操的核心类型。例如Web应用中用户输入IP地址用于ping测试未过滤拼接符攻击者可注入恶意命令获取服务器信息。代码命令注入攻击者注入可执行的代码片段被程序当作代码执行而非系统命令常见于脚本语言PHP、Python开发的应用如PHP中的eval()函数未过滤用户输入可能导致代码注入与系统命令注入原理类似但攻击范围更偏向代码层面。间接命令注入程序未直接执行用户输入的命令而是将用户输入存入文件、数据库等介质后续程序读取该内容并执行系统命令时触发漏洞危害更隐蔽排查难度更高。3. 漏洞触发条件必记命令注入漏洞的触发必须同时满足以下3个条件缺一不可也是判断程序是否存在该漏洞的核心依据程序必须执行系统命令应用程序中使用了可执行系统命令的函数如PHP中的shell_exec()、system()、exec()、passthru()等对应DVWA源码中使用的shell_exec()函数这是触发漏洞的基础。用户输入可控制命令参数用户能够控制拼接至系统命令中的部分内容如DVWA中用户输入的IP地址直接拼接至ping命令后执行即用户输入成为命令的一部分。输入未做有效过滤/转义程序未对用户输入中的特殊字符如拼接符、恶意命令关键词进行过滤、校验或安全转义导致恶意输入被正常执行这是漏洞存在的核心原因也是不同安全级别防护的关键差异点。4. 漏洞危害按严重程度排序命令注入属于高危漏洞一旦被利用攻击者可实现从信息泄露到完全控制服务器的一系列攻击结合实操场景具体危害如下信息泄露执行whoami、id等命令获取服务器当前用户权限执行ls、dir等命令查看服务器目录结构执行cat /etc/passwdLinux、type C:\Windows\System32\drivers\etc\hostsWindows等命令读取敏感文件获取账号密码、配置信息等核心数据。权限提升通过注入恶意命令切换用户权限如sudo命令获取服务器管理员权限拥有对服务器的完全操作权限。服务器控制执行恶意脚本、植入后门程序建立反向连接长期控制服务器甚至将服务器作为肉鸡用于发起其他攻击。数据破坏/篡改执行rm -rfLinux、delWindows等命令删除服务器核心文件、数据库或通过echo命令篡改配置文件、业务数据导致服务瘫痪、业务中断。内网探测通过执行ping、traceroute等网络命令探测服务器所在内网的其他设备为后续内网攻击铺路。5. 常见触发场景贴合实操与实际应用命令注入漏洞多出现于需要执行系统命令的功能模块结合DVWA实操及实际Web应用常见场景包括网络测试功能如DVWA中的ping测试、端口扫描、 traceroute路由跟踪等用户输入IP、域名等参数程序直接拼接至系统命令执行。文件操作功能文件上传、下载、删除、查看等功能若用户输入的文件名、路径直接拼接至系统命令如rm、cat命令可能触发漏洞。系统管理功能后台管理系统中的服务器监控、进程管理、命令执行面板等若未做严格防护可能被攻击者利用注入恶意命令。物联网/网络设备路由器、摄像头、智能家居等设备的管理界面其配置功能可能执行系统命令输入未过滤易触发漏洞。脚本调用场景应用程序调用外部脚本如Shell脚本、批处理文件且脚本参数由用户控制未做过滤时可能导致命令注入。6. 与其他注入漏洞的区别易混点区分与SQL注入核心区别在于攻击目标不同——SQL注入针对数据库通过注入SQL语句操作数据库命令注入针对操作系统通过注入系统命令控制服务器二者注入原理、Payload格式、防御方式均不同。与XSS跨站脚本XSS是将恶意脚本注入到页面中针对前端用户命令注入是将恶意命令注入到系统中针对服务器前者危害用户数据后者危害服务器安全风险等级更高。二、核心知识点精简版1. 核心定义命令注入用户输入未被过滤直接拼接至系统命令执行攻击者可构造Payload执行任意系统命令。2. 关键拼接符必记; 顺序执行前后命令无论前命令是否成功| 管道符前命令输出作为后命令输入 后台执行前命令继续执行后命令 前命令成功才执行后命令|| 前命令失败才执行后命令3. 绕过技巧3种核心双写如id→iidd绕过黑名单过滤大小写混淆如whoami→WhoAmI编码绕过如whoami→URL编码%77%68%6f%61%6d%694. 核心防护思路白名单过滤输入、禁用system()等危险函数、服务权限最小化。三、实操流程DVWA环境实操前提1. 环境准备确保本地或服务器已搭建DVWA靶场版本无特殊要求默认配置即可靶场可正常访问已完成数据库连接配置2. 权限准备DVWA登录账号密码默认admin/password确保可正常切换安全级别。步骤1Low级别实操无过滤登录DVWA后点击左侧导航栏“Command Injection”模块进入实操页面在页面顶部安全级别下拉框中选择“Low”点击“Submit”确认切换在输入框中依次提交以下3条Payload每次提交后等待页面加载完成详细记录执行结果如返回的用户信息、目录内容等 127.0.0.1whoami 查看当前系统登录用户核心验证逻辑与符“”的用法后台执行前命令继续执行后命令127.0.0.1 | ifconfig 查看服务器网卡信息核心验证管道符“|”的用法前命令输出作为后命令输入127.0.0.1 dir 查看当前目录下所有文件核心验证逻辑与符“”的用法前命令执行成功才执行后命令额外测试尝试提交“127.0.0.1 || dir”观察执行结果前命令127.0.0.1执行成功后命令ls不执行辅助理解逻辑或符“||”的用法步骤2Medium级别实操基础过滤在实操页面顶部安全级别下拉框中切换为“Medium”点击“Submit”确认先尝试提交Low级别中使用的3条Payload127.0.0.1;whoami、127.0.0.1 ls、127.0.0.1 | ifconfig观察页面反馈记录过滤现象——可发现“;”“”被系统过滤提交后无有效执行结果仅返回正常的ping命令结果基于过滤现象使用未被过滤的拼接符|、提交以下Payload每次提交后记录执行结果重点观察与Low级别的差异 127.0.0.1 | whoami 利用管道符绕过过滤获取当前用户信息可以发现“”已经被注释了“”windows语法限制无法作为命令分隔符所以将127.0.0.1whoami进行ping命令全部执行了127.0.0.1 whoami/all利用后台执行符“”绕过过滤获取当前用户id信息127.0.0.1 | dir 查看当前目录文件的详细信息进一步验证管道符的可用性127.0.0.1systeminfo(可以看出来“”被过滤了)0.0.0.0 || dir (查看当前目录文件的详细信息进一步验证逻辑或符的可用性关键结论Medium级别仅过滤了“;”“”两种拼接符未过滤“|”“”“||”可通过未被过滤的拼接符构造Payload实现命令注入。步骤3High级别实操进阶绕过将安全级别切换为“High”点击“Submit”确认先尝试提交Low、Medium级别中有效的Payload如127.0.0.1; whoami、127.0.0.1 | whoami观察页面反馈发现多数拼接符、常用命令whoami均被黑名单过滤提交后无有效执行结果 1127.0.0.1; whoami2127.0.0.1whoami(3) 127.0.0.1whoami4127.0.0.1|whoami(5)0.0.0.0 ||whoami基于黑名单过滤规则依次测试3种核心绕过方式每次测试后记录Payload是否有效、执行结果若失败则分析失败原因如编码错误、双写格式错误 双写绕过127.0.0.1| ddirir 针对“dir”命令被过滤通过双写字符绕过黑名单执行后可获取用户目录信息若失败检查双写格式是否正确避免多写或少写字符大小写混淆127.0.0.1 | WhoAmI 针对“whoami”命令被过滤通过大小写交替绕过执行后可获取当前用户信息注意区分大小写避免全大写或全小写仍被过滤编码绕过127.0.0.1 | %77%68%6f%61%6d%69 将“whoami”进行URL编码绕过黑名单过滤编码前需确认靶场支持URL编码解析若执行失败检查编码是否正确可重新生成URL编码截图3种绕过方式的成功执行页面同时截图失败尝试的页面记录失败原因如“编码错误导致Payload无法解析”“双写格式错误被过滤”补充测试尝试组合绕过方式如大小写双写127.0.0.1 | WhOoAaMmIi验证绕过效果记录有效组合Payload丰富实操成果关键结论High级别并未采用黑名单过滤所以通过双写、大小写混淆、编码等方式绕过会显示空白或者错误参数只覆盖了常用拼接符和命令只能使用管道符进行绕过。步骤4复盘与成果整理对比3个安全级别的防护差异详细记录核心区别形成清晰的对比逻辑 Low级别无任何过滤可直接通过任意拼接符构造Payload执行命令防护等级最低Medium级别基础过滤仅过滤“;”“”两种拼接符未过滤“|”“”防护存在明显漏洞High级别进阶过滤过滤常用拼接符和命令只能通过管道符防护等级高于前两个级别但仍可被绕过。实操注意事项1. 实操过程中每一步都需截图留存确保汇报时有完整的成果支撑截图需清晰、完整包含关键信息安全级别、Payload、执行结果2. 若Payload执行失败先检查Payload格式是否正确、拼接符使用是否规范再分析是否被过滤避免因操作失误导致实操失败3. 实操仅在自己搭建的DVWA靶场进行严禁在未授权的服务器或网站上测试避免违反相关规定。四、DVWA Command Injection 源码深度解析全级别一Low 级别源码分析1. 核心代码2. 内置函数功能介绍简单易懂isset()判断变量是否已设置且非null此处用于判断用户是否点击了“Submit”提交按钮确认有提交请求后再执行后续逻辑。$_REQUEST[ ]PHP超全局变量可获取用户通过POST、GET等方式提交的参数此处用于获取输入框中用户输入的IP地址name为ip的输入框。stristr()字符串查找函数忽略大小写用于查找第一个参数此处是服务器系统信息中是否包含第二个参数此处是“Windows NT”判断服务器操作系统类型。php_uname(s)获取服务器操作系统名称参数s表示仅返回系统名称如Windows NT、Linux。shell_exec()执行系统命令并返回命令执行的输出结果此处用于执行ping命令将用户输入的IP拼接后执行。echo输出函数用于将ping命令的执行结果$cmd以预格式化pre标签的形式展示在页面上方便用户查看。3. 漏洞深度剖析漏洞点代码直接通过$_REQUEST[ ip ]获取用户输入未做任何过滤、校验直接将用户输入拼接至ping命令中属于完全无防护的状态与实操中Low级别“无任何过滤、可直接注入”的现象完全对应。攻击原理结合实操中使用的Payload如127.0.0.1; whoami拼接后最终命令为“ping 127.0.0.1; whoami”Windows系统或“ping -c 4 127.0.0.1; whoami”Linux系统服务器执行完ping命令后会强制执行后续的whoami命令从而实现命令注入泄露当前服务器登录用户信息。本质原因开发者未意识到用户输入的不可信性缺乏输入验证和命令拼接的风险控制直接将用户输入作为命令一部分执行是最典型、最基础的命令注入漏洞场景。4. 修复建议对用户输入的IP地址进行严格校验如验证是否为合法IP格式拆分IP为4段并确认每段为数字或使用安全函数如escapeshellarg()对输入进行转义禁止直接拼接用户输入至系统命令从源头避免恶意命令注入。二Medium 级别源码分析1. 核心代码2. 内置函数功能介绍简单易懂isset()、$_REQUEST[]、stristr()、php_uname(s)、shell_exec()、echo功能与Low级别一致此处不再重复。array()PHP数组函数此处用于定义黑名单关联数组键名为需要过滤的字符、;键值为空字符串用于后续替换过滤。array_keys()获取数组中所有的键名此处用于获取黑名单数组中的“”和“;”作为后续替换的目标字符。str_replace()字符串替换函数语法为str_replace(要替换的字符集合, 替换后的字符, 被替换的字符串)此处用于将用户输入$target中的“”和“;”替换为空字符串实现简单的黑名单过滤。3. 漏洞深度剖析防护机制相比Low级别增加了简单的黑名单过滤逻辑通过定义包含“”和“;”的黑名单数组使用str_replace函数删除用户输入中的这两种常见命令拼接符试图阻止命令注入与实操中“提交;和拼接的Payload无效果”的现象对应。绕过原理该级别采用黑名单过滤机制存在明显遗漏——未过滤“|”“”等其他常用命令拼接符攻击者可使用未被过滤的管道符“|”或后台执行符“”构造Payload如127.0.0.1 | whoami、127.0.0.1 id拼接后可正常执行恶意命令实现绕过与实操中Medium级别的绕过方式完全匹配。本质原因黑名单过滤方式本身存在缺陷无法覆盖所有可能的恶意拼接符和绕过方式仅能防御最简单的攻击防护不够全面无法从根本上杜绝命令注入。4. 修复建议放弃黑名单过滤方式采用白名单校验如严格验证用户输入是否为合法IP格式同时使用安全函数如escapeshellarg()对用户输入进行转义避免用户输入被当作命令的一部分执行彻底杜绝命令注入漏洞。三High 级别源码分析1. 核心代码2. 内置函数功能介绍简单易懂isset()、$_REQUEST[]、stristr()、php_uname(s)、shell_exec()、echo、array()、array_keys()、str_replace()功能与Low、Medium级别一致此处不再重复。trim()字符串处理函数用于去除用户输入字符串首尾的空白字符空格、换行、制表符等避免因首尾空白字符导致过滤失效但无法防御核心的命令注入漏洞。3. 漏洞深度剖析防护机制相比Medium级别黑名单大幅扩充覆盖了“”“;”“|”“-”“$”等几乎所有常见的命令拼接符和特殊字符同时增加trim()函数处理用户输入试图全面阻止命令注入与实操中“常规Payload均被过滤”的现象对应。绕过原理该级别仍采用黑名单过滤思路存在固有缺陷——无法覆盖所有绕过方式攻击者可通过双写、大小写混淆、编码等技巧绕过黑名单过滤如双写id→iidd、大小写混淆whoami→WhoAmI、URL编码whoami→%77%68%6f%61%6d%69构造有效的Payload执行恶意命令与实操中High级别的绕过技巧完全匹配。本质原因黑名单过滤思路本身存在局限性无论如何扩充黑名单都无法穷尽所有可能的恶意字符和绕过方式仅能提升攻击难度无法彻底防御命令注入。4. 修复建议摒弃黑名单过滤思路采用白名单校验机制如验证用户输入是否为合法IP地址拆分IP为4段并确认每段为数字同时使用escapeshellarg()等安全函数对用户输入进行转义将用户输入作为命令参数而非命令片段处理从源头杜绝命令注入。四Impossible 级别源码分析终极安全1. 核心代码2. 内置函数功能介绍简单易懂isset()、$_REQUEST[]、stristr()、php_uname(s)、shell_exec()、echo功能与前三个级别一致此处不再重复。checkToken()DVWA内置的CSRF防御函数用于验证用户提交的tokenuser_token与服务器会话中的tokensession_token是否一致确保请求来自合法的DVWA页面防止跨站请求伪造攻击。stripslashes()字符串处理函数用于移除用户输入字符串中的反斜杠“\”防止攻击者通过转义字符绕过过滤确保输入内容的纯净性。explode(., $target)字符串拆分函数用于按“.”将用户输入的IP地址拆分为一个数组$octet便于后续校验IP格式。is_numeric()判断变量是否为数字或数字字符串此处用于校验拆分后的IP数组$octet的每一段是否为数字确保IP格式合法。sizeof()用于计算数组的长度此处用于校验拆分后的IP数组是否恰好为4段符合IP地址的基本格式4段数字以“.”分隔。generateSessionToken()DVWA内置函数用于生成新的CSRF token并存储在会话中确保每次请求的token唯一提升CSRF防护的安全性。$_SESSION[]PHP超全局变量用于存储用户会话信息此处用于获取服务器会话中存储的CSRF tokensession_token与用户提交的token进行比对。3. 漏洞深度剖析无漏洞终极安全安全机制该级别采用三层防御体系彻底杜绝命令注入漏洞与实操中“Impossible级别无法注入”的现象完全对应三层防御逻辑如下1. 第一层CSRF防护checkToken()函数验证请求的合法性防止恶意网站伪造请求提交恶意Payload从请求源头进行防护。2. 第二层输入格式严格校验通过explode()、is_numeric()、sizeof()函数强制要求用户输入的IP地址必须是“4段数字.”的格式每一段均为数字、恰好4段不符合格式则直接拒绝执行命令从输入源头杜绝恶意字符。3. 第三层输入纯净处理stripslashes()函数移除输入中的反斜杠防止攻击者通过转义字符绕过校验进一步确保输入内容的安全性。本质该级别摒弃了黑名单过滤的缺陷采用“白名单校验请求防护输入净化”的组合方式从根本上实现了“数据与命令分离”用户输入仅能是合法IP地址无法构造恶意Payload彻底杜绝命令注入。4. 修复建议可直接用于实际开发参考Impossible级别防护逻辑实现三层防护1. 增加CSRF token校验防止跨站请求伪造2. 对用户输入进行严格的白名单格式校验如IP地址、合法参数等不符合格式直接拒绝3. 使用stripslashes()等函数对输入进行净化处理避免转义注入4. 坚持“最小权限原则”限制执行系统命令的函数权限进一步提升安全性。五、源码分析总结衔接实操与防护结合实操中三个级别的测试结果和源码解析可明确命令注入的核心漏洞根源是“用户输入未被有效校验直接拼接至系统命令”而不同级别防护的差异本质是对用户输入的校验方式和函数使用的不同。所有内置函数的核心作用的是“控制用户输入”和“规范命令执行”其中escapeshellarg()、is_numeric()是防御命令注入的关键函数checkToken()用于防御CSRF攻击共同构成安全的防护体系也是实操中防御建议的核心依据。