20145236《網絡對抗》Exp9 web安全基礎實踐
阿新 • • 發佈:2018-05-14
文本框 options 頁面 http username inf 命令 完整 protocol
20145236《網絡對抗》Exp9 web安全基礎實踐
一、基礎問題回答:
- SQL註入攻擊原理,如何防禦
- SQL Injection:就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。
- 利用現有應用程序,將(惡意)的SQL命令註入到後臺數據庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。
- 對用戶的輸入進行校驗,可以通過正則表達式,或限制長度,對單引號和雙"-"進行轉換等。應用的異常信息應該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝,把異常信息存放在獨立的表中。
- XSS攻擊的原理,如何防禦
- XSS(cross-site scripting跨域腳本攻擊)攻擊是最常見的Web攻擊,其重點是“跨域”和“客戶端執行”。有人將XSS攻擊分為三種,分別是:Reflected XSS(基於反射的XSS攻擊)、 Stored XSS(基於存儲的XSS攻擊)、 DOM-based or local XSS(基於DOM或本地的XSS攻擊)
- 過程 :攻擊者發現XSS漏洞——構造代碼——發送給受害人——受害人打開——攻擊者獲取受害人的cookie——完成攻擊
- 預防措施:
- 反射型:前端在顯示服務端數據時候,不僅是標簽內容需要過濾、轉義,就連屬性值也都可能需要。 後端接收請求時,驗證請求是否為攻擊請求,攻擊則屏蔽。
- 存儲型: 首要是服務端要進行過濾,因為前端的校驗可以被繞過。當服務端不校驗時候,前端要以各種方式過濾裏面可能的惡意腳本,例如script標簽,將特殊字符轉換成HTML編碼。
- CSRF攻擊原理,如何防禦
- CSRF(Cross-site request forgery)跨站請求偽造,由於目標站無token/referer限制,導致攻擊者可以用戶的身份完成操作達到各種目的。根據HTTP請求方式,CSRF利用方式可分為兩種, GET類型的CSRF和post類型的CSRF
- 過程:攻擊者發現CSRF漏洞——構造代碼——發送給受害人——受害人打開——受害人執行代碼——完成攻擊
- 目前主流的做法是使用Token抵禦CSRF攻擊
二、實踐過程記錄
開啟webgoat
- 在在終端中輸入
java -jar webgoat-container-7.0.1-war-exec.jar
開啟webgoat,直到出現INFO: Starting ProtocolHandler ["http-bio-8080"]
- 打開瀏覽器,在瀏覽器中輸入
localhost:8080/WebGoat
進入webgoat。(註意"WebGoat"大小寫敏感),進入webgoat(用戶名和密碼默認便可)
(一)SQL註入
Numeric SQL Injection
- 這一步中用到了burpsuite做代理。
- 該題並沒有文本框讓我們直接進行輸入操作,我們只能通過滑動文本框選擇地點,sql語句的生成代碼可能是寫在web頁面的源碼中,也可能是在後臺服務中進行,但是無論是哪一種,表單都需要將搜集到的信息寫進數據包中通過網絡傳輸給後臺,這就給了我們篡改的機會
- 我們先隨便選擇一個地點並進行查詢,根據其反饋的sql語句來看,我們需要修改的就是
station
部分,之後我們就需要用到另一個工具burp-suite
,通過將burp-suite
設置瀏覽器的代理服務器,作為中間服務器,這樣我們就可以截獲從瀏覽器中發送出去的所有數據包,並將其中內容修改成我們想要的樣子 - 打開
burp-suite
在proxy
的options
選項中添加新的代理(默認為8080,不過被apache2占用了) - 修改了瀏覽器的代理服務器之後,隨便選擇一個城市就會發現
burp-suite
中已經抓到了我們剛剛發送出去的數據包
Log Spoofing
- 題意是要我們使用管理員admin身份完成登錄,其實就只是要根本的目的是將管理員admin登錄成功這一條記錄寫進日誌中
- 首先我們進行嘗試,無論我們輸入什麽username,日誌都顯示登錄失敗
- 這次我嘗試對輸入的username做出一些改變輸入guest ok來查看反饋結果
- 這樣我們就有一個思路如果我們輸入任意用戶名之後,接上我們想要寫進日誌裏的記錄是不是就達到了我們的目的,於是我們在考慮換行符的編碼的情況下可以這樣構造這樣一條語句
guest%0aLogin Succeeded for username:admin
最後結果顯示欺騙成功
String SQL Injection
- 通過輸入查詢的語句使得整張表得以顯示,在其中輸入
‘ or 1=1;--
- 此時註入的SQL語句為
SELECT * FROM user_data WHERE last_name = ‘‘ or 1=1;--‘
,即查詢表中所有信息
Stage 3 Numeric SQL Injection
- 這個實驗要求我們以larry的身份登錄,實現對Neville的profile信息的瀏覽,首先跟上一次實驗的方式一樣登陸上去,這樣點擊
ViewProfile
是無效的 - 在代理中將行為從
Login
改為ViewProfile
- 將ID改為Neville的ID,並讓將其置於首位
112 or 1=1 order by salary desc--
- 成功看見了Neville的信息。
Blind Numeric SQL Injection
- 按照題目的意思是,我們可以驗證已經輸入的數字是否合法,例如
101
,因此我們可以構造條件1 AND 條件2
,觀察最終結果是否合法來判斷條件2
是否為真 - 例如我們可以構造
101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 5236 );
來驗證其設定的pin值是否大於5236,按照這個原理,我們可以不斷的縮小所要搜尋的pin的值,直到找到該pin值 - 不過我不是很理解的是,為何不通過直接輸入數字觀察結果為valid或者invalid來判斷該數字大於還是小於pin值,通過二分法同樣可以一步一步逼近設定的pin值,並不知道為何還需要註入
Blind String SQL Injection
- 基本思路類似於之前的盲數字註入,只是猜測的對象變成了字符所對應的ascii碼,從根本上來說其實還是一種對數字的猜測
- 構造
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), x, y) = ‘h‘ );
來測試出我們需要的字符串到底是啥 - 因為這個測試次數較之上一個實驗要多,所以完全依靠手工輸入的工作量太大,使用
burp-suite
中的intruder
中的payloads
來進行爆破,一一測試所有可能性
(二)XSS攻擊
Phishing with XSS 跨站腳本釣魚攻擊
在菜單欄中依次選擇
Cross-site scripting
,phishing with xss
,這個攻擊類似於上一個練習的一個進階版,不僅能插入script標簽還能插入其他標簽構成完整的web代碼(如下)</form> <script> function hello(){ alert("hello,5319"); } </script> <form> <br><br><h2>please input your stu_number and pwd</h2><br><br> stu_number: <br><input type="text" name="stunumber"><br> password: <br><input type="password" name="pwd"><br> <input type="submit" name="submit" value="login" onclick="hello()"> </form>
- 偽造網頁,把獲取的用戶名和密碼傳給
WebGoat/capture
name="login" value="login" onclick="hack()
點擊login
後,執行hack()
,獲取用戶名密碼,並彈窗Had this been a real attack... Your credentials were just stolen.
User Name ="你的用戶名 " Password = "你的密碼"
Stored XSS Attacks 存儲型XSS攻擊
- 基於存儲的xss攻擊,把攻擊者的數據存儲在服務器端,攻擊將伴隨著攻擊數據一直存在。
- 在Message裏輸入
<script>alert("It‘s 5236!");</script>
- .出現超鏈接,點擊會彈出:
It‘s 5236!
- 可以利用填入的腳本來盜取信息。
- 攻擊代碼存儲在服務器端,每次加載就會執行。
Reflected XSS Attacks
- 基於反射的xss攻擊
- 在輸入框中註入
<SCRIPT>alert(document.cookie);</SCRIPT>
得到cookies
- 也可以輸入指定的URL值,這裏的效果為彈出方框
http://www.targetserver.com/search.asp?input=<script>alert("hello20145236");</script>
(三)XSCF攻擊
CSRF(Cross Site Request Forgery)
- 在message裏輸入
<img src=‘attack?Screen=280&menu=900&transferFunds=100000‘ width=‘1‘ height=‘1‘>
這其中,280是我網頁的scr,900是我的網頁的menu,100000是轉錢數額 - 點擊
submit
,方才的代碼就會被執行
CSRF Prompt By-Pass
與上個實驗類似,同樣是通過郵件的方式進行惡意請求,這裏添加了請求確認的要求,所以需要兩個iframe模塊,輸入如下:
<iframe src="attack?Screen=自己的src&menu=自己的menu&transferFunds=5000"> </iframe> <iframe src="attack?Screen=自己的src&menu=自己的menu&transferFunds=CONFIRM"> </iframe>
三、實驗總結與體會
這一次的實驗用到了webgoat,在其中做了關於SQL註入、XSS攻擊和CSRF攻擊,由於是全英文的網頁所以對英文能力也有一定的考驗==,在上一次的web基礎實驗中我對SQL註入、XSS攻擊的理解只是表面的理解,實現的功能也很簡單,這些知識點在這一次的實驗中得到了很直觀的學習,並且這一次的實驗也警示我們,做網站編程的時候一定要對用戶輸入的信息做一個合法性的判斷,不然會非常危險。
20145236《網絡對抗》Exp9 web安全基礎實踐