1. 程式人生 > >Python|7招教你識別一個網站是否是Django後臺

Python|7招教你識別一個網站是否是Django後臺

平時開發們用Django寫網站,你作為黑盒測試來說可能不需要關心以下的問題,但白盒呢?所以黑盒不想提升一下自己的能力嗎?

今天我們就來說下,如何測試一個網站的後端是由Django編寫的。

更多Python視訊、原始碼、資料加群960410445免費獲取

1. 利用Debug模式異常頁面判斷

最簡單的就是,當DEBUG模式開啟時,訪問不存在的頁面或出錯的頁面會有特殊的異常丟擲。像這樣的頁面,我稱之為黃程式碼(哈哈哈,寫Django的自己知道,是不是經常會有),就可以確定是Django了

Python|7招教你識別一個網站是否是Django後臺

 

2. 通過CSRF Token驗證

訪問一個包含表單的頁面,表單中會有一個hidden input,用來儲存CSRF檢測的Token,其名字比較獨特,csrfmiddlewaretoken:

Python|7招教你識別一個網站是否是Django後臺

 

遇到有這個名字的表單,基本可以確定是Django。

假如開發者將 csrfmiddlewaretoken 這個名字換了,怎麼辦?

我們可以把剛剛的hidden input 給刪了,然後登陸,因為缺少CSRF TOKEN,會返回一個Django的CSRF TOKEN錯誤頁面給你:

Python|7招教你識別一個網站是否是Django後臺

 

3. Django Admin

安裝Django的時候會自帶一個後臺,地址是/admin(不過大多數網站會替換後臺地址):

Python|7招教你識別一個網站是否是Django後臺

 

遇到這個樣式的後臺介面,可以確定是Django。

4. 通過HTTP頭

有的Django站點會返回Server頭:

Python|7招教你識別一個網站是否是Django後臺

 

雖然通過這種方式不能100%確定是Django後臺,但範圍就縮的很小了,是個Python,也就那幾套Web了。

5. 拼湊細節

比如,Django預設找回密碼的連結是 /password_reset/ ,郵件傳送成功是 /password_reset/done/ ,找回密碼連結是 reset/(?P<uidb64>[0-9A-Za-z_-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/ ,找回密碼成功是 /reset/done/ ,正常修改密碼是 /password_change/ ,修改成功是 /password_change/done/ 。

不過這些連結都可以改,只能用作參考。

再比如,django檔案上傳的目錄通常叫 media ,註冊時密碼要求8位以上數字加字母,分頁通常是 ?page=2 而不會是 /page/2/ ,表單輸入框的id通常是 id_xxxx ,中文的情況下還會有一些特定的翻譯語句,如 請上傳一張有效的圖片。您所上傳的檔案不是圖片或者是已損壞的圖片。 、 CSRF驗證失敗. 相應中斷. 等。

6. 通過一些第三方模組的特點判斷

Django之所以好用,因為其程式碼耦合性很低,所以有豐富的第三方模組可以直接使用。通過這些模組的特點也能判斷目標網站是否是Django。

常用的第三方模組有django-rest-framework、django-debug-toolbar、django-bootstrap3、django-filter、django-cron、django-allauth、django-simple-captcha等。

比如,django-rest-framework會有一個除錯頁面:

Python|7招教你識別一個網站是否是Django後臺

 

再比如,django-simple-captcha生成的驗證碼會包含一個名字是 captcha_0 ,值為40位hex的隱藏輸入框。

這些第三方庫的特點也可以輔助你判斷,就是需要收集與細心觀察了。

7. 分析靜態檔案

有的網站可能修改了Django的後臺地址,但Django後臺所使用的靜態檔案地址通常沒有修改,也較難修改。

訪問這些靜態檔案地址,看看內容是否是Django的這一套,就可以確定目標是否為Django,如 :http://0.0.0.0:8001/static/admin/css/dashboard.css

Python|7招教你識別一個網站是否是Django後臺

但這個方法有個侷限,如果目標網站沒有使用Django自帶的django-admin(未將其包含在settings.py的INSTALLED_APPS中),就沒有這個靜態檔案了。