1. 程式人生 > >“百度杯”2017年春秋歡樂賽-----時間

“百度杯”2017年春秋歡樂賽-----時間

=============================

個人收穫:

1.show_source(),file_get_contents(),mt_rand(),file_put_contents(),unlink()函式的意思

2.python的MD5加密寫法

=============================

題目:

解釋下原始碼的大概意思

show_source() :函式對檔案進行語法高亮顯示

取COOKIE裡面token的值 如果等於 hello,就執行下面的程式碼

file_get_contents() 函式把’flag.php‘檔案讀入到$txt變數中

mt_rand()是取隨機數的,與rand()區別是比rand()快4倍,而且如果mt_rand(1,10)的話1和10都會取得到的

通過md5對mt_rand取值的加密然後通過拼接'u/'和'.txt'得到檔案的名字存入到$filename中

file_put_contents() 函式把$txt存的內容寫入到$filename的檔案中取

然後休眠10秒

unlink() 函式刪除檔案

就說明我們訪問這個網站的時候,在網站目錄裡面會隨機生成一個檔案包含flag.php的內容,但是我們只有10秒的時間取訪問它,10秒過後會自動刪除。

所有我們來跑目錄,這裡我們需要把所有會出現的檔名的可能性都列出來當成字典來跑

python原始碼如下

import hashlib
import requests
file = open("data.txt",'w+')
for i in range(1,1001):
  m = hashlib.md5()
  m.update(str(i).encode())
  mid = m.hexdigest()
  url = 'u/'+mid+'.txt'
  file.write(url+'\n')
file.close()

python 檔案各種許可權對照表

這裡的md5加密就是python正常的md5加密流程

md5加密:
 hash = hashlib.md5()
 hash.update('admin'.encode('utf-8'))
 print(hash.hexdigest())
 21232f297a57a5a743894a0e4a801fc3

sha1加密:
 hash = hashlib.sha1()
 hash.update('admin'.encode('utf-8'))
 print(hash.hexdigest())
 d033e22ae348aeb5660fc2140aec35850c4da997



然後生成好的md5值(注意因為i是int型別的需要用str()來進行轉換型別)與'/u'和'.txt'拼接寫入檔案儲存

字典內容如下:

然後我們用御劍重新整理下網頁趕緊跑,並且開啟網頁,要不然10秒後就要刪除