1. 程式人生 > >20155330 《網絡對抗》 Exp8 Web基礎

20155330 《網絡對抗》 Exp8 Web基礎

== 右鍵 ip地址 情況 安裝 eth 進入 script function

20155330 《網絡對抗》 Exp8 Web基礎

實驗問題回答

  1. 什麽是表單

    • 表單可以收集用戶的信息和反饋意見,是網站管理者與瀏覽者之間溝通的橋梁。

    • 一個表單有三個基本組成部分

      • 表單標簽

      • 表單域:包含了文本框、密碼框、隱藏域、多行文本框、復選框、單選框、下拉選擇框和文件上傳框等

      • 表單按鈕:包括提交按鈕、復位按鈕和一般按鈕.

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

    • 超文本標記語言:HTML
    • 可擴展標記語言:XML
    • 腳本語言:ASP、PHP、Script、JavaScript、VBScript、Perl、Python、ColdFusion、Java、JSP等。
  3. WebServer支持哪些動態語言
    • PHP語言、JSP語言。

實驗總結與體會

這次實驗過程中遇到了不少問題,但都解決了,感覺很開心,特別是最後的圖片顯示出來了。通過實驗也感受到對MySQL數據庫的使用比較不熟練,經常會忘記在命令後面加分號啊什麽的。從這次實驗也初步了解了一些web攻擊的基礎知識,在web開發時要註意避免常見的攻擊手段。

實踐過程記錄

(一)環境配置

  • 使用apache -v查看本機安裝Apache的版本狀態。

    技術分享圖片
  • 使用netstat -aptn查看端口占用情況。

    技術分享圖片
  • 使用vi /etc/apache2/ports.conf對apache所要占用的端口進行設置,這裏把偵聽端口改為了自己的學號5330。

    技術分享圖片
    技術分享圖片
  • 通過systemctl start apache2

    開啟Apach。

    技術分享圖片
  • 再次使用netstat -aptn查看端口占用(在這之前kill掉了占用其他端口的進程),發現apache2占用5330端口。

    技術分享圖片
  • 測試apache是否正常工作:在kali的firefox瀏覽器上輸入127.0.0.1:5330localhost:5330(這裏的端口號為/etc/apache2/ports.conf下設置的Apache監聽端口號,我設置為了自己的學號。localhost指kali的IP地址(這裏我用了回環地址同樣可以測試))。測試結果如下:

    技術分享圖片

    (二)網頁編寫

    前端編程

  • 使用以下命令在/var/www/html目錄下編輯測試網頁test.html

    cd /var/www/html
    touch test.html
    vi test.html
    • 網頁代碼

    技術分享圖片

  • firefox瀏覽器中輸入網址127.0.0.1:5330/test.html打開該網頁

    技術分享圖片
  • 點擊login頁面發生跳轉,但跳轉失敗。原因是還沒有編寫php後端文件。

    技術分享圖片

    JavaScript

  • 對網頁代碼進行改進,加入JavaScript語句。

    技術分享圖片
    • 輸入用戶名,不輸入密碼。提示輸入密碼。

    技術分享圖片

    • 輸入密碼,不輸入用戶名。提示輸入用戶名。
    技術分享圖片
    • 二者均輸入。成功。

    技術分享圖片

    PHP後端

  • /var/www/html目錄下編輯測試php文件login.php

    <?php
    echo ($_GET["a"]);
    include($_GET["a"]);
    echo "This is lxm php test page!<br>";
    ?>
  • 在瀏覽器打開127.0.0.1:5330/login.php?a=/etc/passwd可看到/etc/passwd文件的內容

    技術分享圖片

    (三)MySQL基礎

  • 使用/etc/init.d/mysql start命令開啟sql服務。

    技術分享圖片
  • 輸入mysql -u root –p,並根據提示輸入密碼(默認密碼為p@ssw0rd),進入MySQL.

    技術分享圖片
  • 輸入show databases;,查看基本信息

    技術分享圖片
  • 更改MySQL用戶密碼可以通過如下方式:
    • 輸入use mysql;選擇mysql數據庫;
    • 輸入select user, password, host from user;,mysql庫中的user表中存儲著用戶名、密碼與權限;
    • 輸入UPDATE user SET password=PASSWORD("新密碼") WHERE user=‘root‘;
    • 輸入flush privileges;更新權限;
    • 輸入quit退出。
  • 重新輸入mysql -u root –p,輸入密碼檢測新密碼能否成功使用,登陸成功。

    技術分享圖片
  • 在Mysql中建庫建表
    • create database zy; 建立一個數據庫
    • use zy;進入數據庫
      技術分享圖片
    • create table zy (username VARCHAR(20),password VARCHAR(20));建立一個數據表
    • insert into zy values(‘zy‘,‘5330‘);添加數據庫的信息
      技術分享圖片
    • select * from zy;查看數據庫中內容

      技術分享圖片

  • 新建用戶:grant select,insert,update,delete on 數據庫.* to 用戶名@localhost identified by "密碼";將對某數據庫的所有表的select,insert,update,delete權限授予某用戶。

    技術分享圖片
  • 退出後,輸入mysql -u 用戶名 –p登錄。成功。

    技術分享圖片

    (四)php+mysql實現登錄網頁編寫

  • 在/var/www/html文件夾下編輯test2.html

    <html> 
    <html>  
    <head>  
    <title>test2</title>   
    </head> 
    <body>
    <form name="login" method="POST" action="login.php">
    <table>
    <tr><td>username:</td><td><input type="text" name="username" onfocus="if (this.value==‘Your name‘) this.value=‘‘;" /></td></tr>
    <tr><td>password:</td><td><input type="password" name="userpwd" onfocus="if (this.value==‘Your password‘) this.value=‘‘;" /></td></tr>
    </table>
    <input type="submit" value="login" onClick="return validateLogin()"/> <input type="reset" value="reset">
    </form>             
    
    <script language="javascript">  
        function validateLogin(){  
            var sUserName = document.login.username.value ;  
            var sPassword = document.login.password.value ;    
            if ((sUserName =="") || (sUserName=="Your name")){  
                alert("user name");  
                return false ;  
            }  
    
            if ((sPassword =="") || (sPassword=="Your password")){  
                alert("password!");  
                return false ;  
            }  
    
        }   
    </script>  
    </body>  
    </html> 
  • 在同樣的目錄下編輯login.php,通過php實現對數據庫的連接
    技術分享圖片
  • firefox瀏覽器中輸入127.0.0.1:5330/test2.html,就可以訪問自己的登陸頁面啦

    技術分享圖片

  • 在登錄頁面中輸入數據庫中存有的用戶名和密碼並點擊提交進行用戶認證登錄成功,輸入數據庫中沒有的就會認證失敗

    技術分享圖片

  • 登陸成功。

    技術分享圖片

遇到的問題

  • 在登錄跳轉過程中頁面顯示以下信息:
    技術分享圖片
  • 最後發現是php文件中的$mysqli = new mysqli("127.0.0.1", "zy", "123456", "zy");語句裏的值有問題。經過更改後成功登陸。第一個zy對應的是MySQL的用戶名,123456是用戶密碼,第二個zy是所要使用的數據庫名。

    (五)SQL註入

  • 這個漏洞是由語法造成的漏洞,接下來對剛剛自己建立的登錄網站進行註入。

  • 構造SQL註入語句:在用戶名輸入框中輸入‘ or 1=1#,密碼隨便輸入,此時合成後的SQL查詢語句為select * from users where username=‘‘ or 1=1#‘ and password=m‘‘
    即以下的兩句sql語句等價:

    select * from users where username=‘‘ or 1=1#‘ and password=‘‘

    select * from users where username=‘‘ or 1=1

  • “#”號的作用是註釋掉後面的語句,而1=1作為永真式表示永遠是都是成立的,即where子句總是為真,所以能夠成功登錄。

    技術分享圖片
    技術分享圖片

通過SQL註入將用戶名和密碼保存在數據庫中

  • 由於之前的代碼中的if ($result = $mysqli->query($query_str))判斷語句不允許多條sql語句執行,所以將它改成if ($result = $mysqli->multi_query($query_str))用於執行多個sql語句。
  • 在用戶名輸入框中輸入‘;insert into lxmtable values(‘xx‘,‘5330‘,‘1234567890‘);#,拆開來看就是

    SELECT * FROM lxmtable WHERE username=‘‘;

    insert into lxmtable values(‘xx‘,‘5330‘,‘1234567890‘);

    技術分享圖片
  • 查看數據庫中的數據,發現新增了一條xx 5330的數據,說明插入成功

    技術分享圖片
  • 使用插入的用戶名和密碼登錄。

    技術分享圖片

  • 成功。

    技術分享圖片

(六)XSS攻擊

  • 在用戶名輸入框中輸入<img src="22.png" />讀取/var/www/html目錄下的圖片:

    技術分享圖片
    技術分享圖片
    技術分享圖片

遇到的問題

  • 一開始無法顯示圖片

    技術分享圖片
  • 右鍵查看未顯示的圖片出現如下圖所示警告:
    技術分享圖片
  • /var/www/html目錄下通過chmod 755 22.png獲取圖片權限後成功。

    參考文章

  • mysql登錄報錯“Access denied for user ‘root‘@‘localhost‘ (using password: YES”的處理方法
  • 解決問題 “You don‘t have permission to access /index.html on this server.”

20155330 《網絡對抗》 Exp8 Web基礎