如何判斷目標站點是否為Django開發

老文一篇,幾個月以前發在【代碼審計】小密圈里的文章,當時是寫一個系列(Django安全漫談),抽出其中的一部分,分享一下。

在黑盒測試的情況下,如何判斷一個站是否是Django開發的?以下這些方法,很多都能在我的博客(?https://www.leavesongs.com?)得到印證。

利用Debug模式異常頁面判斷

DEBUG模式開啟時,訪問不存在的頁面或出錯的頁面會有特殊的異常拋出。像這樣的頁面,就可以確定是Django

如何判斷目標站點是否為Django開發

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

如何判斷目標站點是否為Django開發

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

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

隨便向目標的某個頁面POST一個數據包,因為缺少CSRF TOKEN,如果目標網站是Django,它將給你一個頗具其特色的錯誤頁面:

如何判斷目標站點是否為Django開發

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

如何判斷目標站點是否為Django開發

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

有的Django站點會返回Server頭:

如何判斷目標站點是否為Django開發

雖然不能100%確定是Djnago,但范圍就縮的很小了。

有些細節雖然不能100%確定是django,但多個細節組成在一起就可以基本確定了。

比如,Django輸出的html中通常會有很多空白行,因為這些位置放的是邏輯語句,Django不像jinja2中會提供?{%-?這樣清除空白行的方法:

如何判斷目標站點是否為Django開發

再比如,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開發

再比如,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自帶的django-admin(未將其包含在settings.py的INSTALLED_APPS中),就沒有這個靜態文件了。

相關新聞

聯系我們

400-080-6560

在線咨詢:點擊這里給我發消息

郵件:[email protected]

工作時間:周一至周日,09:00-18:30

QR code
云南快乐10分开奖直播