1. 程式人生 > >三秒識別一個網站是否是Django後臺!

三秒識別一個網站是否是Django後臺!

三秒識別一個網站是否是Django後臺!

 

最近事情有點多,一直沒有時間寫原創,而又一直想寫點什麼,今天早上正好空下來,我就來寫一篇Python的吧,這週末我總結下最近遇到的事情和以後的打算,和大家共勉。

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

三秒識別一個網站是否是Django後臺!

 

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

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

三秒識別一個網站是否是Django後臺!

 

  1. 通過CSRF Token驗證

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

三秒識別一個網站是否是Django後臺!

 

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

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

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

三秒識別一個網站是否是Django後臺!

 

  1. Django Admin

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

三秒識別一個網站是否是Django後臺!

 

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

  1. 通過HTTP頭

有的Django站點會返回Server頭:

三秒識別一個網站是否是Django後臺!

 

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

進群:960410445  

  1. 拼湊細節

比如,Django預設找回密碼的連結是 /password_reset/ ,郵件傳送成功是 /password_reset/done/ ,找回密碼連結是 reset/(?P[0-9A-Za-z_-]+)/(?P[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驗證失敗. 相應中斷. 等。

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

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

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

三秒識別一個網站是否是Django後臺!

 

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

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

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

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

三秒識別一個網站是否是Django後臺!

 

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