20145325張梓靖 《網絡對抗技術》 Web安全基礎實踐
實驗內容
- 使用webgoat進行XSS攻擊、CSRF攻擊、SQL注入
- XSS攻擊:Stored XSS Attacks、Reflected XSS Attacks
- CSRF攻擊:Cross SSite Request Forgery(CSRF)、CSRF Prompt By-Pass
- SQL注入攻擊:Numeric SQL Injection、Log Spoofing、String SQL Injection、Database Backdoors step一、Database Backdoors step二、Blind Numeric SQL Injection
基礎問題回答
- SQL注入攻擊原理,如何防護
- SQL注入是指攻擊者能夠在web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,以此來實現欺騙數據庫服務器執行非受權的任意查詢,從而進一步獲得相應的數據信息。簡單來講,即把SQL語句當作用戶名等輸入正常網頁中。
- 防護SQL注入就須要在web設計中,設計成用戶可以輸入的內容是不能直接放到後臺要執行的SQL語句裏的,或者讓web應用程序對用戶輸入數據的合法性進行判斷,不合法則不容許提交。
- XSS攻擊的原理,如何防護
- 經過對網頁注入可執行代碼(如HTML、javascript)且成功地被瀏覽器執行,以達到攻擊的目的
- 與防護SQL注入同樣,能夠對用戶輸入的數據進行合法性驗證,即對輸入參數進行過濾,與可執行代碼、特殊字符相關的不容許經過
- CSRF攻擊原理,如何防護
- 經過假裝來自受信任用戶的請求來利用受信任的網站,即受害用戶登陸受信任網站後,在本地生成了COOKIE而又在不登出該網站的狀況下,訪問了危險網站,而此時訪問的危險網站可能就已經寫入了利用你的身份進行而惡意操做的代碼
- 由於CSRF攻擊主要利用的就是受害用戶的身份,即COOKIE,因此能夠對web應用時進行設置,不長時間保存COOKIE等,同時咱們也要儘可能避免訪問危險網站
實驗總結與體會
在本次實驗中,使用了webgoat來分別進行XSS攻擊、CSRF攻擊、SQL注入的實驗測試。在進行SQL測試時,若是輸入框爲下拉框,那麼咱們可使用kail裏的burpsuite來做爲網頁代理,對傳送的網頁內容進行編輯之後再發到服務器,若是是text的輸入框,直接輸入就好;XSS與CSRF有些相似,都是在合法用戶的身份下進行操做,只不過XSS是直接利用站點內的信任用戶,而CSRF是經過假裝來自受信任用戶的請求來利用受信任的網站。之因此可以進行這些攻擊,主要是由於咱們的web設計有漏洞,或者說沒有想到會有這些狀況的發生,因此咱們正在進行各類代碼設計的時候,必定要作的就是對用戶輸入進行合法性驗證,經過了才提交到後臺進行處理,沒經過則不處理。
實踐過程記錄
XSS攻擊
CSRF攻擊
- Cross SSite Request Forgery(CSRF)
- 該實驗爲在新建郵件裏寫入能夠更改由題目要求的attack的src、menu的transferFunds數值參數
- 可選用html裏的iframe模塊,可自動鏈接打開所標示網頁
- 這裏在message裏寫入的內容爲
<iframe src="attack?Screen=284&menu=900&transferFunds=5000"></iframe>
![](http://static.javashuo.com/static/loading.gif)
- CSRF Prompt By-Pass
- 該實驗與上個實驗相似,一樣是經過郵件的方式進行惡意請求,只不過這裏不只是對transferFunds數值參數進行了變化,還對這個過程的進行了請求確認,因此須要兩個iframe模塊,而且由題目可知在請求確認的模塊裏transferFunds參數的值
這裏在message裏寫入內容爲html
<iframe
src="attack?Screen=271&menu=900&transferFunds=5000">
</iframe>
<iframe
src="attack?Screen=271&menu=900&transferFunds=CONFIRM">
</iframe>
![](http://static.javashuo.com/static/loading.gif)
SQL注入攻擊
- Numeric SQL Injection
- 該實驗爲使用SQL注入語句,將本來選中一個地點只顯示一個地點的天氣情況變爲選中一個地點顯示全部地點天氣信息
- 在kail中可以使用burpsuite做爲網頁代理,對傳送的網頁內容進行編輯之後再發到服務器
這裏就選用burpsuite,在地點_id後增長or 1=1;--
,所以處的地點_id是數值型的,因此不用在開始加單引號
java
- Log Spoofing
- 該實驗爲在用戶名處經過使用%0d%0a(回車換行)以及文字內容輸入來令人迷惑,雖然有成功登錄的文字信息,但實質上是登陸失敗的
這裏的user name處寫入的內容是%0d%0aLogin succeeded !admin
web
- String SQL Injection
- 該實驗和Numeric SQL Injection相似,一樣是要求本來只能查到某一我的的信息,經過SQL語句的注入使整張表都顯示出來
着這裏的last name寫入的內容是' or 1=1;--
,由於last name是字符型的,因此須要在開始加上單引號
sql
- Database Backdoors step1
- 該實驗是要在user ID中實現多條SQL語句的注入,其中101是題目給的已存在的帳戶ID
這裏第一次填入的內容是or 1=1;update employee set salary=53250;
數據庫
- 雖然實驗成功經過了,可是並無按我所想的,不只把用戶表的全部內容顯示出來同時把工資值變化了
- 發現是由於在or以前沒打空格或任意用戶名加空格,它覺得是有個叫or的用戶,1=1它也讀不懂,但由於有後面的分號,它仍是知道有多句SQL,因此實驗經過
咱們從新將user ID輸入101 or 1=1;update employee set salary=53250;
瀏覽器
- Database Backdoors step2
- 該實驗所要使用的SQL語句已經在題目中給出,意思是使用該SQL語句實如今myBackDoor表中一旦添加新用戶那麼就在用戶表裏將新用戶的郵箱改成題目固定的郵箱
在user ID輸入的內容爲101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid;
安全
- Blind Numeric SQL Injection
- 該實驗目的是要找的cc_number爲1111222233334444的pin大小(題目已給出pin爲數值),輸入正經常使用戶ID做用是判斷這個用戶是否存在
咱們首先測試下效果,101是題目給的已知用戶ID
服務器
經過上一實驗咱們能夠知道100用戶並不存在
cookie
- 效果知道了後,根據題目,咱們知道pin是個數值,要知道cc_number對應的pin,則只有一個一個嘗試,先使用<、>來大概肯定範圍(同and一塊兒,and前爲存在的用戶ID,例如101,一旦and後面的語句,即判斷pin的值大小成立,則下面就會顯示存在用戶,而後繼續縮小範圍進行查找,直到找到惟一肯定的,即便用=號時成立)
- 由博客後面的學習指導Webgoat學習筆記之習題破解能夠知道,所求的對應pin就是2367
直接在numer框中輸入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );
![](http://static.javashuo.com/static/loading.gif)
- 能夠看到用戶存在的顯示,即成功找到cc_number爲1111222233334444的pin值
題目說找到對應pin值後,將值輸入框中,該實驗即經過
![](http://static.javashuo.com/static/loading.gif)
學習指導參考
SQL注入攻擊原理以及基本方法
xss攻擊原理與解決方法
淺談CSRF攻擊方式
Webgoat學習筆記之習題破解