20145309李昊《網絡對抗技術》實驗9 web安全基礎實踐
本實驗在同學幫助下完成
一、實驗準備
1.0 實驗目標和內容
- Web前端HTML。能正常安裝、啟停Apache。理解HTML,理解表單,理解GET與POST方法,編寫一個含有表單的HTML。
- Web前端javascipt。理解JavaScript的基本功能,理解DOM。編寫JavaScript驗證用戶名、密碼的規則。
- Web後端:MySQL基礎:正常安裝、啟動MySQL,建庫、創建用戶、修改密碼、建表
- Web後端:編寫PHP網頁,連接數據庫,進行用戶認證
- 最簡單的SQL註入,XSS攻擊測試
2.0 實驗問題的回答
(1)SQL註入攻擊原理,如何防禦
攻擊原理:構造符合填入語句的攻擊代碼,將其輸入錄入框,以達到自己期望的請求,比如跳過驗證,直接登錄。
成因總的來說是代碼編寫不夠嚴密:
- 數據庫組織類型不夠完善
- 不當的類型處理
- 轉義字符的應用漏洞
- 最重要的是錯誤處理不嚴謹
防禦方法:利用輸入規則限制進行防禦,不允許特殊字符輸入
(2)XSS攻擊的原理,如何防禦
攻擊原理:跨站腳本攻擊,XSS攻擊類似於SQL註入攻擊,將攻擊代碼註入到網頁上或者數據庫存儲裏面,在訪問網頁或者執行網頁上功能是就會觸發,實現攻擊。
防禦方法:
對於用戶輸入的攻擊,只允許輸入合法的值,其它值一概過濾掉。
加強對於
另外:在不需要html輸入的地方對html 標簽及一些特殊字符( ” < > & 等等 )做過濾,將其轉化為不被瀏覽器解釋執行的字符。
(3)CSRF攻擊原理,如何防禦
XSRF(Cross-site request forgery),中文名稱:跨站請求偽造,也被稱為:one click attack/session riding,縮寫為:CSRF/XSRF。
- 用戶瀏覽並登錄信任網站A
- 驗證通過,在用戶處產生A的Cookie
- 用戶在沒有登出A網站的前提下,訪問危險網站B
- B要求訪問第三方站點A,發出請求,
- 根據B的請求,瀏覽器帶著Cookie訪問A
- A不知請求從哪裏發出的,所以A會根據自己權限處理5,這樣B就收到了模擬用戶操作的目的
防禦措施:
通過驗證碼來檢測用戶提交,每次訪問都需要一個新的驗證碼
也可以通過強制使用戶無法同時訪問其他網頁的方式來達到目的(代價有點大,不實際)
二、Injuection Flaw
1、webgoat開啟
輸入:java -jar webgoat-container-7.0.1-war-exec.jar
開啟,直到出現:
打開瀏覽器,進入localhost:8080/WebGoat
完成開啟
2、SQL字符串註入 String SQL Injection
進入訓練區,首先進行SQL字符串註入的練習:
查看這個目標,全英文的,讓我們通過構造輸入,達到可以查看所有信用卡號的目的。
註意到,題目讓我們試試smith:
史密斯的帳號就出來了,這不是重點,重點是要通過構造輸入來達到越過"where"的效果:
語句為:SELECT * FROM user_data WHERE last_name = ‘Smith‘
參考上一次的實驗,使用永真式,得到:
SELECT * FROM user_data WHERE last_name = ‘‘or 1=‘1
將一條語句改成兩條,所以我們需要填入:‘or 1=‘1
3、日誌欺騙 Log Spoofing
日誌欺騙,利用日誌的格式,使用換行等字符,欺騙管理員:
題意讓我們用管理員的身份進去:
用CR (%0d) 或者 LF (%0a)的方式使用換行符,達到成功的效果。
事實證明,%0d與%0a都可以起到成功換行效果。只不過我後面那個%0a
有點多余了,但照樣成功了。
4、數字型SQL註入 Numeric SQL Injection
這個表單允許使用者看到天氣數據,利用SQL註入使得可以看見所有數據。
但是難點在於,並沒有輸入,這下怎麽辦呢
用burpsuite
,首先讀取執行的SQL值,再對屬性值進行修改,達到目的。
打開,
進入“Proxy”的“Options”
點擊add,默認是8080端口被占用時需要添加一個新的端口8888
接下來對瀏覽器進行設置,依次進入:
preference-advanced-settings
將設置中,監聽的端口改掉
到這裏,就建立好了捕獲包的工具,所有數據都會通過這裏。
回到webgoat,點擊GO,再返回查看:
看到出現了一些數據,將其發送到repeater:
根據執行SQL
SELECT * FROM weather_data WHERE station = 101
註入SQL
SELECT * FROM weather_data WHERE station = 101 or 1=1
就修改這個station的位置為 101 or 1=1
5、命令註入 Command Injection
同上面一樣,也沒有輸入框,所以還是用找出其命令再註入的辦法,用上次用到的burpsuit:
同剛才一樣抓包:
在提交的位置添加&netstat -a
命令,第一個引號用來封閉前一個命令,最後一個用來閉合結尾的引號。
點擊 go 之後實驗成功:
6、數據後門 Database Backdoors
要求實現多條SQL語句註入,對於這樣有輸入框的,破解的方法就比較簡單了
7、LAB SQL injection
分析:由於輸入項只有一個,也就是密碼,但是密碼應該是密文傳輸,所以我們直接用burpsuit。
抓包,得到:
將GUEST該為永真式,點擊GO 實驗成功:
下面的STEP3,也參照數字註入:
另外兩步 step2 和 step4,由於平臺不同做不了。
所以到目前為止,註入部分就全部完成了:
三、XSS練習
1、跨站腳本釣魚攻擊(Phishing with XSS)
主旨是要我們編寫一個釣魚網站的頁面。
攻擊,將傳來的username和password寫入log文件:
登陸界面,輸入用戶名和密碼:
然後保存至/var/www/html中的lyd.log文件中
2、儲存型XSS(Stored XSS Attakcs)
這是一個擦除輸入的練習。
思路是 發送一個信息,當用戶收到這個信息時,就會觸發在其中的惡意代碼(用腳本語言寫的),從而達到清除cookie的效果。
構造語句<script>alert(document.cookie);</script>
輸入後點擊20145309
彈窗說明可清除cookies
完成該攻擊
四、XSCF練習
1、Cross Site Request Forgery (CSRF)
你的目標是發一個email給newsgroup,內容包括一個有惡意URL請求的圖片。URL要指向“attack”(包含參數“Screen”和“Menu”,還有一個額外參數“transferFunds”)。當收到含有CSRF頁面的郵件時,就會執行transferFunds
2、CSRF Prompt By-pass
網頁上的手動發起請求的操作,是通過HTML+JavaScript向服務器請求,在這道題目中,我們需要在文本框中添加兩個語句,一個用於請求用戶轉賬,另一個用於觸發確認界面。
這個實驗的實現跟上個很類似,所以直接這樣完成就行了:
haha
<img src=‘attack?Screen=465&menu=900&transferFunds=5314‘5314 width=‘1‘ height=‘1‘>
<img src=‘attack?Screen=465&menu=900&transferFunds=CONFIRM‘ width=‘1‘ height=‘1‘>
完成:
最後,這一部分的完成情況為:
實驗感想
這次實驗內容包括很多,由於我學藝不精,自己不是很好的獨立完成,在這裏感謝茹翔組長的幫助,幾乎是手把手教了我。
20145309李昊《網絡對抗技術》實驗9 web安全基礎實踐