2017-2018-2 20155230《網絡對抗技術》實驗8:Web基礎

實踐過程記錄

一、Web前端HTML

  • 首先用指令sudo apt-get install apache2下載apache,因爲實驗機已經安裝好Apache,這裏就不演示了,對於Apache使用的端口咱們能夠經過sudo vi /etc/apache2/ports.conf指令來進行修改,上次實驗中咱們就是將端口改到了80。
    javascript

  • 使用指令apachectl start打開Apache服務,使用netstat -aptn查看一下端口占用,因爲上次修改了端口文件,因此仍是佔用了80端口
    php

  • 輸入cd ..cd var/www/html進入到Apache的工做目錄下,輸入vi test1.html新建一個含有表單的html,咱們經常使用的登陸頁面通常就是用表單向後臺提交數據,因此能夠編寫一個簡單的登陸頁面,代碼以下
<html>  
<head>  
<meta charset="UTF-8">
<title>test</title>   
</head> 
<body>           
<table>  
    <form method ="POST" action="#" name="frmLogin"  >  
    <tr>  
    <td>用戶名:</td>  
    <td><input type="text" name="username" value="Your name" size="20" maxlength="20" /></td>  
    <td> </td>  
    <td> </td>  
    </tr>  
    <tr>  
    <td>密  碼:</td>  
    <td><input type="password" name="password" value="Your password" size="20" maxlength="20" /></td>  
    <td> </td>  
    <td> </td>  
    </tr>  
    <tr>  
    <td><input type="checkbox" name="zlogin" value="1">自動登陸</td>  
    </tr>     
    <table>  
    <tr>  
        <td><input type="submit" name="login" value="登陸" /></td>  
            <td><input type="reset" name="rs" value="重置" /></td>  
        </tr>
    </table>    
    </form> 
</table>   
</body>  
</html>
  • 選用的method是Post,method屬性分Post和Get兩種,其主要區別有如下幾方面:
    • Get是用來從服務器上得到數據,而Post是用來向服務器上傳遞數據;
    • Get將表單中數據的按照variable=value的形式,添加到action所指向的URL後面,而且二者使用「?」鏈接,而各個變量之間使用「&」鏈接;Post是將表單中的數據放在form的數據體中,按照變量和值相對應的方式,傳遞到action所指向URL;
    • Get是不安全的,由於在傳輸過程,數據被放在請求的URL中,而現在現有的不少服務器、代理服務器或者用戶代理都會將請求URL記錄到日誌文件中,而後放在某個地方,這樣就可能會有一些隱私的信息被第三方看到。另外,用戶也能夠在瀏覽器上直接看到提交的數據,一些系統內部消息將會一同顯示在用戶面前,而Post的全部操做對用戶來講都是不可見的;
    • Get傳輸的數據量小,這主要是由於受URL長度限制,而Post能夠傳輸大量的數據,因此在上傳文件只能使用Post;
    • 使用Post傳輸的數據,能夠經過設置編碼的方式正確轉化中文;而Get傳輸的數據卻沒有變化。

二、Web前端javascipt

  • JavaScript是一種屬於網絡的腳本語言,已經被普遍用於Web應用開發,經常使用來爲網頁添加各式各樣的動態功能,爲用戶提供更流暢美觀的瀏覽效果,一般JavaScript腳本是經過嵌入在HTML中來實現自身的功能的。html

  • DOM是文檔對象模型,DOM能夠以一種獨立於平臺和語言的方式訪問和修改一個文檔的內容和結構,換句話說,這是表示和處理一個HTML或XML文檔的經常使用方法。舉個例子,要改變頁面的某個東西,JavaScript就須要得到對HTML文檔中全部元素進行訪問的入口。這個入口,連同對HTML元素進行添加、移動、改變或移除的方法和屬性,都是經過DOM來得到的。前端

  • 咱們可使用JavaScript來編寫一個驗證用戶名、密碼的規則,直接在以前的代碼上進行修改,從新創建一個html文件名爲login_test.html,代碼以下所示
<html>  
<head>  
<meta charset="UTF-8">
<title>test</title>   
</head> 
<body>           
<table>  
    <form method ="POST" action="#" name="frmLogin"  >  
    <tr>  
    <td>用戶名:</td>  
    <td><input type="text" name="username" value="Your name" size="20" maxlength="20" onfocus="if (this.value=='Your name') this.value='';" /></td>  
    <td> </td>  
    <td> </td>  
    </tr>  
    <tr>  
    <td>密  碼:</td>  
    <td><input type="password" name="password" value="Your password" size="20" maxlength="20" onfocus="if (this.value=='Your password') this.value='';" /></td>  
    <td> </td>  
    <td> </td>  
    </tr>  
    <tr>  
    <td><input type="checkbox" name="zlogin" value="1">自動登陸</td>  
    </tr>     
    <table>  
    <tr>  
        <td><input type="submit" name="login" value="登陸" onClick="return validateLogin()"/></td>  
            <td><input type="reset" name="rs" value="重置" /></td>  
        </tr>
    </table>    
    </form> 
</table>   
 <script language="javascript">  
    function validateLogin(){  
        var sUserName = document.frmLogin.username.value ;  
        var sPassword = document.frmLogin.password.value ;    
        if ((sUserName =="") || (sUserName=="Your name")){  
            alert("請輸入用戶名!");  
            return false ;  
        }  
       
        if ((sPassword =="") || (sPassword=="Your password")){  
            alert("請輸入密碼!");  
            return false ;  
        }  
    
    }   
</script>  
</body>  
</html>
  • 只編了一個驗證的函數,當輸入的用戶名或者密碼爲空時,就彈出相應的對話框,而後在點擊登陸按鈕時調用執行一遍這個函數,能夠打開看看效果

三、Web後端:MySQL基礎

  • 先輸入/etc/init.d/mysql start指令開啓mysql服務,輸入mysql -u root -p,並根據提示輸入密碼,默認密碼爲password,進入MySQL,注意:在MySQL中輸入命令後面都要帶一個分號做爲命令結束符
    java

  • 咱們能夠對密碼進行修改:輸入use mysql;,選擇mysql數據庫;輸入update user set password=PASSWORD("新密碼") where user='root';,修改密碼;輸入flush privileges;,更新權限
    mysql

  • 接着輸入quit退出MySQL,從新進入,使用新密碼登陸成功,說明修改爲功web

  • 這個部分跟着學長的博客作完後本身在嘗試的時候有發現這個密碼隨意輸入什麼都能進入mysql,在百度以後瞭解,mysql內默認有一個權限,就是若是從本地登錄Mysql的root用戶就不會進行密碼認證,因此在本地不管輸入什麼密碼都能登入mysql。
    sql

  • 咱們先使用create database 庫名;創建一個數據庫;使用show databases;查看存在的數據庫;使用use 庫名;使用咱們建立的數據庫數據庫

  • 在這裏庫名不能是純數字!

    apache

  • 接着使用create table 表名 (字段設定列表);創建數據表,數據表是數據庫中一個很是重要的對象,一個數據庫中可能包含若干個數據表;使用show tables查看存在的數據表

  • 使用insert into 表名 values('值1','值2','值3'...);插入數據;使用select * from 表名查詢表中的數據

  • 使用grant select,insert,update,delete on 數據庫.* to 用戶名@登陸主機 identified by "密碼";指令建立用戶,如圖所示,增長新用戶以後,退出,從新使用新用戶名和密碼進行登陸,登陸成功說明增長新用戶成功

  • 能夠看見把登錄用戶名從本地的root換爲新建的用戶以後,隨意輸入的密碼不能登入。

四、Web後端

  • 利用PHP和MySQL結合以前編的登陸網頁進行簡單的用戶身份認證vi login.php,代碼以下
<?php
$uname=$_POST["username"];
$pwd=$_POST["password"];
echo $uname;
$query_str="SELECT * FROM zrq20155230 where username='$uname' and password='$pwd';";
$mysqli = new mysqli("127.0.0.1", "root", "20155230", "zrq20155230");
/* 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> Welcome login Mr/Mrs:{$uname} <br> ";
    } 
    else {
        echo "<br> login failed!!!! <br> " ; }
    /* free result set */
    $result->close();
}
$mysqli->close();
?>
  • 圖中紅框內分別是mysql用戶名、密碼、數據庫名,圖中第五行的zrq20155230是數據庫內調用的表名。

  • 先將以前編的登陸網頁的login_test.html代碼中formaction屬性由#改爲login.php,即登陸後跳轉到login.php,再在瀏覽器中輸入localhost:80/login_test.html訪問本身的登陸頁面

五、最簡單的SQL注入,XSS攻擊測試

  • 在用戶名輸入框中輸入' or 1=1#,密碼隨便輸入,這時候的合成後的SQL查詢語句爲select * from zrq20155230 where username='' or 1=1#' and password=''#至關於註釋符,會把後面的內容都註釋掉,而1=1是永真式,因此這個條件確定恆成立,因此可以成功登錄

  • 咱們還能夠經過SQL注入將用戶名和密碼保存在數據庫中,可是得修改一下以前的代碼,由於咱們以前編的代碼將登錄用戶名的長度鎖死在了20而且if ($result = $mysqli->query($query_str))這條判斷語句不容許多條sql語句執行,因此將它們分別在login_test.htmllogin.php中改爲maxlength=20000if ($result = $mysqli->multi_query($query_str))便能實現執行多個sql語句,接着在用戶名輸入框中輸入';insert into zrq20155230 values('zn','5230');#,拆開來看就是
    SELECT * FROM zrq20155230 WHERE username=''; insert into zrq20155230 values('zn','5230');,接着登陸,出現以下所示頁面,可是!添加用戶成功!

  • 接着使用新插入的用戶名和密碼進行登陸,登陸失敗!

  • 懷疑是由於剛纔對login.php進行改動的緣由,再次改回去以後能登錄成功!爲何會出現這種狀況暫時沒時間去解決了!咱們往後再研究吧!

  • 將一張圖片存入/var/www/html目錄

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


基礎問題回答

  • 什麼是表單
    • 表單是一個包含表單元素的區域,表單元素是容許用戶在表單中(好比:文本域、下拉列表、單選框、複選框等等)輸入信息的元素,表單在網頁中主要負責數據採集功能,一個表單有三個基本組成部分:表單標籤、表單域、表單按鈕;
    • 表單標籤:這裏麪包含了處理表單數據所用CGI程序的URL以及數據提交到服務器的方法;
    • 表單域:包含了文本框、密碼框、隱藏域、多行文本框、複選框、單選框、下拉選擇框和文件上傳框等;
    • 表單按鈕:包括提交按鈕、復位按鈕和通常按鈕,用於將數據傳送到服務器上的CGI腳本或者取消輸入,還能夠用表單按鈕來控制其餘定義了處理腳本的處理工做。
  • 瀏覽器能夠解析運行什麼語言
    • 支持HTML、XML以及Python、PHP、JavaScript、ASP等衆多腳本語言
  • WebServer支持哪些動態語言
    • JavaScript、ASP、PHP、Ruby等腳本語言

實踐總結與體會

  • 相對來講也是很簡單的實驗,咱們在以前都選修了劉念老師的網絡安全編程基礎課程,我我的也在大一時選修了孫建樹老師的網頁設計基礎,對於這一部分的實驗內容進行的仍是很快的。
  • 這一次真正的難點是php語言的編程,可是由於有了老師和學長的代碼可供參考也沒有費多大的力氣就能理解看通(可是要本身寫八成要花很大的功夫,好比代碼中的一個問題如今還沒能解決,對於php的學習還需增強)。
  • 也經過了這一次的sql注入攻擊和xxs攻擊瞭解到了更多的騷操做,可是輸入框容易被限制致使指令不能徹底輸入是個問題!(雖然看老師在本身電腦上能經過在線更改html文件來進行攻擊,雖然效率不高,可是本身在kali下使用火狐瀏覽器時打開html網頁並不能對代碼進行更改。只能在本地下的html文件中更改設定。
  • 還有最後一個實驗,加油!
相關文章
相關標籤/搜索