1. 程式人生 > ># 2017-2018-2 20155319 『網絡對抗技術』Exp8:Web基礎

# 2017-2018-2 20155319 『網絡對抗技術』Exp8:Web基礎

ces 屬性 網絡攻擊 sql註入 service 標記語言 名稱 cas phi

2017-2018-2 20155319 『網絡對抗技術』Exp8:Web基礎

一.原理與實踐說明

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分)

2.基礎問題回答

(1)什麽是表單?

  • 表單在網頁中主要負責數據采集功能。一個表單有三個基本組成部分:
    表單標簽:這裏面包含了處理表單數據所用CGI程序的URL以及數據提交到服務器的方法。

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

  • 支持HTML(超文本標記語言)、XML(可擴展標記語言)以及Python、PHP、JavaScript、ASP等眾多腳本語言。

(3)WebServer支持哪些動態語言?

  • 最常用的三種動態網頁語言有ASP(ActiveServerPages),JSP(JavaServerPages),PHP(HypertextPreprocessor)。

二.實踐過程記錄

1.Web前端:HTML

1.使用netstat -aptn查看80端口是否被占用,發現我的電腦的80端口未被占用,也可以把這些用不到的進程先kill掉。使用service apache2 start命令打開Apache服務。查看端口是否被apache使用:
技術分享圖片

此時在瀏覽器輸入127.0.0.1,可以看見上次實驗克隆的網址。

2.使用cd /var/www/html進入Apache目錄下,新建一個簡單的含有表單的html文件vi login.html
技術分享圖片

  • login.html:

    <html>
    <head>
    <title>Login</title>
    <body bgcolor=‘#FFFFCC‘>
    </head>
    <body>
    <h2>Welcome</h2>
        <form action="login" method="post">
        <td align="left"> username:</td>
        <input placeholder="E-mail/Phone" name="Name" class="user" type="email">
            <br>
            </br>
        <td align="left">password:</td>
            <input  placeholder="Password" name="Password" class="pass" type="password">
            <br>
            </br>
            <input type="submit" value="Login">
        </form>
    </body>
    </html>

    在瀏覽器中打開:
    技術分享圖片

點擊登錄:
技術分享圖片

2.Web前端:javascipt

1.在原有login.html基礎上,可以添加一段JavaScript代碼,以完成對用戶是否填寫郵箱和密碼的判斷。修改後的logintest.html如下所示:

<html>
<head>
<title>Login</title>
<body bgcolor=‘#FFFFCC‘>
</head>
<body>
    <h2>Welcome</h2>
            <form action="rhl.php" method="POST" name="formtext">
        <td align="left"> username:</td>
        <input placeholder="E-mail/Phone" name="username" type="text" value="Your name" onfocus="if (this.value==‘Your name‘) this.value=‘‘;" />
            <br>
            </br>
        <td align="left">password:</td>
            <input  placeholder="Password" name="password" type="password" value="Your password" onfocus="if (this.value==‘Your password‘) this.value=‘‘;" />
            <br>
            </br>
            <input type="submit" value="Login" onClick="return Login()" />
        </form>
<script language="javascript">
    function Login(){
        var sUserName = document.formtext.username.value ;
        var sPassword = document.formtext.password.value ;
    if((sUserName=="root") && (sPassword=="admin")){
            alert("success");}
        if ((sUserName =="") || (sUserName=="Your name")){
        alert("user name");
        return false ;
        }

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

    }
</script>
</body>
</html>

2.在瀏覽器訪問127.0.0.1:80/logintest.html,如果用戶郵箱或密碼未填寫就提交,網頁會報提示:
技術分享圖片

登錄成功會顯示success:
技術分享圖片

3.Web後端:MySQL基礎

1.輸入/etc/init.d/mysql start開啟MySQL服務。因為首次登錄不知道密碼所以上網找了一種方法:先打開/etc/mysql找到mysql的文件夾,選中50-server.cnf在下面一行加入skip-grant-tables並保存退出,繼而重新啟動即可跳過輸密碼的環節。
技術分享圖片

技術分享圖片

2.輸入use mysql;,選擇mysql數據庫;輸入update user set password=PASSWORD("新密碼") where user=‘root‘;,修改密碼;輸入flush privileges;,更新權限
技術分享圖片

技術分享圖片

3.退出數據庫,用新密碼重新登錄

4.使用create database 數據庫名稱;建立數據庫使用show databases;查看存在的數據庫:
技術分享圖片

5.使用use 庫名;使用我們創建的數據庫,使用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登錄的某用戶。如圖所示,增加新用戶之後,退出,重新使用新用戶名和密碼進行登錄,登錄成功說明增加新用戶成功:
技術分享圖片

技術分享圖片

4.Web後端:PHP基礎

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

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

<?php
echo ($_GET["a"]);
include($_GET["a"]);
echo "This is rhl php page!<br>";
?>

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

3.利用PHP和MySQL結合之前編的登錄網頁進行簡單的用戶身份認證,這裏可以參考老師給的代碼編寫rhl.php,代碼及配置如下所示:
技術分享圖片

<?php
$uname=$_POST["username"];
$pwd=$_POST["password"];
echo $uname;
$query_str="SELECT * FROM loginlist where username=‘$uname‘ and password=‘$pwd‘;";
$mysqli = new mysqli("127.0.0.1", "rhl", "toor", "rhl");

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

技術分享圖片

4.將之前編的登錄網頁的logintest.html代碼中form的action屬性由#改成rhl.php,即登錄後跳轉到rhl.php,再在火狐瀏覽器中輸入localhost:80/logintest.html訪問自己的登錄頁面
成功界面:
技術分享圖片

失敗界面:
技術分享圖片

5.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是永真式,所以這個條件永遠成立/

  • 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="aa.jpeg" />讀取/var/www/html目錄下的圖片:
技術分享圖片

三、實踐總結及體會

這次實驗一開始機器沒有默認裝PHP,發現後重裝,然後mysql又出現了問題!最後換了個虛擬機順利完成。這次實驗運用到JAVA、網頁制作等知識,重溫了以前的知識。同時利用sql註入、XSS攻擊等網絡攻擊,進行網頁的攻擊,雖然過程很是艱難,但做出來還是特別開心!

# 2017-2018-2 20155319 『網絡對抗技術』Exp8:Web基礎