当前位置: 首页 > news >正文

【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回车符是可以用的

\n的url编码是%0a

\r的url编码是%0d

原理是因为正则表达式没有模式符m开启多行搜索,因此不会匹配\n、\r

假设你构造的payload是

host=whois.verisign-grs.com%0a query=ls /

preg_match匹配到的内容是

whois.verisign-grs.com

而且由于代码中是或关系,只要有一个能匹配成功就可以执行shell_exec

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}"); }

那么到了后端php解析交给linux执行的命令就成了这样,因为\n(%0a) = 强制执行当前命令

这样就执行两条命令

/usr/bin/whois -h whois.verisign-grs.com ls /

http://www.jsqmd.com/news/686819/

相关文章:

  • STM32L431RCT6串口DMA收发实战:从CubeMX配置到IDLE中断处理,一个完整项目带你跑通
  • 2026年3月评价高的304法兰工厂推荐,304法兰/不锈钢美标法兰/不锈钢法兰/不锈钢锻件法兰,304法兰实地厂家推荐 - 品牌推荐师
  • 分布式锁应用场景
  • 深入浅出:用Keil C51的Memory Mode优化你的51单片机内存布局
  • 入门必刷4题:算法面试轻松拿下
  • 航旅纵横APP故障18h后,各项功能才恢复正常
  • 聊聊2026年支持定制的振动式淘金设备厂家,哪家性价比高 - mypinpai
  • STM32 C8T6实战:用SPI读写W25Q64 Flash存储芯片(附完整代码与调试心得)
  • 京东抢购助手终极指南:一键实现自动化秒杀的高效方案
  • VideoDownloadHelper:3分钟掌握网页视频下载的终极解决方案
  • JVM学习第三天:JVM基础核心原理 + 面试高频题全解(精简版)
  • 利用ELIC的‘能量集中’特性,5分钟为你的图库系统实现极速缩略图预览
  • 机器学习实战:5大免费数据集入门指南
  • 第八届传智杯复赛第二场 题补bxg25-27 或许要期待明天
  • Kylin-Server-V11、openEuler-22.03和openEuler-24.03的MySQL 8.4.9版本正式发布
  • 室内空气质量监测装置厂家选购指南:避坑与筛选全攻略 - 速递信息
  • 别再只会点灯了!用STM32串口玩点高级的:OLED实时显示+双向通信实战
  • 超越中断:在国产ZYNQ的OCM里划块‘共享内存’,实现更高效的多核数据交换
  • 给DELL R730xd加装非认证PCIE固态后,风扇狂转?5分钟用IPMI命令搞定
  • 备案后别忘了这件事:手把手教你为阿里云已备案域名配置HTTPS(SSL证书)
  • AI Skills插件开发避坑指南:从环境搭建到上线
  • SchoolCMS:重构中小学校园数字化管理的开源技术架构
  • mysql添加一个用户
  • 从NRF24L01‘平替’到原生ESB:一个老项目无线模块升级的成本与性能实测
  • 结构体指针与动态数组实战指南
  • 2026年甘肃新疆等地带专用锁具的密封粮库门窗厂家推荐,靠谱品牌盘点 - mypinpai
  • 告别手动下载:用Homebrew管理你的Mac版ADB和Android平台工具链
  • 别再傻傻分不清SNR和EbN0了!通信仿真里的横坐标到底该用哪个?(附MATLAB代码避坑)
  • AI越强越值钱的3种反直觉能力,90%的工程师正在丢掉
  • LFM2-VL-1.6B与Proteus联调:嵌入式AI系统仿真案例