新年勸退賽,菜的真實,web一題不會,暴風流淚
MISC
玩遊戲
下載附件後,得到一個exe和題目說明,運行exe後,發現題目分爲三個關卡
第一關
看見是解盲文,有在線解盲文的網站,解密後爲下面圖中所示
看見這一串,數了位數後懷疑是一個字符串的md5值,百度之後發現是 hello 的MD5值,第一關通過
第二關
要提交兩個MD5值相同的文件,使用工具fastcoll (下載鏈接: http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip)生成兩個md5值相同的exe,第二關通過
第三關
通過前面兩關後,會收到郵件內容,通過題目描述中的提示,百度柵格密碼https://book.2cto.com/201407/45251.html(詳細解釋)
然後知道了可以通過http://www.spammimic.com/decode.cgi解密柵格密碼,將郵件內容解密後得到flag
crypt
密碼本
題目描述:這個密碼本本該只使用一次的,但是卻使用了多次,導致密文易被破解
經過一番嘗試發現,祕鑰的首字母很可能是y,剩下的就靠你了
題目中給出了三組加密後的數據
cip1: rlojsfklecby
cip2: ulakqfgfsjlu
cip3: dpaxwxtjgtay
根據題目描述,這個本該使用一次一密加密,但是有密鑰重複使用了,所以猜測這三組密文的密鑰可能是同一個
題目描述給出了密鑰的第一位爲 y
使用y對三組密文進行維吉尼亞解密,發現第三組的明文開頭第一個字母爲 f
構造能夠接觸flag的密鑰,發現前四位是year,經過一波靈性猜測,發現密鑰爲yearofthepig,就是豬年的意思(不知道正常思路是什麼樣的)
然後使用這個密鑰,解密了三組密文,第一組看不出來是什麼,可能不是同一個密鑰,但是第二組解密出了明文
解密第三組密文得到flag
一開始以爲密鑰是flag所以一直提交不對,後面發現,第三組的明文是flag flagisaccess的MD5值
hahaha
下載附件以後解壓,發現壓縮包加密了
看到壓縮包裏面有四個txt 和一個flag.pdf,發現txt的大小都是6,猜測是CRC爆破,CRC32位爆破是在壓縮包進行了加密後,壓縮密碼比較長爆破需要很長時間,相當於爆不出來,但是加密的內容大小很小,我們就可以直接爆破壓縮加密的內容
這個題的思路就是,四個TXT裏面的內容合併就是壓縮包的解壓密碼,解壓後即可查看flag.pdf
使用CRC32爆破腳本(見附件)
使用命令 python crc32.py reverse CRC32值
這樣爆破四個TXT的CRC之後,經過了一頓絕望靈性的排列組合,最終
得到壓縮包密碼爲 tanny_is_very_beautifu1_
解壓打開pdf
可以看出要考sha1碰撞,而且圖中提示給出了明文的範圍【'1','2','e','s','c','h','n','E','S','C','H','N','!','@'】
寫個腳本跑一下
#coding:utf-8
import hashlib
import string
b = ['1','2','e','s','c','h','n','E','S','C','H','N','!','@']
for c in b:
for d in b:
for e in b:
for f in b:
for g in b:
for h in b:
for a in b:
k = 'flag{' + str(c) + str(d) + str(e) + str(f) + str(g) + str(h) + str(a) + '}'
#print k
l = hashlib.sha1(str(k)).hexdigest()
if 'e6079c5ce56e781a50f4bf853cdb5302e0d8f054' == l:
print k + ' ' + l + ' ' + hashlib.md5(str(c) + str(d) + str(e) + str(f) + str(g) + str(h) + str(a)).hexdigest()
exit()
print 'none'
跑出flag
隊友做的pwn
filesystem
清單型程序,函數有點多,這裏只挑有用的說。
Create
Edit
Read
Checksec
都如字面意思,最後一個一會兒說。
首先看到這個程序,看到system函數,想着是不是能用doublefree或者uaf等控制堆塊來控制system執行,但是並沒有看到free函數,所以一直在糾結。
但是看到最後有一個隱藏選項B4ckd0or,
好像發現了新大陸,但是本地調試,發現:
前兩位會當成system參數,但是後面會略掉。所以想輸入sh。
但是上面的if又限制了字符串不能爲sh,所以卡在這裏。
一直沒搞懂checksec的作用,又回去看了一下:
System函數執行的就是snprint函數的參數,關於這個函數具體的請百度。
這樣只要我們令s中也包括/bin/sh即可,但是要閉合前面的參數。
就是:“;/bin/sh #\
具體如下:
總結一下,創建一個文件,文件路徑輸入“;/bin/sh #\
然後調用checksec來調用system得到shell。
因爲在這裏我們需要控制的剛好可控,自然用不到一些什麼doublefree和uaf。
hackmoon
是一個清單型程序,看一下功能。
首先是add:
可以看到,最多創建五個moon,每個大小爲8。
並且有兩個字段(moonlist[i]和moonlist[i+1]),且將第一個字段賦值爲print_moon函數。
而且,第二個字段是存放content的地方,且size自定義。
再看del
Free後並沒有置空指針,所以考慮用UAF(Use After Free)
Print就是對應打印。
Magic函數。
思路如下:
申請moon0,申請moon1,然後free掉前兩個,再申請moon2,令moon2的content部分爲moon0,這樣moon0就可控了。
那麼這樣也要求我們,moon0和moon1的content大小不能和moon0和moon1放在一個bin中,因爲我們要控制的是moon的第一個字段,若放在一個bin中我們再申請moon2時會將content申請作爲內存空間,很明顯那不是我們希望的。
這也是我們爲什麼要先申請兩個moon,free掉後在bin中是(moon0->moon1)這樣的,所以我們申請moon2首先會將moon1的內存空間分配掉,再給moon2的content分配與moon0大小匹配的內存空間,這樣實現了moon0可寫。
詳細來說,先分配0和1的content大小爲32,這樣free掉後就不會與0和1(大小爲8)
分配到一個bin中(即避免了分配到content)。再申請一個2(實則分配到note1),令content大小爲8,預期就會分配到note0。
這樣就可以將moon0第一個字段的print_moon覆蓋爲magic函數。
exp如下: