作者:phith0n@長亭科技
在黑盒測試的情況下,如何判斷一個站是否是 Django 開發的?以下這些方法,很多都能在我的博客得到印證。
利用 Debug 模式異常頁面判斷
DEBUG 模式開啟時,訪問不存在的頁面或出錯的頁面會有特殊的異常拋出。像這樣的頁面,就可以確定是Django

CSRF Token 名稱確認
訪問一個包含表單的頁面,表單中會有一個隱藏的 input ,用來做 CSRF 檢測的 Token ,其名字比較獨特, csrfmiddlewaretoken :

遇到有這個名字的表單,基本可以確定是 Django 。
假如開發者將csrfmiddlewaretoken這個名字換了,怎么辦?
隨便向目標的某個頁面 POST 一個數據包,因為缺少 CSRF TOKEN ,如果目標網站是 Django,它將給你一個頗具其特色的錯誤頁面:

利用后臺確認
Django 默認安裝后會自帶一個后臺,地址是 /admin(不過大多數網站會替換后臺地址):

遇到這個樣式的后臺界面,可以確定是Django。
利用HTTP頭
有的 Django 站點會返回 Server 頭:

雖然不能100%確定是 Djnago ,但范圍就縮的很小了。
通過一些細節判斷
有些細節雖然不能100%確定是 django ,但多個細節組成在一起就可以基本確定了。
比如,Django 輸出的 html 中通常會有很多空白行,因為這些位置放的是邏輯語句,Django 不像 jinja2
中會提供{%-這樣清除空白行的方法:

再比如,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驗證失敗. 相應中斷.等。
通過一些第三方模塊的特點判斷
Django 之所以好用,因為其代碼耦合性很低,所以有豐富的第三方模塊可以直接使用。通過這些模塊的特點也能判斷目標網站是否是 Django 。
常用的第三方模塊有django-rest-framework、django-debug-toolbar、django-bootstrap3、django-filter、django-cron、django-allauth、django-simple-captcha等。
比如,django-rest-framework 默認包含一個登陸頁面,/api-auth/login/:

再比如,django-simple-captcha 生成的驗證碼會包含一個名字是captcha_0,值為40位 hex 的隱藏輸入框。
這些第三方庫的特點也可以輔助你判斷,就是需要收集與細心觀察了。
必殺技:用靜態文件分析
有的網站可能修改了 Django 的后臺地址,但 Django 后臺所使用的靜態文件地址通常沒有修改,也較難修改。訪問這些靜態文件地址,看看內容是否是 Django 的這一套,就可以確定目標是否為 Django :
如:
https://www.leavesongs.com/static/admin/css/dashboard.css 、 http://www.wuzheng.org/static/admin/css/dashboard.css 、 http://static.fuwo.com/static/admin/css/dashboard.css 、 http://www.lintcode.com/static/admin/css/dashboard.css

我就不羅列了。
但這個方法有個局限,如果目標網站沒有使用 Django 自帶的 django-admin (未將其包含在 settings.py 的 INSTALLED_APPS 中),就沒有這個靜態文件了。
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/336/
暫無評論