强网杯-crypto modestudy
1、modestudy
這道題nc過后發現該題分為六個部分
(1)challenge1
[$] challenge 1
[+] cookie:session=6b1f33a78c5b9c17;admin=0;checksum=552ebbeb9276a8cd9f741b7d29f8c9e1eb455757207ac420659e7eab56ddee25
[+] checksum=aes128cbc.encrypt(session=6b1f33a78c5b9c17;admin=0)
[+] only admin can see flag
[-] cookie:(待輸入)
challenge2
[$] challenge 2
[+] sha256(iv)=11f595abc9d7b986d24fce986d1f9ddfb0d83f2f978db20b862ea730e570bff0
[+] 1. server’s job: print aes_cbc_dec(key,iv,your_input_c).encode(‘hex’)
[+] 2. your job: guess iv
[-] your choice:(待輸入)
看了大佬的wp之后看出來了這是CBC的選擇密文攻擊(菜雞表示對CBC似乎沒多大了解,上次魔改aes的時候只接觸過一次CBC)
還是根據CBC加密的特點,由于輸入的密文作為下一輪加密的密鑰,所以我們假設第一輪輸入的密文是C0,第二輪是C1,第一輪輸出的明文是M0,第二輪是M1,那么dec(c0) = m0 ^ iv,dec(c1) = m1 ^ c0,如果我們令兩次輸入的密文相同,那么iv = m0 ^ m1 ^ c0,所以只要輸入兩段相同的16字符內容,在分別對這兩段內容進行加密,將三個部分進行異或,就可以得到iv
解得iv=ee42fad0d874a822f3d462302c4ef1e6
(3)challenge3
[$] challenge 3
[+] cookie=session:0884ce7c;timedl=1;admin=0;guess_cookie_ma=1;guess_mp_ab=1;guess_cookie_mb=0;hell_pad=233
[+] 128bit_ecb_encrypt(cookie):0632b3e7adb2f6d5ae4a92f553f2f4a4c9f95b099cfd8e3408137d134eb51d147045f278246a831fabdbdccde099b4b694b07e699ffae6a82c6cfbc4454816b1c78e5d1be8b67e235fbbfd2a75e73f32bac806808bc2e102db8f2c159b250415
[+] only admin can see the flag
[-] input your encrypted cookie(encode hex):(待輸入)
該題使用了ECB加密模式,與1相同,依然是當admin=1的時候可以通過,那么根據分組加密的長度進行分組:
第 1 分組 session:f8e9b447
第 2 分組 ;timedl=1;admin=
第 3 分組 0;guess_cookie_m
第 4 分組 a=1;guess_mp_ab=
第 5 分組 1;guess_cookie_m
第 6 分組 b=0;hell_pad=233
看大佬wp發現了神奇的事情,第三組和第五組只相差一個字符,將第三組的密文和第五組的密文交換,就可以使得admin=1,輸入新的密文,即可進入下一環節
強力補課了一波ECB,主要是對ECB模式的攻擊方法,ECB的顯著弱點是不破解密文也可以操縱明文,詳細可見https://blog.csdn.net/chengqiuming/article/details/82262417,該題的破解方法就是利用ECB加密的弱點,在不破解密文的情況下對明文直接進行操作,最終可以得到本輪的輸入值6e0b333f565abac1949c208b4b98313399f460d5aeabb631e24895fa017a9012656db
f3ce6b036f949a3b2bf9feb6acca32a7460f01c4fad467ee054979c8b05656dbf3ce6
b036f949a3b2bf9feb6acce7b2e3a521ca2d3c5b21e5ef7c2d51c3
(4)challenge4
[$] challenge 4
[+] sha256(secret)=d014cbddd2cbb0fa2404c519c166bc85c03ee3445d643f451a5f5d6244e7e34d
[+] assert len(secret)==16
[+] 1. server’s job: print aes_ecb(key,input+secret+’\x00’*((16-(len(input+secret) % 16)) % 16))
[+] 2. your job: guess secret
[-] your choice:(待輸入)
根據觀察可知又是ECB的加密模式,根據wp的提示按位爆破(主要是由于ECB加密的每個模塊之間并不相關),最后一位可以任意嘗試,然后與sha值進行比較用來確定secret的最后一位,然后再進行第二位的爆破,重復上述步驟,直到所有都被爆破出來。
我只嘗試爆破了前6位,真的太考驗耐心了,也可能是我沒找到其中有什么規律(但我個人認為哈希函數應該也沒有什么規律,畢竟他是不可逆的),所以就失去耐心直接參考wp給出的secret值:
3567935aebe5e517caf233dbc7cb9959
代碼如下:
代碼主要還是在字母和數字里一位一位檢索進行了ECB
加密后再利用hash函數加密后與題目中所給逐個對比,親測這位巨佬的代碼是可以用的,里面有一些函數我之前見過但是是頭一次在編譯器中投入使用以及感覺這應該是一個很有用的腳本
(5)challenge5
[$] challenge 5
[+] sha256(secret)=4c766c8749526dd1a14fdf37619d2fbebbbc2478e25e27e63e591ae0aafb305d
[+] assert len(secret)==16
[+] myblockencrypt_ecb(secret).encode(“hex”)=4c21cc2bc7941b224ed45bd02ee11b60
[+] In this challenge, you need to try something.
[+] 1. server’s job: print myblockencrypt_ecb(your_input)
[+] 2. your job: guess secret
[-] your choice:(待輸入)
感覺自己到5這就徹底傻了,因為其實題目的條件越來越少,以及無法得知myblockencrypt的函數是干啥的
按照wp的指引用函數隨意加密了一串,發現這種加密方式相互之間確實是互不影響并且緊跟wp的指引認為這是個固定的映射(其實換我自己想我可能也得想好久才敢這么判斷,因為估計要進行很多次的嘗試)
然后就和解決4的方式相同,利用腳本進行爆破,代碼如下:
Python把六萬多個結果跑完需要的時間太長,于是按照wp說的進行了人工比對,雖然工作量也比較大,但是基本還是能出來結果,輸入值如下:
157112520917d275b9d9dc9539c340bb
(6)challenge6
[$] challenge 6
[+] padding(m):m+chr(16-(len(m)%16))*(16-(len(m)%16))
[+] unpadding(m):m[:-ord(m[-1])]
[+] len(secret):16
[+] iv+aes128_cbc(key,iv,padding(secret)):31313131313131313131313131313131891f3925b171f363bfc1ab0f4c03c9172cdfbd56dbd225d2accaf2b6fcbd0780
[+] 1. server’s job: decrypt and unpadding
[+] 2. your job: guess secret
[-] your choice:(待輸入)
CBC填充模式(wp告訴我的),當輸入實際密文并且iv隨便給的時候,會得到正確的結果根據代碼可知填充方式為標準填充,也可判斷出分組的第二組是對填充的加密結果。根據 cbc 模式的特點,第一組加密的輸入為明文與 IV 的模加和,若修改 IV 的值使得解密后第一分組的最后一個值為 01,則系統會判斷它為填充值大小,返回解填充正確的信息,根據修改值與原 IV 的差值可以求出第一分組實際輸入的最后 1 字節,依次類推,同理求出第一分組所有輸入
可以得到輸入值:
fb1a5485aaf6af850a369b76c888f35d2ac042a05bd0c7619e458935cec795b0
完成六個部分,得到
flag{ 6f0fc66aa7cc0d373f22bb86d37a5e2a}
其中第六個部分還希望有識之士多幫我補課,網上關于CBC填充模式的介紹甚少,只能按照wp將代跑出來,但是缺少真正的理解與認知
這道題屬于AES體系加密,基本使用CBC和ECB加密方式來進行加密,其中第四五六的部分基本靠爆破來實現,屬于大量交互
通過這道題,我對CBC和ECB加密模式有了一些了解,其中他們還有各自的幾種模式我目前還不是非常清楚,特別是最后的標準填充模式我還屬于云里霧里,給代碼能跑,不給就玩完的階段,以及我認為以后這種模式出現在賽題中,我估計自己還是不能準確的把握到,以后多多努力~
總結
以上是生活随笔為你收集整理的强网杯-crypto modestudy的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Requests下载百度一页图片,以下
- 下一篇: c代码触发sysrq-trigger