20192411 2021-2022-2 《網路與系統攻防技術》實驗八實驗報告
學號20192411 2021-2022-2 《網路與系統攻防技術》實驗八實驗報告
1.實驗內容
(1)Web前端HTML
能正常安裝、啟停Apache。理解HTML,理解表單,理解GET與POST方法,編寫一個含有表單的HTML。
(2)Web前端javascipt
理解JavaScript的基本功能,理解DOM。
在(1)的基礎上,編寫JavaScript驗證使用者名稱、密碼的規則。在使用者點選登陸按鈕後回顯“歡迎+輸入的使用者名稱”
嘗試注入攻擊:利用回顯使用者名稱注入HTML及JavaScript。
(3)Web後端:MySQL基礎:正常安裝、啟動MySQL,建庫、建立使用者、修改密碼、建表
(4)Web後端:編寫PHP網頁,連線資料庫,進行使用者認證
(5)最簡單的SQL注入,XSS攻擊測試
(6)安裝Webgoat或類似平臺,並完成SQL注入、XSS、CSRF攻擊。
2.實驗過程
2.1 Web前端HTML
-
首先是安裝apache,因為kali自帶apache,所以只需要直接啟動就可以了。
/etc/init.d/apache2 start
-
啟動之後,可以用status檢視其狀態。
/etc/init.d/apache2 status
可以看到此時正在執行。
-
還可以在瀏覽器輸入本機的IP地址開啟apache的預設網頁,可以看到“It works!”,證明apache服務正在執行。
-
開啟apache服務後,進入/var/www/html目錄,即apache目錄,建立一個html檔案,命名為form_20192411.html,然後編寫含有表單的HTML程式碼。
-
接著在瀏覽器開啟剛剛編寫的檔案(地址為檔案路徑,即/var/www/html/form_20192411.html),就可以看到我們編寫出來的效果。
2.2 Web前端javascipt
-
在2.1的基礎上,編寫JavaScript驗證使用者名稱、密碼的規則,在使用者點選登陸按鈕後回顯“歡迎+輸入的使用者名稱”。
-
因為路徑沒變,所以只需要重新整理剛剛開啟的網頁,然後輸入使用者名稱和密碼。
-
然後點登入,就會出現歡迎20192411。
-
如果使用者名稱或者密碼為空,就會彈出提示。
-
接著嘗試注入攻擊:
<script language="javascript">alert("20192411")</script>
發現還是會正常登入,並且執行了我們注入的程式碼彈出了訊息框。
2.3 Web後端:MySQL基礎
-
首先在kali中啟動mysql服務,命令為:
service mysql start
-
啟動之後就可以進入mysql了,進入的時候需要輸入密碼,命令為:
mysql -u root -p
-
進入mysql後可以檢視資料庫的基本資訊。
show databases;
可以看到有四個資料庫。
-
接著就是建立使用者,用如下命令建立一個登入使用者。
create user 'hzr'@'localhost' identified by '20192411';
然後就可以用新建的使用者登入。
-
然後可以用如下命令修改使用者密碼。
set password for hzr@'localhost'=password('2411');
-
接著建立一個數據庫,然後再一次檢視可以發現多了一個數據庫。
create database db_hzr; show databases;
-
然後使用剛建的資料庫:
use db_hzr
-
接著就可以進行建表操作。
create table login(username VARCHAR(20),password VARCHAR(20));
-
再往表中插入一條資料
insert into login values('20192411hzr','123456');
-
插入後再用查詢語句檢視新建的login表
select * from login;
2.4 Web後端:編寫PHP網頁,連線資料庫,進行使用者認證
-
利用剛剛編寫好的前端,接著編寫後端的php網頁。依舊在剛剛編寫的html檔案所在目錄下新建一個php檔案,然後編寫程式碼。
可以看到前面連線了資料庫db_hzr,接著在資料庫中查詢,對使用者進行了認證。
-
然後在剛才的html檔案中,將form的action屬性改為php的檔名,即login.php。
-
之後開啟網站
127.0.0.1/form_20192411.html
,然後輸入使用者名稱和密碼登入。如果沒有匹配的資料資訊,則跳轉登入失敗:
如果匹配則跳轉登入成功:
2.5最簡單的SQL注入,XSS攻擊測試
-
首先是SQL注入。在剛剛的網站中,使用者名稱欄輸入
' or 1=1#
,接著隨便輸入密碼,然後登入,就可以成功跳轉到登入成功的頁面。可以看到成功跳轉到登入成功的頁面了。
-
剛剛在使用者名稱中輸入的
' or 1=1#
和後端程式碼中的查詢語句SELECT * FROM login where username='$uname' and password='$pwd';
結合起來就變成了SELECT * FROM login where username='' or 1=1#' and password='$pwd';
。可以發現後面密碼的查詢被註釋掉了,而前面的or 1=1就讓這個條件恆成立,所以不管密碼輸入什麼都不會影響,1=1這個條件就能讓頁面跳轉到登入成功的頁面。 -
之後是XSS攻擊。在使用者名稱欄中輸入如下內容:
<script>alert('hack')</script>
2.6 安裝Webgoat或類似平臺,並完成SQL注入、XSS、CSRF攻擊。
-
首先在Github上下載webgoat的jar包,我選擇的版本是8.1.0。Releases · WebGoat/WebGoat · GitHub
-
下載下來後,在jar包所在目錄下開啟cmd安裝並執行webgoat
java -jar webgoat-server-8.1.0.jar
-
然後用
http://localhost:8080/WebGoat
開啟webgoat登入介面,然後先註冊一個賬號。 -
登入進去後,首先是SQL注入部分。選擇Injection中的SQL Injection (intro),然後我選擇的是11頁的題。
-
這題是通過字元型SQL注入破壞資料機密性的,即檢視非授權資料。利用邏輯OR,Name框填1,TAN框填
1' or '1'='1
。 -
然後是XSS攻擊。選擇Cross Site Scripting(XSS)。然後我選擇的是第七頁的題。
-
這題要求用alert()或者console.log()嘗試哪裡有XSS,先按下Purchase,看看哪個輸入是會回顯的。
可以看到電話框的輸入是會回顯的,然後在這個輸入框中輸入:
<script>alert('page 7')</script>
接著再Purchase,會發現成功彈出'page7'。
題目就完成了。
-
接著是CSRF攻擊,選擇Cross-Site Request Forgeries。
-
然後選擇第4頁的題,右鍵第一個評論框,點選檢查,然後將該處的HTML程式碼複製出來。
-
新建一個HTML檔案,貼上剛剛複製的form,並補齊其他標籤:
<html> <body> <form class="attack-form" accept-charset="UNKNOWN" id="csrf-review" method="POST" name="review-form" successcallback="" action="http://localhost:8080/WebGoat/csrf/review"> <input class="form-control" id="reviewText" name="reviewText" value="20192411" type="text"> <input class="form-control" id="reviewStars" name="stars" type="text"> <input type="hidden" name="validateReq" value="2aa14227b9a13d0bede0388a7fba9aa9"> <input type="submit" name="submit" value="Submit review"> </form> </body> </html>
-
然後開啟新建的HTML檔案,就會看到:
-
然後點選Submit review,就可以完成了
3.問題及解決方案
- 問題1:kali安裝webgoat的時候,進入頁面然後登入後總是無法顯示。
- 問題1解決方案:一開始認為是版本問題,新老版本試了幾次發現都不行,最後改用Windows安裝webgoat進行實驗。
4.學習感悟、思考等
這次實驗是Web安全,即進行了一些跟Web相關的實踐,通過這次實驗我學到了很多關於Web的攻擊方式。包括前端和後端,對之前沒接觸過的XSS和CSRF攻擊也有了新的認識。通過網上查詢資料,最終成功完成了這一次實驗。這次實驗也是這學期網路攻防課最後一次實驗了,感謝王老師一學期的講解與指導,也感謝劉老師和同學們的幫助。