2015219付穎卓《網絡對抗》EXP8 Web基礎

實驗後回答問題

1.什麼是表單javascript

來自百度百科的官方定義:表單在網頁中主要負責數據採集功能。一個表單有三個基本組成部分:php

表單標籤:這裏麪包含了處理表單數據所用CGI程序的URL以及數據提交到服務器的方法。html

表單域:包含了文本框、密碼框、隱藏域、多行文本框、複選框、單選框、下拉選擇框和文件上傳框等。前端

表單按鈕:包括提交按鈕、復位按鈕和java

通常按鈕;用於將數據傳送到服務器上的CGI腳本或者取消輸入,還能夠用表單按鈕來控制其餘定義了處理腳本的處理工做。mysql

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

超文本標記語言:HTMLsql

可擴展標記語言:XML數據庫

腳本語言:ASP、PHP、Script、JavaScript、VBScript、Perl、Python、ColdFusion、Java、JSP等apache

3.WebServer支持哪些動態語言

ASP語言,PHP語言和JSP語言

實踐過程記錄

1、Web前端HTML

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

1.輸入sudo vi /etc/apache2/ports.conf查看apache端口狀況,將80改爲本身想用的數字,我用的是8080


2.經過apachectl start開啓Apache,使用netstat -aptn查看端口占用:在這裏apach2確實佔用了端口8080,能夠進行下一步了

3.瀏覽器中輸入localhost:8080,測試apache是否正常工做,由於上次實驗我假冒的網站是baidu,因此如今彈出來的是baidu


4.編寫一個含有表單的html,新建在Apache工做目錄/var/www/html下。我用了上學期劉念老師網絡安全編程基礎做業的表單代碼試驗了一下,除了編碼方式不一樣的問題有亂碼,功能沒有問題。
代碼以下:

<html>  
<head>  
<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>

此代碼能夠在win10下運行出來以下界面,可是在kali裏,不能支持中文,故進行了一些修改。


本身增長了一些色彩。。可是有亂碼,由於不支持中文,改成英文就行了。

當不輸入用戶名時出現以下提示:

6.由於沒有編寫相應action的php,因此submit以後指向404:not found

2、Web前端javascipt

  • 要求:理解JavaScript的基本功能,理解DOM。編寫JavaScript驗證用戶名、密碼的規則。
    1.JavaScript基本功能:以下圖
    image

2.DOM概念:在網頁上,組織頁面(或文檔)的對象被組織在一個樹形結構中,用來表示文檔中對象的標準模型就稱爲DOM。

3.編寫驗證用戶名和密碼的規則:(用戶名和密碼不爲空)
image

4.實現一個javascript(表單驗證)
image
若是沒有填寫學號,將會出現以下:
image

3、Web後端:MySQL基礎:正常安裝、啓動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,從新進入,使用新密碼登陸成功,說明修改爲功

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

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


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

Web後端:PHP基礎

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

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

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

2.瀏覽器打開localhost:80/lxm_test.php?a=/etc/passwd可看到/etc/passwd文件的內容,注意PHP變量大小寫敏感:


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

<?php

$uname=($_POST["username"]);
$pwd=($_POST["password"]);

echo $uname; 

$query_str="SELECT * FROM fyztable where username='{$uname}' and password='{$pwd}';";
$str="SELECT * FROM users where username='{$uname}' and password='password{$pwd}';";

$mysqli = new mysqli('127.0.0.1', 'root', 'p@ssw0rd', 'fyz_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 = $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();

?>

3.這裏作幾點說明,如圖所示圈出的部分,第一個password那個地方老師給的代碼是調用了password函數對密碼進行了加密,可是若是數據庫裏密碼沒有加密的話,最後輸入的值比對確定不會相等,登錄不成功,因此要把password那個函數去掉,第二個127.0.0.1是本機地址,root是MySQL的用戶名p@ssw0rd以前的登陸密碼,fyz_test是數據庫的庫名。


可是無論輸入對的仍是錯誤的用戶名密碼,顯示的都是下圖,登陸失敗。

這時進入/etc/mysql目錄下,執行sudo vi debian.cnf或者sudo

vimdebian.cnf查看裏面的用戶名和密碼,
而後使用這個文件中的用戶名和密碼進入mysql但仍是被拒絕了。

以後我還下載了自帶的phpmyadmian數據庫。覺得會有幫助。


但仍是不行,我才意識到確定是代碼有問題,因而我仔細看看別的同窗的代碼。發現!本身就是個傻子

改成post就行了。。。。

SQL注入

  • 1.SQL注入,就是經過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來講,它是利用現有應用程序,將(惡意的)SQL命令注入到後臺數據庫引擎執行的能力,它能夠經過在Web表單中輸入(惡意)SQL語句獲得一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。
  • 在用戶名輸入框中輸入' or 1=1#,密碼隨便輸入,這時候的合成後的SQL查詢語句爲
select * from lxmtable where username='' or 1=1#' and password=''
  • 至關於註釋符,會把後面的內容都註釋掉,而1=1是永真式,因此這個條件確定恆成立,因此可以成功登錄:

  • 還能夠經過SQL注入將用戶名和密碼保存在數據庫中,可是得修改一下以前的代碼,由於咱們以前編的代碼中
if ($result = $mysqli->query($query_str))

這條判斷語句不容許多條sql語句執行,因此將它改爲

if ($result = $mysqli->multi_query($query_str))

便能實現執行多個sql語句,接着在用戶名輸入框中輸入

';insert into zxtable values('cjd','5219');#

拆開來看就是

SELECT * FROM zxtable WHERE username='';、insert into zxtable values('cjd','5219',);

,接着登陸,再去查數據庫:發現真的多了一行數據。

有這行數據當作用戶名密碼登陸試試看,果真能夠登上了。

XSS攻擊

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

  • 咱們能夠進行一個簡單的測試,在用戶名輸入框中輸入讀取/var/www/html目錄下的圖片:

實驗總結與體會

此次實驗雖有上學期劉念老師《網絡安全編程基礎》的知識基礎,但新知識量仍是比較大,理應耗時較長,幸在天晨同窗博客寫的很是好,搬用她的代碼作實驗沒有用太長時間。但我知道這是遠遠不夠的,由於不少理論知識的理解還有欠缺,代碼也理解的不夠充分,應該繼續努力。並且,我耗時不少天完成的實驗,中間遇到不少問題,一一解決了,但有的沒有記錄,總之仍是完成了,以爲本身挺牛逼的。

相關文章
相關標籤/搜索