2018-2019 2 20165203 《網絡對抗技術》Exp8 Web基礎

2018-2019 2 20165203 《網絡對抗技術》Exp8 Web基礎

實驗要求

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

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

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

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

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

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

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

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

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

課題負責人須要完成:登錄後能夠發貼;會話管理。數據庫

基礎知識問答

(1)什麼是表單

  • 表單就是一種採集數據、傳遞、提交數據的媒介,一般做爲後臺得到用戶數據的重要交互方式。
  • 一般寫在前端,後臺經過表單來獲取用戶輸入的信息,以便進行配對。
  • 一般由標籤、輸入域、填寫提示、操做按鈕等幾部分組成。

(2)瀏覽器能夠解析運行什麼語言。

瀏覽器屬於Web前端,一般能夠識別HTML、CSS和JS語言等。

  • HTML語言咱們就很熟悉了,它是一種超文本標記語言,是網頁製做所必需的一種語言。
  • CSS語言,之前的理解就是一種給html中每種內容的屬性加顏色和樣式的語言,能夠在html中定義,也能夠單獨寫成一個.css文件,在html文本中添加一段引用語句便可。我剛纔說的有點兒大白話了,百度上給咱們的標準語句就是可以對網頁中元素位置的排版進行像素級精確控制,支持幾乎全部的字體字號樣式,擁有對網頁對象和模型樣式編輯的能力。
  • JS語言,乍一說JS,可能一臉懵,其實它就是javascript,它是給咱們的網頁增長動態功能的,好比加一個動態效果(一朵雲飄過等等),或是好比我輸入的數據出了什麼問題,在頁面上給我顯示個什麼東西等等。

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

查了一下資料得知,常見的有3種語言ASP、JSP和PHP。

  • ASP語言,全稱Active Server Pages,動態服務器頁面,可用來建立動態交互式網頁並創建強大的web應用程序。當服務器收到對ASP文件的請求時,它會處理包含在用於構建發送給瀏覽器的HTML網頁文件中的服務器端腳本代碼。
  • JSP語言一種特殊的java語言,加入了一個特殊的引擎,這個引擎將HTTPServlet這個類的一些對象自動進行初始化好讓用戶使用,而用戶不用再去操心前面的工做。
  • PHP語言,Hypertext Preprocessor,超文本預處理器,主要適用於Web開發領域,可以更快地執行動態網頁,並且效率更高。

知識儲備

模塊分類:

  • Web前端
    • 編程言語:html/css/javascript(js)
    • 運行環境:瀏覽器
    • 編程用途:在瀏覽器內部的動態,美觀展現形式
  • Web後端
    • 編程語言:PHP/JSP/.NET...
    • 運行環境:應用服務器/中間件
    • 編程用途:對前端提交的數據進行處理並返回相應的HTML網頁內容
  • 數據庫編程
    • 編程語言:PHP/JSP/.NET相應的庫,SQL語言
    • 運行環境:數據庫服務器
    • 編程用途:基本的數據增、刪、改、查

實踐過程

1.Web前端:HML

  • 首先要判斷Linux中是否已安裝Apache服務器,咱們能夠輸入apachectl -v來查看版本,出現版本號,則證實Linux已安裝Apache。

  • 開啓Apache服務器:輸入service apache2 start打開Apache服務器,若是沒有任何錯誤提示,代表已成功開啓。

  • 輸入命令開啓以後,咱們在瀏覽器中輸入127.0.0.1,若是能夠成功打開Apache的默認網址則證實Apache已經開啓。

  • 進入到/var/www/html也就是Apache目錄下,新建一個簡單的含有表單的html文件simple_form.html的文件。內容以下:
<html>
<head>
<title>CryptoTeam</title>
<!-- Meta tag Keywords -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- Meta tag Keywords -->
</head>

<body>
<style type="text/css">
    body{
             background-image:url("manwei.jpg");
             background-position:center;
    background-repeat:no-repeat;
            }
</style>
<div style="text-align:center;margin-top:120px">
<!--main-->
<!--//header-->
 <h2 align="center"><font size=6>Login</font></h2>
        <center>
        <form action="login" method="post">
    <input placeholder="E-mail or your name" name="Name" class="user" type="email">
    <br>
    </br>
    <input  placeholder="Password" name="Password" class="pass" type="password">
    <br>
    </br>
    <input  type="submit" value="Enter">
          </form>
         </center>
<!--//main-->
</div>
</body>
</html>

在瀏覽器嘗試打開

2.Web前端:javascipt

  • 在原有simple_form.html的基礎上,能夠添加一段javascript代碼,以完成對用戶是否填寫郵箱和密碼的判斷。修改後的login_test.html以下圖所示:
<!-- Meta tag Keywords -->
</head>

<body>
<style type="text/css">
    body{
             background-image:url("manwei.jpg");
             background-position:center;
    background-repeat:no-repeat;
            }
</style>
<div style="text-align:center;margin-top:120px">
<!--main-->
<!--//header-->
 <h2 align="center"><font size=6>Login</font></h2>
        <form action="login" method="post" name="form_login">
    <input placeholder="E-mail" name="Email" 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>
<!--//main-->
</div>

<script language="javascript">  
   function validateLogin(){  
       var sUserName = document.form_login.Email.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>
  • 在瀏覽器訪問file:///var/www/html/login_test.html,也能夠直接打開login_test.html,,若是用戶郵箱或密碼未填寫就提交,網頁會報提示:

3.Web後端:MySOL基礎

  • 開啓MySQL服務器:輸入/etc/init.d/mysql start

  • 輸入mysql -u root -p 使用root權限進入,默認密碼是password:

  • 輸入
update user set password=PASSWORD("新密碼") where user = 'root';

來修改密碼;輸入flush privileges;更新權限

  • 輸入exit退出數據庫,能夠嘗試使用新的密碼登陸。

  • 使用create database 數據庫名稱;創建數據庫。我輸入的是create database xyx;創建了一個名爲xyx的數據庫。

  • 輸入show database;能夠查看存在的數據庫:

  • 輸入use 數據庫名稱;,使用咱們建立的數據庫,即對數據庫作一些編輯操做。

  • 使用create table 表名稱 (列名稱1 數據類型,列名稱2 數據類型,···)建立數據庫中的表,並設置相應字段,如圖所示,我輸入的是create table login_table(username VARCHAR(20),password VARCHAR(20));建立了一個名爲login_table的列表,且表中設置了兩列,分別爲usernamepassword,均存儲VARCHAR數據類型,最大長度爲20

  • 使用show tables;查看錶的基本信息;如圖所示,能夠看到咱們的數據庫xyx中有一個表爲login_table

  • 使用insert into 代表 values('值1','值2','值3',···);,注意值的順序是按照咱們設置的表中列的順序來的。

  • 使用select * from 表名;查詢表中的數據,能夠看到咱們 表已經出現。

  • 在MySQL中增長新用戶,使用grant select,insert,update,delete on 數據庫.* to 用戶名@登陸主機(能夠是localhost,也能夠是遠程登陸方式的IP) identified by "密碼";,意爲對某數據庫中全部表的select,insert,update,delete權限授予某ip登陸的某用戶。

  • 增長新用戶後嘗試使用新用戶名和密碼進行登陸:

登陸成功,說明新用戶增長成功

4. Web後端

  • /var/www/html目錄下新建立一個PHP測試文件phptest.php
<?php
echo ($_GET["a"]);
include($_GET["a"]);
echo "This is my php test page!<br>";
?>
  • 在瀏覽器中輸入localhost:80/phptest.php?a=/etc/passwd,可看到etc/passwd文件的內容:

  • 利用PHP和MySQL,結合前面編寫的登陸網頁進行登陸身份認證,在這裏須要注意了:前面login_test.html的文件中的action部分要與PHP文件的文件名對應,而且在mysqli對象創建的時候,要對應參數(主機號,用戶名,密碼,數據庫名),修改後的login.php代碼以下:
<?php
$uname=$_POST["Email"];
$pwd=$_POST["Password"];
echo $uname;
$query_str="SELECT * FROM login_table where username='$uname' and password='$pwd';";
$mysqli = new mysqli("127.0.0.1", "xiayunxiao", "123456", "xyx");
$query_str1="use xyx;";

/* 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 login!! <br> ";
  } 
  else {
      echo "<br> login failed!!!! <br> " ; }
  /* free result set */
  $result->close();
}
$mysqli->close();
?>
  • 在瀏覽器中輸入127.0.0.1/login_test.html訪問本身的登陸界面。

  • 輸入用戶名和密碼進行認證,成功登陸以下圖所示:

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

1)SQL注入

SQL注入,就是經過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器質性惡意的SQL命令。具體來講,它是利用現有應用程序,將(惡意的)SQL命令注入到後臺數據庫引擎質性的能力,它能夠經過在Web表單中輸入(惡意)SQL語句獲得一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。
  • 在用戶名輸入' or 1=1#,密碼任意輸入,就能夠登陸成功了。

這是由於,咱們輸入的用戶名在數據庫中都會轉換成SQL語句中的select語句,而輸入' 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攻擊而變得廣爲人知。
  • 將我喜歡的spiderman的圖片放在/var/www/html目錄下,在用戶名輸入框輸入<img src="spiderman.jpg" />,密碼任意,就能夠讀取圖片了。

實驗中遇到的問題及解決方法

本次實驗由於本身對於數據庫方面的知識只是java課上接觸點兒皮毛,因此仍是遇到一些問題,但願對你們有所幫助。

Q1:在我輸入127.0.0.1/login.html時,沒法顯示頁面。

A1:遇到這種問題,首先要在網址欄中輸入127.0.0.1看看本身的Apache服務器是否已經打開。第二,看看咱們的網頁名字是否正確,也就是本身的var/www/html目錄下是否存在着這樣一個網頁。我屬於第二種,本身的網頁名字爲login_test.html,哈哈哈哈。

Q2:本身的用戶名和密碼均輸入正確,但老是顯示沒法鏈接數據庫。

A2:這就須要查看本身的login_test.htmllogin.php的對應關係。如圖所示,個人login_test.html的Name中的namelogin.php中的變量unamepwd要對應起來。

Q3:在作SQL注入攻擊時,輸入攻擊語句時,提示只能輸入email

A3:查看本身的login_test.html,在用戶名輸入欄中的type欄中輸入爲email,因此只能識別email,咱們能夠將其改成text,這樣就能識別文本類型了。

實驗感想

本次實驗的過程容易理解,本身編寫一個網頁,而後進行攻擊,並且綜合性比較強,既有劉念老師的網絡安全編程課的知識,也有數據庫的知識,因此,打好基礎很重要,在數據庫方面本身還須要多加練習,另外,感謝同窗們在實驗過程當中對我提供了幫助。但願本身能在從此的實驗中能更加努力。

相關文章
相關標籤/搜索