介绍

这是面对初学者很友好的一个ctf,持续两周时间,结束后会有官方writeup。

Web Exploitation

0x01 findme

使用test/test! 登录
302跳转的两个数据包id参数值为flag的base64编码。


picoCTF{proxies_all_the_way_25bbae9a}

0x02 MatchTheRegex

根据提示输入满足正则的文本。

picoCTF{succ3ssfully_matchtheregex_8ad436ed}

0x03 SOAP

简单的xml注入

picoCTF{XML_3xtern@l_3nt1t1ty_4dbeb2ed}

0x04 More SQLi

根据显示的sql语句构造注入登录。

picoCTF{G3tting_5QL_1nJ3c7I0N_l1k3_y0u_sh0ulD_c8ee9477}

0x05 Java Code Analysis!?!

查看java代码,jwt的SECRET_KEYsecretGenerator生成

查看secretGenerator代码

默认使用server_secret.txt文件作为密钥,当文件不存在时,生成密钥为1234
使用jwt.io查看jwt,密码的确为1234.
修改role为Admin
查看Admin用户的userId

修改userId为2

查看到flag

picoCTF{w34k_jwt_n0t_g00d_7745dc02}

Cryptography

0x01 HideToSee

使用steghide提取出txt

使用atbash解密

picoCTF{atbash_crack_23e713cd}

0x02 ReadMyCert

使用openssl
openssl req -text -in C:\Users\24217\Downloads\readmycert.csr -noout

picoCTF{read_mycert_96d48a46}

0x03 rotation

凯撒密码很简单。

picoCTF{r0tat1on_d3crypt3d_0105782a}

0x04

Reverse Engineering

0x01 Ready Gladiator 0

有一个在线模拟游戏的网站
https://crypto.stanford.edu/~blynn/play/redcode.html

可以看到当不输入任何指令时,就会输。 🤣

picoCTF{h3r0_t0_z3r0_4m1r1gh7_e476d4cf}

0x02 Reverse

直接使用IDA查看

picoCTF{3lf_r3v3r5ing_succe55ful_c83965de}

0x03 Safe Opener 2

使用jd-gui打开

picoCTF{SAf3_0p3n3rr_y0u_solv3d_it_7db9fb8c}

0x04 timer

使用jadx打开即可

picoCTF{t1m3r_r3v3rs3d_succ355fully_17496}

0x05 Virtual Machine 0

dae后缀文件为3D模型的文件,使用在线Autodesk打开
https://viewer.autodesk.com/

可以由两个齿轮的比例,计算出结果。

from Crypto.Util.number import long_to_bytes

a = 39722847074734820757600524178581224432297292490103995897672826024691504153
a *= 5

print(long_to_bytes(a))

picoCTF{g34r5_0f_m0r3_05e5104d}

0x06 No way out

unity游戏逆向,不知道怎么弄,用dotpeek看了反编译的代码,没有发现有出现flag的地方。
参考视频 https://www.youtube.com/watch?v=yAl_6qg6ZnA
使用cheat engine搜索值,通过改变高度,定位到高度值后,修改,即可通过空气墙。

picoCTF{WELCOME_TO_UNITY!!}

0x07 Ready Gladiator 1

随便找了一个策略dwarf

ADD #4, 3
MOV 2, @2
JMP -2
DAT #0, #0

picoCTF{1mp_1n_7h3_cr055h41r5_ec57a42e}

0x07 Ready Gladiator 2

找到策略如下:https://corewar.co.uk/heremscimitar.htm

;redcode-94
;name Herem/Scimitar
;author A.Ivner,P.Kline
;strategy bomber
;macro
step     equ   27
count    equ   1470

         jmp   clr
start    mov   sb,@st
st       mov   {100,cnt-(2count*step)-1
         add   bmb,st
cnt      djn   start,#count-1
sb       spl   #step,0
clr      mov   bmb,>-13
         djn.f clr,{-14
  for 22
         dat   0,0
  rof
         dat   <4,step+step
bmb      dat   <4,step+step
            start
end

picoCTF{d3m0n_3xpung3r_fc41524e}

Forensics

0x01 hideme

用010editor进行查看
图片IEND结尾还有数据,并且开头为50 4B 03 04 ,很明显是zip文件。

拆分出来。
解压即可得到flag。

picoCTF{Hiddinng_An_imag3_within_@n_ima9e_5678a337}

0x02 PcapPoisoning

pcap文件,直接使用wireshark打开
搜索picoCTF相关字符

picoCTF{P64P_4N4L7S1S_SU55355FUL_ed4df487}

0x03 who is it

查看邮件文件,发现发送邮件SMTP邮件服务器ip地址:173.249.33.206

使用whois命令查询

picoCTF{WilhelmZwalina}

0x04 FindAndOpen

查看到第48个数据包有base64格式数据。

用密码解密压缩文件,得到完整flag

picoCTF{R34DING_LOKd_fil56_succ3ss_c2043b9b}

0x05 MSB

StegSolve打开图片,可以看到在red green blue pannel 7图片有明显差别。

提取RGB pannel 7.

picoCTF{15_y0ur_que57_qu1x071c_0r_h3r01c_60dd217e}

0x06 Invisible WORDs

0x07 UnforgottenBits

General Skills

0x01 chrono

ssh连接服务器,查看计划任务文件/etc/crontab

picoCTF{Sch3DUL7NG_T45K3_L1NUX_9d5cb744}

0x02 money-ware

google一下,就能搜到。

picoCTF{Petya}

0x03 Permissions

使用sudo -l查看到可以使用vi命令提权

使用命令sudo vi -c '!sh'

picoCTF{uS1ng_v1m_3dit0r_89e9cf1a}

0x04 repetitions

做6次base64即可

picoCTF{base64_n3st3d_dic0d!n8_d0wnl04d3d_de523f49}

0x05 Rules 2023

F12控制台中使用ctrl+shirft+F进行全局搜索。

picoCTF{h34rd_und3r5700d_4ck_cba1c711}

0x06 useless

无语,flag在man page里
输入man useless

picoCTF{us3l3ss_ch4ll3ng3_3xpl0it3d_4373}

0x07 Special

这题所有输入命令都会做拼写检查,并且首字母大写,使用|*进行绕过。

0x08 Specialer

这题只允许使用bash内置命令,可以使用help查看。
使用type命令可以查看到目录。
使用echo "$(<FILENAME)"的方式查看文件内容。

picoCTF{y0u_d0n7_4ppr3c1473_wh47_w3r3_d01ng_h3r3_d5ef8b71}

Binary Exploitation

0x01 babygame01

使用IDA进行分析。
程序大致逻辑是wasd来控制@走迷宫。
但是想要获取flag,需要v6不为0,但是程序初始化后没有对v6有任何操作。

分析move_player函数

这里将原来所在点赋值为.,移动后点赋值为player_tile,默认及@
这里是存在数组指针溢出的。
根据v7[2000]地址为esp+Ehv6地址为esp+Ah,计算出偏移量为-4.
使用wwwwaaaaaaaa将点移动到[0,-4]的位置。

然后输入la
可以看到v6被赋值为了a

我们可以用这种方法来改变v6为任意值。

这里不输入la也行,因为程序在输入wwwwaaaaaaaa时就将v6赋值为@了。

然后solve_round函数就不用仔细看了,这个函数可以让我们自动完成迷宫。
输入p得到flag

picoCTF{gamer_m0d3_enabled_2bcdc8e6}

0x02 two-sum

分析代码,明显是整数溢出。
int型,默认为有符号整数,长度为4字节,即-2,147,483,648 到 2,147,483,647

picoCTF{Tw0_Sum_Integer_Bu773R_0v3rfl0w_ccd078bd}

0x04