Web學習——任務四
複述本週任務
時間:2020.5.18——2020.5.23
內容:
- 學習CSRF(跨站請求僞造)
- 完成dvwa第三個模塊CSRF
- 繼續學習php以及HTML
學習CSRF(跨站請求僞造)
什麼是CSRF
我的理解就是:
我給一家超市說:本週所有的賬單,只要報了我的名字就記在我的賬上;但是有一次我去了另一家店(惡意),這家店用某種方式知道了我的名字(cookie),然後他就去那家店報我名免費消費了。
如何實現CSRF
⭐ 貼一段百度上的一個比較形象的回答:
附鏈接1:CSRF攻擊與防禦(寫得非常好)
附鏈接2:Cross-Site Request Forgeries
附鏈接3:CSRF原理簡介
如下:其中Web A爲存在CSRF漏洞的網站,Web B爲攻擊者構建的惡意網站,User C爲Web A網站的合法用戶。
- 用戶C打開瀏覽器,訪問受信任網站A,輸入用戶名和密碼請求登錄網站A;
- 在用戶信息通過驗證後,網站A產生Cookie信息並返回給瀏覽器,此時用戶登錄網站A成功,可以正常發送請求到網站A;
- 用戶未退出網站A之前,在同一瀏覽器中,打開一個TAB頁訪問網站B;
- 網站B接收到用戶請求後,返回一些攻擊性代碼,併發出一個請求要求訪問第三方站點A;
- 瀏覽器在接收到這些攻擊性代碼後,根據網站B的請求,在用戶不知情的情況下 攜帶Cookie信息,向網站A發出請求。網站A並不知道該請求其實是由B發起的,所以會根據用戶C的Cookie信息以C的權限處理該請求,導致來自網站B的惡意代碼被執行。
如何檢測CSRF漏洞
- 最簡單的方法:抓取一個正常請求的數據包,去掉Referer字段 後再Forward,如果該提交有響應,則基本上可以確定存在CSRF漏洞。
- 工具:CSRFTester,CSRF Request Builder等。
如何防禦CSRF漏洞
- 檢查Referer字段
http頭中的Referer字段(用以標明請求來源於哪個地址)。
在處理敏感數據請求時,通常來說,Referer字段應和請求的地址位於同一域名下。而如果是CSRF攻擊傳來的請求,Referer字段會是包含惡意網址的地址。
⭐ 侷限性:因其完全依賴瀏覽器發送正確的Referer字段。雖然http協議無法保證瀏覽器沒有安全漏洞影響到此字段;並且也存在攻擊者攻擊某些瀏覽器,篡改其Referer字段的可能。 - 在請求地址中添加校驗token
若用戶瀏覽器提供不保存在cookie中且攻擊者無法僞造的數據作爲校驗,那麼攻擊者就無法再運行CSRF攻擊。這種數據通常是窗體中的一個數據項。服務器將其生成並附加在窗體中,其內容是一個僞隨機數。
當客戶端通過窗體提交請求時,這個僞隨機數也一併提交上去以供校驗。正常的訪問時,客戶端瀏覽器能夠正確得到並傳回這個僞隨機數,而通過CSRF傳來的欺騙性攻擊中,攻擊者無從事先得知這個僞隨機數的值,服務端就會因爲校驗token的值爲空或者錯誤,拒絕這個可疑請求。
⭐侷限性: 難以保證 token 本身的安全。特別是在一些論壇之類支持用戶自己發表內容的網站,黑客可以在上面發佈自己個人網站的地址。由於系統也會在這個地址後面加上 token,黑客可以在自己的網站上得到這個 token,並馬上就可以發動 CSRF 攻擊。爲了避免這一點,系統可以在添加 token 的時候增加一個判斷,如果這個鏈接是鏈到自己本站的,就在後面添加 token,如果是通向外網則不加。不過,即使這個 CSRFtoken 不以參數的形式附加在請求之中,黑客的網站也同樣可以通過 Referer 來得到這個 token 值以發動 CSRF 攻擊。這也是一些用戶喜歡手動關閉瀏覽器 Referer 功能的原因。 - 在 http頭中自定義屬性並驗證
這種方法也是使用 token 並進行驗證,但並不是把 token 以參數的形式置於http請求之中,而是把它放到http頭中自定義的屬性裏。
⭐侷限性:XMLHttpRequest 請求通常用於 Ajax 方法中對於頁面局部的異步刷新,並非所有的請求都適合用這個類來發起,而且通過該類請求得到的頁面不能被瀏覽器所記錄下,從而進行前進,後退,刷新,收藏等操作,給用戶帶來不便。另外,對於沒有進行 CSRF 防護的遺留系統來說,要採用這種方法來進行防護,要把所有請求都改爲 XMLHttpRequest 請求,這樣幾乎是要重寫整個網站。
Related Attacks
- Cross-site Scripting (XSS)
- Cross Site History Manipulation (XSHM)
完成dvwa第三個模塊CSRF
附鏈接1:DVWA-1.9系列操作之CSRF
附鏈接2:DVWA-CSRF學習筆記
在第一個小任務中已經對CSRF做了初步瞭解,下面將開始實踐…
該模塊主要實現的是一個修改密碼的操作,兩次輸入想要修改的密碼點擊提交修改密碼。
依舊是分爲low、medium、high、impossible四個難易級別。
low級別
如果參數password_new與password_conf相同,就會直接修改密碼:
可以自己僞造一個http://127.0.0.1/dvwa-master/vulnerabilities/csrf/?password_new=mima&password_conf=mima&Change=Change HTTP/1.1。打開這個html文檔,密碼就可以改變。
medium級別
不僅僅是檢查參數password_new與password_conf是否相同,會首先檢查的是這個請求來自哪裏。請求來自主機,那麼就可以更改密碼;如果不是就輸出:“Passwords did not match.”
因此,我們想要通過驗證,就必須保證在http請求中Referer字段中必須包含Host (即把之前的test.html文件重命名爲127.0.0.1.html),所以我們只需要把我們的文件名改成他的Host的name就可以完美的通過驗證。
high級別
在前者的基礎上,加上了Anti-CSRF token驗證。當用戶提交的時候,會在服務器端比對一下token值是否正確。正確就繼續,不正確就報錯。
可以先用burp抓包得到後再更改參數(利用repeater)。
- 找到瀏覽器cookie,複製:
- 返回dvwa的CSRF模塊,向輸入框中輸入我想修改的密碼secret,用burp抓包:
修改cookie(粘貼進去),修改成功!
impossible級別
Impossiable端代碼添加了一個輸入原來密碼的操作,因此只能在知道原密碼的條件下才能夠修改密碼。
學習php以及HTML
php(超文本處理器)
學習鏈接: PHP入門視頻教程之一週學會PHP
php是一門開發語言,針對開發語言的軟件,稱之爲開發環境。
服務器:電腦
集成環境包:由網頁服務器、數據庫服務器、php解析器組成(選擇更新快、操作簡單、選擇性少的)——>phpstudy。
工具選擇:Notepad++;phpstorm
⭐ 前幾次作業都沒有安裝筆記,於是在本次任務中,將先對phpstorm安裝步驟進行簡單記錄:
- 在php.cn–工具下載中找到phpstorm,點擊下載;
- PHPstorm —— 安裝
鏈接:Step 1
鏈接:Step 2 - PHPstorm —— 激活
當時是找了很久很久的激活碼/(ㄒoㄒ)/~~,附可用鏈接:https://www.jianshu.com/p/8ee607919511 - 快捷鍵
phpstorm使用方法
將上次學習的php知識點作以運行:
附指導鏈接:PHPStorm運行PHP代碼(新手教程)
- 打開phpstudy – Apache;打開phpstorm,點擊Creat New Project;
- PHP Empty Project,選擇保存的位置(不建議放在C盤)
- Project – New – PHP File
- 完成php代碼,選擇任意已安裝瀏覽器打開
- 會出現502狀態碼
⭐ 解決辦法:- 編譯器右下角出現“configured”提示,點擊“configure PHP Interpreter”;
- 找到php.exe(還挺不好找…)
- 設置好後,重新用瀏覽器打開,即可
HTML
⭐ 超文本標記語言HyperText Markup Language(用於創建網頁的標準標記語言)
⭐ 對於中文網頁需要使用 utf-8 聲明編碼,否則會出現亂碼。
有些瀏覽器(如 360 瀏覽器)會設置 GBK 爲默認編碼,則你需要設置爲gbk。
瀏覽器在顯示 HTML 時,會省略源代碼中多餘的空白字符(空格或回車等)。
⭐ HTML文檔的後綴名:
- .html
- .htm
以上兩種無區別
⭐ HTML 文檔(也叫做 web 頁面)包含了HTML 標籤 及 文本內容
- HTML 標籤
- 尖括號< >
- 成對出現(開始/開放標籤和結束/閉合標籤)
- 文本內容(元素)
⭐ HTML 基礎
- HTML 標題
HTML 標題(Heading)是通過尖括號h1 – 尖括號h6 標籤來定義的。 - HTML 段落
HTML 段落是通過標籤 尖括號p 來定義的。 - HTML 鏈接
HTML 鏈接是通過標籤 尖括號a 來定義的。 - HTML 圖像
HTML 圖像是通過標籤 尖括號img 來定義的。 - HTML 空元素
沒有內容的 HTML 元素被稱爲空元素。空元素是在開始標籤中關閉的。如:尖括號br - HTML 格式化標籤
尖括號b (“bold”) 或者 尖括號strong 與 尖括號i (“italic”) 或者 尖括號em 對輸出的文本進行格式
…
下面是結合所學的一些知識點簡單地構造了一個文檔:
改後綴爲.html:
得到:
以上就是我這次的任務,不足之處還請大家批評指正,謝謝!