20155308《網絡對抗》Exp8 Web基礎

20155308《網絡對抗》Exp8 Web基礎

實踐原理與實踐說明

本實踐的具體要求有:

(1).Web前端HTMLjavascript

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

(2).Web前端javascipthtml

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

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

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

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

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

基礎問題回答

1.什麼是表單?數據庫

  • 表單在網頁中主要負責數據採集功能。一個表單有三個基本組成部分: 表單標籤:這裏麪包含了處理表單數據所用CGI程序的URL以及數據提交到服務器的方法。 表單域:包含了文本框、密碼框、隱藏域、多行文本框、複選框、單選框、下拉選擇框和文件上傳框等。

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

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

3.WebServer支持哪些動態語言?

  • JavaScript、ASP、PHP、Ruby等腳本語言,ASP基於IIS WEB SERVER,是微軟的服務器端腳本技術,PHP基於APACHE WEB SERVER,與ASP有幾分相似,都是一種在服務器端執行的嵌入HTML文檔的腳本語言。

實踐內容

實驗環境: kali

重要目錄、文件

/etc/apache2/apache2.conf 存儲apache2的配置

/var/www/html 存儲網頁

/var/log/apache2/error.log 存儲報錯信息

Web前端:HTML基礎

1.咱們的Web開發是基於Apache服務器進行的,直接使用指令apachectl start打開Apache服務,使用netstat -aptn查看一下端口占用,因爲上次修改了端口文件,因此仍是佔用了80端口:


  • 在Firefox中輸入127.0.0.1:80,是Apache的默認網頁,服務器正常開啓

2.以後cd /var/www/html進入到Apache的工做目錄下.

注意輸入cd var/www/html會找不到

vi test1.html新建一個含有表單的html咱們經常使用的登陸頁面通常就是用表單向後臺提交數據,因此能夠編寫一個登陸頁面,代碼以下:

<html>  
<head>  
<title>test</title>   
</head> 
<body>           
<table>  
    <form method ="POST" action="#" name="frmLogin"  >  
    <tr>  
    <td>username: </td>  
    <td><input type="text" name="username" value="Your name" size="20" maxlength="20" /></td>  
    <td> </td>  
    <td> </td>  
    </tr>  
    <tr>  
    <td>password:</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">auto-Login</td>  
    </tr>     
    <table>  
    <tr>  
        <td><input type="submit" name="login" value="Login" /></td>  
        <td><input type="reset" name="rs" value="Reset" /></td>  
    </tr>
    </table>    
    </form> 
</table>   
</body>  
</html>
  • 若是不想用vim一個一個字打進去的話,能夠在這個頁面下先建一個test1.txt,將內容複製進去,而後將名字後綴名改成html。

1.用瀏覽器打開這個網頁:

2.填寫上內容並submit,由於沒有上面代碼裏標出的一行中action指定php文件,登錄不了。

Web前端:javascipt基礎

  • JavaScript:JavaScript是一種普遍用於客戶端Web開發的腳本語言,經常使用來給HTML網頁添加動態功能,好比響應用戶的各類操做。
  • DOM:DOM是文檔對象模型,DOM能夠以一種獨立於平臺和語言的方式訪問和修改一個文檔的內容和結構,換句話說,這是表示和處理一個HTML或XML文檔的經常使用方法。

1.咱們可使用JavaScript來編寫一個驗證用戶名、密碼的規則,直接在以前的代碼基礎上加入如下代碼,命名爲login_test.html:

<script language="javascript">  
    function validateLogin(){  
        var sUserName = document.frmLogin.username.value ;  
        var sPassword = document.frmLogin.password.value ;    
        if ((sUserName =="") || (sUserName=="Your name")){  
            alert("please input the username");  
            return false ;  
        }  
       
        if ((sPassword =="") || (sPassword=="Your password")){  
            alert("please input the password");  
            return false ;  
        }  
    
    }   
</script>

2.編了一個驗證的函數,若是輸入的用戶名或者密碼爲空時,就彈出相應的對話框,而後在點擊登陸按鈕時效果以下:


Web後端:MySQL基礎

  • 在web開發中咱們要用到後臺數據庫,而MySQL就是一個數據庫管理系統,相似的還有SqlServer、oracle等等,因爲MySQL是開放的,不收費,因此通常中小型網站的開發都選擇MySQL做爲網站數據庫。

1.先輸入/etc/init.d/mysql start指令開啓mysql服務,輸入mysql -u root -p,並根據提示輸入密碼,默認密碼爲p@ssw0rd,進入MySQL。

注意:在MySQL中輸入命令後面都要帶一個分號做爲命令結束符:

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

3.接着輸入quit退出MySQL,輸入mysql -u root -p從新進入,使用新密碼登陸成功,說明修改爲功:

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

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


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


7.咱們還能夠在MySQL中增長新用戶,使用grant select(insert,update,delete) on 數據庫.* to 用戶名@登陸主機 identified by "密碼";指令,如圖所示,增長新用戶以後,退出,從新使用新用戶名和密碼進行登陸,登陸成功說明增長新用戶成功:


Web後端:PHP基礎

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

1.咱們能夠在/var/www/html目錄下新建一個hwf_test.php測試文件,簡單瞭解一下它的一些語法:

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

1.瀏覽器打開localhost:80/hwf_test.php?a=/etc/passwd可看到/etc/passwd文件的內容:

2.簡單測試完成後,咱們能夠利用PHP和MySQL結合以前編的登陸網頁進行簡單的用戶身份認證,這裏能夠參考老師給的代碼編寫login.php,代碼以下所示:

<?php
$uname=$_POST["username"];
$pwd=$_POST["password"];
echo $uname;
echo $pwd;
$query_str="SELECT * FROM hwftable where username='$uname' and password='$pwd';";
$mysqli = new mysqli("127.0.0.1", "haowenfei", "20155308", "5308_test");

/* 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 = $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();
?>

1.這裏作幾點說明,第五行中users是我本身的表名,根據實際修改。127.0.0.1是本機地址,haowenfei是MySQL的用戶名,20155308是我以前設置的登陸密碼,5308_test是數據庫的庫名。

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


3.在登陸頁面中輸入數據庫中存有的用戶名和密碼並點擊登陸進行用戶認證,若是登陸以後,顯示以下所示畫面:

  • 解決辦法是新建用戶

4.在登陸頁面中輸入數據庫中存有的用戶名和密碼並點擊登陸進行用戶認證,若是登陸以後,顯示以下所示畫面:

  • 解決辦法是改正庫

5.最後結果,登錄成功!


6.若是庫、表和字段對應沒有搞清楚,很容易認證失敗

SQL注入

  • 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是永真式,因此這個條件永遠成立,因此可以成功登錄,

2.咱們還能夠經過SQL注入將用戶名和密碼保存在數據庫中,login.php文件中if ($result = $mysqli->multi_query($query_str))能實現執行多個sql語句。

3.接着在用戶名輸入框中輸入';insert into hwftable values('zn','5314','17888811781');#,拆開來看就是SELECT * FROM fwhtable WHERE username='';insert into lxmtable values('zn','5314','17888811781');,接着登陸,登錄失敗:

3.咱們能夠在數據庫中查詢一下是否真的添加成功,如圖所示說明插入成功:

4.接着使用新插入的用戶名和密碼進行登陸,登陸成功:

XSS攻擊測試

  • XSS攻擊:跨站腳本攻擊(Cross Site Scripting),爲不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆。故將跨站腳本攻擊縮寫爲XSS。XSS是一種常常出如今web應用中的計算機安全漏洞,它容許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。好比這些代碼包括HTML代碼和客戶端腳本。攻擊者利用XSS漏洞旁路掉訪問控制——例如同源策略(same origin policy)。這種類型的漏洞因爲被駭客用來編寫危害性更大的phishing攻擊而變得廣爲人知。對於跨站腳本攻擊,黑客界共識是:跨站腳本攻擊是新型的「緩衝區溢出攻擊「,而JavaScript是新型的「ShellCode」。

1.咱們能夠進行一個簡單的測試,在用戶名輸入框中輸入

<img src="u=3138279254,279646095&fm=27&gp=0.jpg" />balabala</a>

讀取/var/www/html目錄下的圖片:


2.點擊登陸後咱們能夠看到圖片:

實驗總結與體會

  • 此次實驗運用到JAVA、網頁製做等知識,重溫了之前的知識。同時利用sql注入、XSS攻擊等網絡攻擊,進行網頁的攻擊,雖然過程非常艱難,有的時候能不能成功真的是看命啊,可是結果仍是出來了,哈哈哈哈哈,開心。實驗過程當中,經過學習學姐學長們的博客,學到了不少東西,起碼理清了本身的思路,可是必定要有本身的理解,這樣才能學好這部分的知識。
相關文章
相關標籤/搜索