1. 程式人生 > >20145311王亦徐 《網絡對抗技術》 Web安全基礎實踐

20145311王亦徐 《網絡對抗技術》 Web安全基礎實踐

檢測 mage bottom 字符串 backdoor 隱私 port pda 寫入

2014531王亦徐 《網絡對抗技術》 Web安全基礎實踐

實驗內容

  • 利用WebGoat平臺嘗試了一些XSS、CSRF、SQL註入攻擊

基礎問題回答

1、SQL註入攻擊原理,如何防禦
原理: SQL註入是指攻擊者可以在web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,以此來實現欺騙數據庫服務器執行非授權的任意查詢,從而進一步得到相應的數據信息。
簡單地認為是將sql語句作為輸入交給表單或者通過域名等將sql交給後臺,從而欺騙服務器執行sql語句

防範:

  • 過濾字符串,對一些數據庫敏感字符進行過濾
  • 盡量不要讓用戶的輸入直接放到後臺數據庫直接執行
  • 對用戶輸入的字符串進行合法性的判斷

2、XSS攻擊的原理,如何防禦?
原理:允許用戶將代碼註入到網頁上,並能夠被瀏覽器成功地執行,其他用戶在觀看網頁時就會受到影響
防範:對一些特殊字符進行檢測,尤其是一些敏感的非法字符;對參數進行過濾,特殊字符、可執行代碼不允許通過。

3、CSRF攻擊原理,如何防禦
原理:偽裝來自受信任用戶的請求來利用受信任的網站,向web server發送惡意的請求。
防範:避免全站通用的cookie,嚴格設置cookie的域;在頁面中減少暴露用戶隱私信息。

實驗總結與體會

本次實驗主要是利用webgoat嘗試一些攻擊,有XSS、CSRF、SQL攻擊,做完實驗不禁有種幻想,以後看到一個輸入框就想,在裏面輸入點語句,從而獲得一些後臺的數據庫信息,由此也可見程序人員在編寫web後臺是要註意很多細節,有一個漏洞就可能會給攻擊人員機會。還有就是我們在看網頁時,如果看不到源碼,可以利用burpsuite等軟件,從而截獲數據,更改源碼。所以如果我們將來在寫網頁代碼使,一定要註意對一些敏感的字符進行檢驗、過濾,盡可能地避免sql註入攻擊。

實驗過程記錄

首先運行webgoat 在命令行裏執行:java -jar webgoat-container-7.0.1-war-exec.jar

技術分享

XSS攻擊

Stored XSS Attacks

該實驗是在新建帖子的message裏進行XSS攻擊,從而點擊寫好的帖子便會遭受攻擊

在輸入框中輸入<script>alert("xiaoli succeed!");</script>

技術分享

Reflected XSS Attacks

技術分享

技術分享

與之前那個類似,在ACCESS CODE 框裏填入獲取COOKIE的javascript代碼<script>alert("xiaoli succeed!");</script>

與上面那個相比,這個是非持久的,上面那個通過留言板是持久的。

Phishing with XSS

在文本框裏寫好一個釣魚網站,點擊提交後便能夠顯示你的登陸名和密碼

技術分享

技術分享

Cross Site Request Forgery(CSRF)

這個實驗是要寫一個URL誘使其他用戶點擊,從而觸發CSRF攻擊,我們將其放在了圖片裏

在message框中輸入<img src="http://localhost:8080/WebGoat/attack?Screen=279&menu=5311&transferFunds=

技術分享

其中的參數根據提供的來進行設置

技術分享

技術分享4000"/>

CSRF Prompt By-Pass

和上一個實驗類似,但是這次我們需要有兩個請求,一是轉賬請求,二是確認轉賬成功請求

先在瀏覽器中輸入URL:localhost:8080/WebGoat/attack?Screen=267&menu=900&transferFunds=5000進入確認轉賬請求頁面:

技術分享

確認轉賬後再次輸入localhost:8080/WebGoat/attack?Screen=267&menu=900&transferFunds=CONFIRM

便能夠成功實現轉賬

技術分享

SQL註入攻

Numeric SQL Injection

利用sql語句註入使得原本只顯示一個天氣從而顯示所有的天氣信息

由於在網頁中我們看不到網頁執行sql語句的部分,所以我們利用burpsuite作為網頁代理,將截獲的數據修改後再次發向服務器

技術分享

技術分享

技術分享

通過修改sql查詢語句加上1=1的永真式,進而能夠查詢到所有的信息

Log Spoofing

這個實驗通過利用回車換行%0d%0a來起到欺騙用戶的目的,看上去是登陸成功了,實際上是失敗的,知識一種障眼法

在user name處寫入%0d%0aLogin succeeded !admin

技術分享

String SQL Injection

同樣是構造輸入語句,由於用戶名是字符類型的,所以需要加上‘,後面再加上永真式,並將後面的語句用--註釋掉

在last name寫是‘ or 1=1;--

技術分享

SQL Injection

利用inspect elements修改輸入框的字符長度限制,將其改為10,這樣和之前的實驗相似,通過構造永真式,便可以成功登陸

技術分享

Database Backdoors1

本實驗是要實現多條sql語句的註入

101是已給的存在的賬戶,可以先進行查詢,可以得到用戶信息

再接著就是現實所有的用戶信息

在user ID中輸入101;update employee set salary=5311;就能夠更改101用戶的salary信息

技術分享

Database Backdoors2

第二步是要達到添加新用戶時將新用戶的郵箱改為固定的郵箱

直接使題目給定的語句101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET [email protected] userid = NEW.userid;

技術分享

Blind Numeric SQL Injection

該實驗是為找到cc_number為1111222233334444的pin大小,輸入正常用戶ID 只會告訴你該賬戶是否存在

要知道cc_number對應的pin,我們一個一個地嘗試,並且不斷地縮小範圍

在numer框中輸入101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 某個數值 );

通過該語句我們不斷地縮小查找的範圍,最終縮小到2000多

接著我們可以進行猜測,同時我們猜想是否可以利用暴力破解,對該pin值進行破解

後來通過其他同學的實踐,發現利用burpsuite也可以實現類似暴力破解的功能,首先截獲數據,send to intruder設置攻擊好載荷後,填寫數值的範圍,進行攻擊,最終我們會發現需要的pin值

在用戶id中輸入101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) = 2364 );可以發現是合法的

最終輸入pin值2364便能夠成功

技術分享

20145311王亦徐 《網絡對抗技術》 Web安全基礎實踐