苦逼的RCTF,只進行了兩天,剛好第二天是5.20,出去xxx了,沒法打比賽,難受。比賽結束了,還不准繼續提交flag進行正確校驗了,更難受。
下面是本次ctf解題思路流程
后面我解出的題會陸續更新上來
MISC
sign
下載附件,發現打不開,以兼容性、管理員權限等還是打不開
丟進winhex初步審視一下16進制沒啥發現
用binwalk掃描一下,發現一張png
提取,但是提取不出來,轉手動提取,得到圖片
本子,鉛筆,紅酒杯。
通過紅酒杯聯想到linux wine,用wine打開,得到flag
git
打開下載的附件,里面有個helloword.txt。打開里面沒啥發現。。
進.git里面去看看,在COMMIT_EDITMSG處看到
發現flag被刪掉了,題目也說file lost了
在ORIG_HEAD
嘗試pull,失敗,再嘗試一下revert呢,得到flag XD
Number Game
直接nc過去看題
sha256加密,四位數還好可以碰撞,腳本跑起來:
sha256enc = "087e72033b1eacecd78845563696b9a449015aeb29a12b0f49c969cafababbb2" key = "DPgOJtFiF9euj7HX"
for i in strlist: code = i[0]+i[1]+i[2]+i[3] encinfo = hashlib.sha256(code+key).hexdigest() if encinfo == sha256enc: print code break
可以得到code,輸入
來到正題
隨意嘗試了輸入,猜測Nope的規律,大概就是Nope x,y x表示有x個數字猜對並且位置對了,y表示有y個數字猜對了,但是位置錯的
猜測機會只有6次!且每次輸入值如果大於10秒左右就提示timeout了,所以人為分析是不可能了(除非你是腦王,能在10秒內見招拆招看到回饋想出下一步要猜的數的話當我在放屁)
其實這個游戲很早就有了(文曲星猜數字了解一下)
網上沒有關於python的解題程式這是比較坑的,由於本人之前沒有玩過猜數字游戲,迫於無奈只有先去查閱資料了解算法原理,最后自己苦逼碼出了python解法
經過8回合(其實實際應該大戰了一百回合Orz)的大戰,搞到了flag。。。。。
下面是python猜數字解法(本算法是原創算法,不是最優算法,一次挑戰可能不成功,多執行幾次就可以了,大神勿噴。。。。)
#!/usr/bin/env python # coding=utf-8 # author:401219180 import time import socket import string import re import itertools import hashlib def returnmsg(data): """發送與接收,代替nc""" s.send(data) time.sleep(1.5) msg = s.recv(2048) return msg def createTree(inputstr, dictree): """對比集合列表得出a,b生成字典""" inputlist = inputstr.split(" ") newdictree = {} for x in dictree: a, b = 0, 0 for i in range(4): if inputlist[i] == x[i]: a += 1 continue if inputlist[i] in x: b += 1 continue newdictree[x] = a, b return newdictree def createList(dic, result): """集合字典里面生成有效集合列表""" numlist = [] for k, v in dic.iteritems(): if v == result: numlist.append(k) return numlist def listvalueTostr(listindex): """生成要猜的值""" inputstr = listindex[0] + " " + listindex[1] + " " + listindex[2] + " " + listindex[3] return inputstr # 建立nc連接 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("149.28.139.172", 10002)) time.sleep(1) firstinfo = s.recv(1024) r = r'\+(.*?)\)' key = re.findall(r, firstinfo)[0] sha256enc = firstinfo[-78:-14] print key print sha256enc # sha256碰撞,得出xxxx的值 code = '' strlist = itertools.product(string.letters + string.digits, repeat=4) for i in strlist: code = i[0] + i[1] + i[2] + i[3] encinfo = hashlib.sha256(code + key).hexdigest() if encinfo == sha256enc: print code break print returnmsg(code) r1 = r'Nope. (.*?)\n' # 正則用於匹配Nope的值 def startgame(): # 初始化列表 while 1: # 打通關了才知道連續大戰8回合,所以干脆寫個無限循環 numlist = [] for i in itertools.permutations(string.digits, 4): numlist.append(i) input1 = "2 3 4 5" # 根據本人多次測試,首輪猜2 3 4 5比猜1 2 3 4贏得幾率大些Orz.... while 1: dictree1 = createTree(input1, numlist) print "guess: " + input1 recvdata = returnmsg(input1) print recvdata if "You got it!" in recvdata: break ab = re.findall(r1, recvdata)[0] numlist = createList(dictree1, eval(ab)) try: input1 = listvalueTostr(numlist[0]) except IndexError, msg: print msg if "Flag" in recvdata: # 如果返回的信息里面有Flag,終止while循環 break startgame()
520 gift
下載附件解壓得到一堆口紅圖片Orz
看hint,首先要找齊所有口紅色號。。。。。。。這道題主要是考驗毅力和女朋友力。。。
在大佬的幫助下,在微博找到了美妝博主
經過一個一個的比對。。。。。。。。
1、Russian red
2、Chili
3、Tenor Voice
4、Fixed on drama
5、red coquette
6、barbecue
7、dangerous
8、lady danger
9、my inner femme
10、lady bug
11、opera
12、mac red
13、brave red
14、Ruby Woo
15、sparks of romance
16、lingering kiss
17、just a bite
首字母即是flag..
未待完續
To be continued...
后面會陸續更新