1. 程式人生 > >2018-2019-2 網絡對抗技術 20165303 Exp 8 Web基礎

2018-2019-2 網絡對抗技術 20165303 Exp 8 Web基礎

lan 不能 查看數據庫 ice 計算機 允許 body 正常 apache目錄

實驗目的

1.本實踐的具體要求有:

(1).Web前端HTML(0.5分)

能正常安裝、啟停Apache。理解HTML,理解表單,理解GET與POST方法,編寫一個含有表單的HTML。

(2).Web前端javascipt(0.5分)

理解JavaScript的基本功能,理解DOM。編寫JavaScript驗證用戶名、密碼的規則。

(3).Web後端:MySQL基礎:正常安裝、啟動MySQL,建庫、創建用戶、修改密碼、建表(0.5分)

(4).Web後端:編寫PHP網頁,連接數據庫,進行用戶認證(1分)

(5).最簡單的SQL註入,XSS攻擊測試(1分)

功能描述:用戶能登陸,登陸用戶名密碼保存在數據庫中,登陸成功顯示歡迎頁面。

課題負責人需要完成:登陸後可以發貼;會話管理。

基礎問題回答

1.什麽是表單
我認為表單就是網頁中用來收集各種信息的模塊,一個表單有三個基本組成部分: 表單標簽:這裏面包含了處理表單數據所用CGI程序的URL以及數據提交到服務器的方法。 表單域:包含了文本框、密碼框、隱藏域、多行文本框、復選框、單選框、下拉選擇框和文件上傳框等。 表單按鈕:包括提交按鈕、復位按鈕和一般按鈕;用於將數據傳送到服務器上的CGI腳本或者取消輸入,還可以用表單按鈕來控制其他定義了處理腳本的處理工作。

2.瀏覽器可以解析運行什麽語言
支持HTML(超文本標記語言)、XML(可擴展標記語言)以及Python、PHP、JavaScript、ASP等眾多腳本語言。C#,C,C++,delphi,ObjC等都可以

3.WebServer支持哪些動態語言
目前為止三種常用的動態語言是ASP,JSP,PHP等
ASP即Active Server Pages,是Microsoft公司開發的服務器端腳本環境,可用來創建動態交互式網頁並建立強大的web應用程序。當服務器收到對ASP文件的請求時,它會處理包含在用於構建發送給瀏覽器的HTML(Hyper Text Markup Language,超文本置標語言)網頁文件中的服務器端腳本代碼。除服務器端腳本代碼外,ASP文件也可以包含文本、HTML(包括相關的客戶端腳本)和com組件調用。
ASP簡單、易於維護 , 是小型頁面應用程序的選擇 ,在使用DCOM (Distributed Component Object Model)和 MTS(Microsoft Transaction Server)的情況下, ASP甚至可以實現中等規模的企業應用程序。

JSP全名為Java Server Pages,中文名叫java服務器頁面,其根本是一個簡化的Servlet設計,它 [1] 是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標準。JSP技術有點類似ASP技術,它是在傳統的網頁HTML(標準通用標記語言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而形成JSP文件,後綴名為(*.jsp)。 用JSP開發的Web應用是跨平臺的,既能在Linux下運行,也能在其他操作系統上運行。
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。

Web前端HTML(0.5分)

  • 我們的kali默認安裝有apach,所以service apache2 start命令打開Apache服務即可,一般默認開啟,不需要啟動
    技術分享圖片

  • 此時在瀏覽器輸入127.0.0.1,如果可以打開Apache的默認網頁,則開啟成功
    技術分享圖片

  • 使用cd /var/www/html進入Apache目錄下,使用命令vi simple_form.html新建一個簡單的含有表單的html文件simple_form.html,內容如下

技術分享圖片

技術分享圖片

  • 在瀏覽器輸入/var/www/html/simple_form.html可以打開剛剛創建的html網頁
    技術分享圖片

2.Web前端:javascipt

我們可以在原有的基礎上可以添加一段JavaScript代碼,以完成對用戶是否填寫郵箱和密碼的判斷,添加後的代碼如下

<html>
<head>
<title>Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>
<style type="text/css">
   body{
       background-image:url("1.png");
       background-position:center;
           background-repeat:no-repeat;
     }
   
</style>

    <h2 align="center">Login</h2>
    <center>
        <form action="login" method="post" name="form_login">
            <input placeholder="E-mail" name="Name" class="user" type="email" onfocus="if (this.value=='Your email') this.value='';" />
            <br>
            </br>
            <input  placeholder="Password" name="Password" class="pass" type="password" onfocus="if (this.value=='Your password') this.value='';"/>
            <br>
            </br>
            <input type="submit" value="Login"  onClick="return validateLogin()"/>
        </form>
    </center>

<script language="javascript">  
    function validateLogin(){  
        var sUserName = document.form_login.Name.value ;  
        var sPassword = document.form_login.Password.value ;    
        if ((sUserName =="") || (sUserName=="Your email")){  
        alert("User Email!");  
        return false ;  
        }  

        if ((sPassword =="") || (sPassword=="Your password")){  
        alert("Password!");  
        return false ;  
        }  

    }   
</script>  

</body>
</html > ```
  • 接著在瀏覽器輸入/var/www/html/login_test.html如果用戶郵箱或密碼未填寫就提交,那麽就會出現如下的畫面
    技術分享圖片

3.Web後端:MySQL基礎

首先輸入/etc/init.d/mysql start開啟MySQL服務
技術分享圖片

  • 在輸入mysql -u root -p使用root權限進入,默認密碼是password,就是這幾個字母
    技術分享圖片
  • 然後輸入show databases;可以查看數據庫基本信息,一定不要忘了輸入分號
    技術分享圖片
  • 再輸入use mysql;選擇使用這個數據庫
    技術分享圖片

  • 在輸入select user, password, host from user;可以查看當前用戶信息
    技術分享圖片

  • 然後輸入你想要修改的密碼可以修改update user set password=PASSWORD("5303") where user=‘root‘;
    技術分享圖片

  • 輸入flush privileges;可以更新權限
    技術分享圖片

  • 這樣密碼就修改完了,可以使用新的密碼登錄了
    技術分享圖片

  • 使用```create database wy; 建立數據庫
    技術分享圖片

  • show databases;可以查看創建的數據庫
    技術分享圖片

  • 使用use wy;使用我們創建的數據庫:
    技術分享圖片

  • 使用create table 表名 (字段設定列表);建立數據庫表,並設置字段基本信息:
    這裏使用的是varchar類型而非char類型,他們的差別如下:
    char類型指定大小後會預分配固定大小,不管是否使用空間都被占用
    varchar類型用多少占多少,只是不能超過括號中指定的上限
    create table login (username VARCHAR(20),password VARCHAR(20));
    技術分享圖片
  • 使用show tables;查看表信息:
    技術分享圖片
  • 使用insert into login value(‘[email protected]‘,‘wy20165303‘);可以插入數據
    技術分享圖片

  • 使用select * from login;查詢表中的數據:
    技術分享圖片

  • grant select,insert,update,delete on 數據庫.* to 用戶名@登錄主機(可以是localhost,也可以是遠程登錄方式的IP) identified by "密碼";指令,這句話的意思是將對某數據庫的所有表的select,insert,update,delete權限授予當前主機localhost登錄的用戶weiyu,5303是登錄密碼
    技術分享圖片

  • 退出後使用新的登錄,登錄成功說明成功增加新用戶
    技術分享圖片

4.Web後端:編寫PHP網頁

  • 在/var/www/html目錄下新建一個PHP測試文件phptest.php
<?php
echo ($_GET["a"]);
include($_GET["a"]);
echo "Hello word! This is my php test page!<br>";
?>
  • 在瀏覽器網址欄中輸入localhost:80/phptest.php,可看到文件的內容:
    技術分享圖片

  • 也可以在瀏覽器網址欄中輸入localhost:80/phptest.php?a=/etc/passwd,可看到/etc/passwd文件的內容:
    技術分享圖片

在瀏覽器中輸入127.0.0.1/login.php,連接成功如下圖,但是由於沒有輸入登錄信息,因此查詢失敗:
技術分享圖片

利用PHP和MySQL,結合之前編寫的登錄網頁進行登錄身份認證,修改後的login.php代碼如下:

<?php
$uname=$_POST["Email"];
$pwd=$_POST["Password"];
echo $uname;
$query_str="SELECT * FROM login where username='$uname' and password='$pwd';";
$mysqli = new mysqli("127.0.0.1", "weiyu", "5303", "wy");
$query_str1="use wy;";

/* 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->query($query_str1))
echo"<br>Success into database!";
echo$uname;
if ($result = $mysqli->query($query_str)) {
    if ($result->num_rows > 0 ){
            echo "<br> {$uname}:Welcome!!! <br> ";
    } 
    else {
                                                            
        echo "<br> login failed!!!! <br> " ; }
    /* free result set */
    $result->close();
}
$mysqli->close();
?>

然後在瀏覽器輸入127.0.0.1/login.html進行登錄,登陸成功後可以看到如下
技術分享圖片

如果輸入錯誤就會顯示登錄失敗
技術分享圖片

5.最簡單的SQL註入,XSS攻擊測試

1.sql註入
SQL註入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來說,它是利用現有應用程序,將(惡意的)SQL命令註入到後臺數據庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。
在用戶名輸入框輸入‘ or 1=1#,密碼任意輸入,可登陸成功:
技術分享圖片
出現這種情況的原因是代碼中的問題select * from users where username=‘‘ or 1=1#‘ and password=‘‘,#相當於註釋符,會把後面的內容都註釋掉,而1=1是永真式,所以這個條件永遠成立,所以不管密碼是否輸入正確,都能夠成功登陸。

2.XSS攻擊
跨站腳本攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆。故將跨站腳本攻擊縮寫為XSS。XSS是一種經常出現在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。比如這些代碼包括HTML代碼和客戶端腳本。攻擊者利用XSS漏洞旁路掉訪問控制——例如同源策略(same origin policy)。這種類型的漏洞由於被駭客用來編寫危害性更大的phishing攻擊而變得廣為人知。
把一張圖片放入到/var/www/html下,在用戶名輸入框輸入<img src="1.jpg" />,密碼隨意,就可以讀取圖片了。
技術分享圖片
技術分享圖片
攻擊成功

實驗中遇到的問題

在實驗中首先遇到的就是數據庫裏面各種用戶名和密碼很容易搞混,導致後面用到的時候死活登錄不上去,所以要認真的縷清數據庫的邏輯關系,到底是用戶名還是創建的庫的名字,以及創建的數據庫裏面的數據,其次就是網頁的制作以及前後端數據的傳輸了,由於我這個網站制作學的不是很好,所以導致前後傳輸數據的時候老是出現錯誤,還有就是登陸的時候老是失敗,搞得很頭疼,最後修改了很多次終於修改好了

實驗總結與體會

這次實驗給我的印象最深的就是你需要用到很多方面的知識,缺一樣都是不可以的,網絡攻防的技術,網頁制作的技術,這是一個綜合性很強的實驗,首先我們學會了很多關於數據庫的創建以及設定的知識,然後就是如何制作一個網站,前臺後臺數據庫,然後把三者聯系起來,接下來就是編寫好代碼之後,進行適當地攻擊,學會了數據庫攻擊中的簡單的攻擊,給我的印象非常深,通過一行代碼就可以實現註入攻擊導致數據庫的權限被打開,這在我們生活中也是會出現的,所以在制作數據庫的時候要想到這些問題,防範這些攻擊

2018-2019-2 網絡對抗技術 20165303 Exp 8 Web基礎