20155330 《網絡對抗》 Exp8 Web基礎

20155330 《網絡對抗》 Exp8 Web基礎

實驗問題回答

  1. 什麼是表單javascript

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

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

      • 表單標籤前端

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

      • 表單按鈕:包括提交按鈕、復位按鈕和通常按鈕.mysql

  2. 瀏覽器能夠解析運行什麼語言web

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

實驗總結與體會

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

實踐過程記錄

(一)環境配置

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

  • 使用netstat -aptn查看端口占用狀況。apache

  • 使用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目錄下的圖片:



遇到的問題

相關文章
相關標籤/搜索