1. 程式人生 > >實驗吧--天下武功為快不破

實驗吧--天下武功為快不破

實驗吧–天下武功為快不破

知識點:

  • 在python中,對於base64加密解密方法的流程和注意點
    • 先要引入base64庫,import base64
    • 加密: 結果=base64.b64encode(要加密的字串)
    • 解密:結果=base64.b64decode(要解密的字串)
    • 千萬要注意:要解密的字串要符合base64的格式,比方說後面要有兩個等號。而且,解密後的值並不是字串型別。也就是說,字串的一些函式是不能使用的,如split(),分割函式。

解題流程:

  • 開啟連結出現一串英文,意思九四” 天下武功,唯快不破“,並提示你,必須儘快的做,you mast do it as fast as you can 。有點頭大,什麼意思呀,讓我儘快,儘快幹啥呀?

  • 老套路,我們先來看看原始碼,檢視後,發現有一句

    <!-- please post what you find with parameter:key -->

    翻譯一下,就是讓我們用post傳值方式來把名為key的引數傳出去,但是這個引數是在哪裡呀?想想~~

  • 應該是在網頁的標頭檔案裡,f12檢視一下,在header裡面果然有貓膩

    FLAG: UDBTVF9USElTX1QwX0NINE5HRV9GTDRHOlJzdlV1VDVVTQ==

    看到有兩個==,肯定是base64編碼吧,就把這段密碼解密一下

    P0ST_THIS_T0_CH4NGE_FL4G:RsvUuT5UM

    把後面的值以post方式傳過去,發現沒啥變化,好像沒有結果,也沒有下一步的提示,再好好想想~~

  • 題目中反覆提示要快快快,會不會是對你把這串字元傳遞過去的時間有限制呢那就寫個指令碼讓指令碼來完成這個工作,以下是python指令碼

    import requests
    import base64
    
    r = requests.post('http://ctf5.shiyanbar.com/web/10/10.php') #建立requests連結,訪問指定url資源,返回Response物件r,裡面儲存了網頁上的所有資源
    
    key = r.headers['FLAG'] #找到資源header標頭檔案裡面的FALG,取出裡面的值,並傳給key
    flag = base64.b64decode(key).decode().split(':')[1] #先把key解密,但是要注意解密後的字串不是str型別上傳統的字串,而是bytes型別的字串物件,所以後面的split()切割函式並不能起作用。而我們的目的就是要把解密後的字串物件以":"分開,形成陣列,並取到[1]號位上的值。為了使能達到目的,我們只要在解密後的bytes型別的字串物件後呼叫decode()方法,就可以使之轉化成字串,使得我們達到目的。 para = {'key':flag} #建立字典物件para,賦值為上面解出來的flag值 r = requests.post('http://ctf5.shiyanbar.com/web/10/10.php',data = para)#再以para為資料引數,傳送post請求,得到Response物件 print(r.text)#以字串的形式,打印出r的資料(即網頁資料)
  • 通過這個指令碼,就可以在極短的時間內,完成找到flag,並提交flag的過程。不得不感嘆,python真是太強大了,再爬蟲方面,執行一下,flag就出來了。

總結

  • 後來我發現,這道題目每次標頭檔案裡的FLAG的值都會變化,肯定要寫指令碼來實現。