1. 程式人生 > >20155201 網絡攻防技術 實驗八 Web基礎

20155201 網絡攻防技術 實驗八 Web基礎

修改密碼 註釋符 括號 命令註入 pda sql IT 攻防 哪裏

20155201 網絡攻防技術 實驗八 Web基礎

一、實踐內容

  • Web前端HTML,能正常安裝、啟停Apache。理解HTML,理解表單,理解GET與POST方法,編寫一個含有表單的HTML。
  • Web前端javascipt,理解JavaScript的基本功能,理解DOM。編寫JavaScript驗證用戶名、密碼的規則。
  • Web後端:MySQL基礎:正常安裝、啟動MySQL,建庫、創建用戶、修改密碼、建表。
  • Web後端:編寫PHP網頁,連接數據庫,進行用戶認證。
  • 最簡單的SQL註入,XSS攻擊測試;功能描述:用戶能登陸,登陸用戶名密碼保存在數據庫中,登陸成功顯示歡迎頁面。

二、報告內容:

1. 基礎問題回答

1)什麽是表單?

表單在網頁中主要負責數據采集功能。一個表單有三個基本組成部分: 表單標簽:這裏面包含了處理表單數據所用CGI程序的URL以及數據提交到服務器的方法。
表單域:包含了文本框、密碼框、隱藏域、多行文本框、復選框、單選框、下拉選擇框和文件上傳框等。 表單按鈕:包括提交按鈕、復位按鈕和一般按鈕;用於將數據傳送到服務器上的CGI腳本或者取消輸入,還可以用表單按鈕來控制其他定義了處理腳本的處理工作。

2)瀏覽器可以解析運行什麽語言?

HTML,XML,Python,PHP,JavaScript,ASP等腳本語言。

3)WebServer支持哪些動態語言

JavaScript、ASP、PHP、Ruby等腳本語言。

2. 實踐總結與體會

這次實驗按照上一屆學長的博客來做,直接粘貼代碼還出了點問題,花了點時間結果發現是一個很簡單的代碼的錯誤,改正了之後一切都還比較順利,其他問題同學們都有解決辦法;這次實驗準備的部分包含了上個學期網絡安全編程基礎的Java Web部分,代碼還是需要回憶一下子才能搞定,完成全部內容花了點時間,但更重要的是對數據庫知識的回憶、對攻擊部分的了解,解析,感覺收獲很多。

3. 實踐過程記錄

  1. Web前端HTML
  2. Web前端javascipt
  3. Web後端Mysql基礎
  4. Web後端PHP
  5. SQL註入攻擊、XSS攻擊測試

Web前端:HTML

  1. 我們的Web開發是基於Apache服務器進行的,直接用指令sudo apt-get install apache2
    安裝,現在kali應該是裝好了apache的。可以先使用netstat -tupln |grep 80指令查看80端口被哪些進程占用,如果有占用記得kill掉~使用指令apachectl start打開Apache服務
    • 技術分享圖片
    • 技術分享圖片
  2. 在Firefox中輸入127.0.0.1:80,是Apache的默認網頁,服務器正常開啟
    • 技術分享圖片
    • 技術分享圖片
  3. 之後cd /var/www/html進入到Apache的工作目錄下,vi test1.html新建一個含有表單的html文件,我們常用的登錄頁面一般就是用表單向後臺提交數據,所以可以編寫一個簡單的登錄頁面,代碼如下:

    <html>  
    <head>  
    <title>test</title>   
    </head> 
    <body>           
    <table>  
        <form method ="POST" action="#" name="frmLogin"  >  
        <tr>  
        <td>username: </td>  
        <td><input type="text" name="username" value="Your name" size="20" maxlength="20" /></td>  
        <td> </td>  
        <td> </td>  
        </tr>  
        <tr>  
        <td>password:</td>  
        <td><input type="password" name="password" value="Your password" size="20" maxlength="20" /></td>  
        <td> </td>  
        <td> </td>  
        </tr>  
        <tr>  
        <td><input type="checkbox" name="zlogin" value="1">auto-Login</td>  
        </tr>     
        <table>  
        <tr>  
            <td><input type="submit" name="login" value="Login" /></td>  
            <td><input type="reset" name="rs" value="Reset" /></td>  
        </tr>
        </table>    
        </form> 
    </table>   
    </body>  
    </html>  
    • 打開看下效果:
    • 技術分享圖片
  4. 這裏的提交方法methodPOST,method屬性分Post和Get兩種,其主要區別有以下幾方面:
    • Get是用來從服務器上獲得數據,而Post是用來向服務器上傳遞數據
    • Get是不安全的,因為在傳輸過程,數據被放在請求的URL中,而如今現有的很多服務器會將URL記錄到日誌文件中,然後存儲在某個地方,這樣就可能會泄露信息。Post的所有操作對用戶來說都是不可見的。
    • Get傳輸的數據量小,Post的傳輸量大,所以在上傳文件只能使用Post;

Web前端javascipt

  1. 我們可以使用JavaScript來編寫一個驗證用戶名、密碼的規則,直接在之前的代碼上進行修改,重命名為login_test.html,代碼如下所示:

    <html>  
    <head>  
    <title>test</title>   
    </head> 
    <body>           
    <table>  
        <form method ="POST" action="login.php" name="frmLogin"  >  
        <tr>  
        <td>user</td>  
        <td><input type="text" name="username" value="Your name" size="20" onfocus="if (this.value==‘Your name‘) this.value=‘‘;" /></td>  
        <td> </td>  
        <td> </td>  
        </tr>  
        <tr>  
        <td>password</td>  
    <td><input type="password" name="password" value="Your password" size="20" maxlength="20" onfocus="if (this.value==‘Your password‘) this.value=‘‘;" /></td>  
        <td> </td>  
        <td> </td>  
        </tr>  
        <tr>  
        <td><input type="checkbox" name="zlogin" value="1">auto login</td>  
        </tr>     
        <table>  
        <tr>  
            <td><input type="submit" name="login" value="login" onClick="return validateLogin()"/></td>  
            <td><input type="reset" name="rs" value="reset" /></td>  
            </tr>
        </table>    
        </form> 
    </table>   
    
    <script language="javascript">  
        function validateLogin(){  
            var sUserName = document.frmLogin.username.value ;  
            var sPassword = document.frmLogin.password.value ;    
            if ((sUserName =="") || (sUserName=="Your name")){  
            alert("user name");  
            return false ;  
            }  
    
            if ((sPassword =="") || (sPassword=="Your password")){  
            alert("password!");  
            return false ;  
            }  
    
        }   
    </script>  
    </body>  
    </html>  
  2. 如果輸入的用戶名或者密碼為空時,就彈出相應的對話框,然後在點擊登錄按鈕時調用執行一遍這個函數,可以打開看看效果:
    • 技術分享圖片

Web後端:MySQL基礎

  1. 先輸入/etc/init.d/mysql start指令開啟mysql服務,輸入mysql -u root -p,並根據提示輸入密碼,默認密碼為password,進入MySQL,註意:在MySQL中輸入命令後面都要帶一個分號作為命令結束符:

  2. 輸入use mysql;,選擇mysql數據庫;輸入update user set password=PASSWORD("新密碼") where user=‘root‘;,修改密碼;輸入flush privileges;,更新權限
    • 技術分享圖片
  3. 退出數據庫,用新密碼重新登錄
  4. 先使用create database 庫名;建立一個數據庫;使用show databases;查看存在的數據庫;使用use 庫名;使用我們創建的數據庫:
    • 技術分享圖片
  5. 使用create table 表名 (字段設定列表);建立數據表,數據表是數據庫中一個非常重要的對象,一個數據庫中可能包含若幹個數據表;使用show tables;查看存在的數據表:
    • 技術分享圖片
  6. 使用insert into 表名 values(‘值1‘,‘值2‘,‘值3‘...);插入數據;使用select * from 表名;查詢表中的數據:
    • 技術分享圖片
  7. 在MySQL中增加新用戶,使用grant select,insert,update,delete on 數據庫.* to 用戶名@登錄主機(可以是localhost,也可以是遠程登錄方式的IP) identified by "密碼";指令,這句話的意思是將對某數據庫的所有表的select,insert,update,delete權限授予某ip登錄的某用戶。如圖所示,增加新用戶之後,退出,重新使用新用戶名和密碼進行登錄,登錄成功說明增加新用戶成功:
    • 技術分享圖片
    • 技術分享圖片

Web後端:PHP基礎

PHP是一種通用開源腳本語言,語法吸收了C語言、Java和Perl的特點,主要適用於Web開發領域。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。

  1. /var/www/html目錄下新建一個PHP測試文件,簡單了解一下它的一些語法:vi lzw_test.php

    <?php
    echo ($_GET["a"]);
    include($_GET["a"]);
    echo "This is lxm php test page!<br>";
    ?>
  2. 在瀏覽器網址欄中輸入localhost:80/lzw_test.php?a=/etc/passwd,可看到/etc/passwd文件的內容
    • 技術分享圖片
  3. 利用PHP和MySQL結合之前編的登錄網頁進行簡單的用戶身份認證,這裏可以參考老師給的代碼編寫login.php,代碼如下所示!!註意這裏跟很多學長的代碼相比有修改,不然後續是進行不下去的!!經多位同學試驗,這樣操作是可行的。

    <?php
    $uname=$_POST["username"];
    $pwd=$_POST["password"];
    echo $uname;
    $query_str="SELECT * FROM users where username=‘$uname‘ and password=‘$pwd‘;";
    $mysqli = new mysqli("127.0.0.1", "lzw", "970828", "WLDK_DB");
    
    /* check connection */
    if ($mysqli->connect_errno) {
        printf("Connect failed: %s\n", $mysqli->connect_error);
        exit();
    }
    echo "connection ok!";
    /* Select queries return a resultset */
    if ($result = $mysqli->multi_query($query_str)) {
        if ($result->num_rows > 0 ){
                echo "<br> Welcome login Mr/Mrs:{$uname} <br> ";
        } 
        else {
            echo "<br> login failed!!!! <br> " ; }
        /* free result set */
        $result->close();
    }
    $mysqli->close();
    ?>
    • 第一行中的方法修改成POST,無論是GET也行,POST也好,切記與html文件中的method一致。
    • 第五行中users是我自己的表名,根據實際修改
    • 第五行中原為username=‘{$uname}‘ and password=‘{$pwd}‘;,切記把大括號刪掉,其實想想就知道我們自己在數據庫裏select的時候哪裏來的大括號?
    • 第六行的"lzw"是我sql的另一個非root用戶,如果非要用root登錄會提示access denied970828lzw用戶的密碼,WLDK_DB是這個用戶裏面的一個數據庫database。
    • 技術分享圖片
  4. 將之前編的登錄網頁的login_test.html代碼中form的action屬性由#改成login.php,即登錄後跳轉到login.php,再在火狐瀏覽器中輸入localhost:80/login_test.html訪問自己的登錄頁面

  5. 輸入表中的username和password,登錄進行用戶認證。
    • 如果是成功的,是這樣的歡迎界面:
    • 技術分享圖片

    • 如果連接庫失敗失敗,是這樣的,解決辦法是新建用戶,剛說過啦
    • 技術分享圖片

    • 如果庫、表和字段對應沒有搞清楚,很容易認證失敗,就是這樣子的
    • 技術分享圖片

SQL註入攻擊,XSS攻擊

SQL註入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來說,它是利用現有應用程序,將(惡意的)SQL命令註入到後臺數據庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。

  1. 在用戶名輸入框中輸入‘ or 1=1#,密碼隨便輸入,是可以登陸成功的。
    • 技術分享圖片

    • 原理是這樣的,輸入的用戶名和我們的代碼中select語句組合起來變成了select * from users where username=‘‘ or 1=1#‘ and password=‘‘,#相當於註釋符,會把後面的內容都註釋掉,而1=1是永真式,所以這個條件永遠成立,所以能夠成功登陸,這個信息系統安全之前講過~~原來實踐起來是這樣子
  2. 我們還可以通過SQL註入將用戶名和密碼保存在數據庫中,但是得修改一下之前的代碼,因為我們之前編的代碼中if ($result = $mysqli->query($query_str))這條判斷語句不允許多條sql語句執行,所以將它改成if ($result = $mysqli->multi_query($query_str))便能實現執行多個sql語句
  3. 在用戶名輸入框中輸入‘;insert into users values(‘20155313‘,‘961222‘);#,拆開來看就是SELECT * FROM users WHERE username=‘‘;insert into users values(‘20155313‘,‘961222‘);,接著登錄,會提示登錄失敗,失敗又怎樣??還不是被窩insert了哈哈哈:
    • 技術分享圖片
  4. 記得把代碼中sql語句執行的代碼改回去,不然又要失敗啦。。if ($result = $mysqli->query($query_str)),輸入新的用戶名和密碼,登錄成功
    • 技術分享圖片
    • 技術分享圖片

XSS攻擊:跨站腳本攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆。故將跨站腳本攻擊縮寫為XSS。XSS是一種經常出現在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。比如這些代碼包括HTML代碼和客戶端腳本。攻擊者利用XSS漏洞旁路掉訪問控制——例如同源策略(same origin policy)。這種類型的漏洞由於被駭客用來編寫危害性更大的phishing攻擊而變得廣為人知。對於跨站腳本攻擊,黑客界共識是:跨站腳本攻擊是新型的“緩沖區溢出攻擊“,而JavaScript是新型的“ShellCode”。

  1. 將一張可愛的圖片存入/var/www/html目錄
  2. 在用戶名輸入框中輸入<img src="mieba.jpeg" />balabala</a>讀取/var/www/html目錄下的圖片:
    • 技術分享圖片

    • 技術分享圖片

20155201 網絡攻防技術 實驗八 Web基礎