2018-2019-2 網絡對抗技術 20165228 Exp8 Web基礎

2018-2019-2 網絡對抗技術 20165228 Exp8 Web基礎

回答問題
(1)什麼是表單
在網頁中主要負責數據採集功能。一個表單有三個基本組成部分: 表單標籤:這裏麪包含了處理表單數據所用CGI程序的URL以及數據提交到服務器的方法。 表單域:包含了文本框、密碼框、隱藏域、多行文本框、複選框、單選框、下拉選擇框和文件上傳框等。 表單按鈕:包括提交按鈕、復位按鈕和通常按鈕;用於將數據傳送到服務器上的CGI腳本或者取消輸入,還能夠用表單按鈕來控制其餘定義了處理腳本的處理工做。
(2)瀏覽器能夠解析運行什麼語言。
超文本標記語言:HTML
可擴展標記語言:XML
腳本語言:ASP、PHP、Script、JavaScript、VBScript、Perl、Python、ColdFusion、Java、JSP等。
(3)WebServer支持哪些動態語言
PHP、JSP。javascript

實驗內容

1.Web前端HTML
(1)Apache安裝
因爲個人kali好像已有Apache,因此就沒有安裝的過程,可是應該能夠執行sudo apt-get install apache2來安裝
(2)Apache啓停php

  • 執行service apache2 start來啓動apache服務
  • 若是失敗,多是80端口被佔用,可執行netstat -tupln | grep 80來查看佔用80端口的其餘進程,而後kill processID來殺死該進程,而後從新開啓apache便可。
  • 使用service apache2 stop來中止apache服務

    (3)測試Apache
  • 在瀏覽器輸入127.0.0.1:80,若是和下圖同樣,即說明可正常工做。
  • 在瀏覽器輸入127.0.0.1:80/20165228szk.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登陸頁面</title>
<script language="javascript">
var movingID=null;
var scrolling=false;
function startMove()
{
    
    var left=eval(bear.style.left.replace("px",""));
    if(left <document.body.scrollWidth-400)
        bear.style.left=left+1;
    else
        bear.style.left=1;
    movingID=setTimeout("startMove()",0.1); 
    
}
function mysubmit()
{ 
    if(document.form1.password.value==""   || document.form1.username.value=="")
    {
        alert("用戶名、密碼不能爲空!");
        window.location.href="login.html"
    
    }   
    else
       form1.submit();

}
</script>
<style type="text/css">
a:link{color:#41506D;font-size:125%;text-decoration:none}
a:visited{color:#41506D;font-size:125%;text-decoration:none}
a:hover{color:#FFF200;font-size:125%;text-decoration:none}
</style>
</head>
<body  onload="startMove()" style="background-image: url(./login.png);background-repeat:no-repeat;topmargin:60;leftmargin:12 ;overflow-x:hidden;overflow-y:scroll;" >
<br><br><br>
    <p align="right">
    <a  target=_parent href="index.jsp" >登 錄</a>    &nbsp;&nbsp;     <a target=_parent href="addone.jsp" >注 冊</a>
    </p>
<form action="login.php" method="POST" name="form1">
<table style="background: url(./登陸.png);background-repeat:no-repeat;position:relative;left:300px;top:0px;border-collapse:collapse;">
<tr><th style="border:5px solid white;height:50px;width:230px;padding:0px;text-align:center;vertical-align:center;color:#41506D;font-size:150%;font-family:Microsoft YaHei UI;">
帳 號 密 碼 登 錄
</th></tr>
<tr>
<td style="border:5px solid white;height:180px;width:230px;padding:0px;text-align:center;vertical-align:center;color:#41506D;">

<p style="position:absolute;left:27px;top:50px;font-size:130%;color:black;font-family:Microsoft YaHei UI;">用戶名 </p>
 <input align="center" type="text" name = "username"  style="position:absolute;left:100px;top:70px;height:35px;width:100px;font-size:130%;"/> <br><br>
<p style="position:absolute;left:27px;top:100px;font-size:130%;color:black;font-family:Microsoft YaHei UI;">密&nbsp;&nbsp;&nbsp;碼 </p>
&nbsp; <input align="center" type="password" name = "password"  style="position:absolute;left:100px;top:120px;height:35px;width:100px;font-size:130%;"> <br>
<input type = "button" value = "提交" onClick="mysubmit()" style="position:absolute;left:50px;top:190px;height:35px;width:150px;font-size:120%;">

</td>
</tr>
</table></form>

<div id="bear" style="visibility:visible;position:absolute;left:1px;top:330px;z-index:1;width:400px;height:170px;overflow-x:hidden;overflow-y:hidden;">
</div>

</body>
</html>

2.Web前端javasciptcss

  • 驗證規則:限制用戶必須輸入用戶名和密碼

    3.Web後端
    (1)MySQL安裝
  • 參考博客的安裝過程
    (2)啓動MySQL
  • 運行/etc/init.d/mysql start便可開啓MySQL服務

    (3)數據庫操做
  • 首先執行mysqladmin -u root password "20165228",將root的密碼修改成20165228
  • 執行mysql -u root -proot身份登陸MySQL,而後輸入剛剛修改的密碼。
  • insert into mysql.user(Host,User,Password) values("localhost","szk",password("20165228"));新建用戶,用戶名爲szk,口令爲20165228
  • 用戶信息存儲在mysql數據庫內,執行use mysql;使用該數據庫。執行select user, password from user; 能夠查詢到用戶、口令(密文)信息
  • 執行grant all privileges on *.* to 'szk' identified by '20165228' with grant option; FLUSH PRIVILEGES;給新用戶賦予權限
  • 執行create database 20165228szk;可建立名爲20165228szk的數據庫。
  • 執行show databases;可查看已有數據庫的基本信息。
  • 執行use 20165228szk;使用該數據庫
  • 執行create table szk (username VARCHAR(20),password VARCHAR(20));新建表
  • insert into szk values('20165228','123456');即向表中插入數據。
  • select * from szk;測試是否插入成功
  • 執行grant select,insert,update,delete on 20165228szk.* to szk@localhost identified by "20165228";將對某數據庫的全部表select,insert,update,delete權限授予當前主機localhost用戶szk,其密碼是20165228
  • 編寫PHP網頁,連接數據庫,並進行用戶認證
    login.php
<?php

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

echo $uname; 

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

/* echo "<br> {$query_str} <br>";*/

$mysqli = new mysqli("127.0.0.1", "szk", "20165228", "20165228szk");

/* 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> Wellcome login Mr/Mrs:{$uname} <br> ";
    } 
    else {
        echo "<br> login failed!!!! <br> " ;
    }

    /* free result set */
    $result->close();
}


$mysqli->close();

?>
  • 登陸成功:
  • 登陸失敗:

    4.SQL注入
  • 原理:SQL注入攻擊指的是經過構建特殊的輸入做爲參數傳入Web應用程序,而這些輸入大都是SQL語法裏的一些組合,經過執行SQL語句進而執行攻擊者所要的操做,其主要緣由是程序沒有細緻地過濾用戶輸入的數據,導致非法數據侵入系統。
    根據相關技術原理,SQL注入能夠分爲平臺層注入和代碼層注入。前者由不安全的數據庫配置或數據庫平臺的漏洞所致;後者主要是因爲程序員對輸入未進行細緻地過濾,從而執行了非法的數據查詢。基於此,SQL注入的產生緣由一般表如今如下幾方面:①不當的類型處理;②不安全的數據庫配置;③不合理的查詢集處理;④不當的錯誤處理;⑤轉義字符處理不合適;⑥多個提交處理不當。
  • 攻擊:當應用程序使用輸入內容來構造動態sql語句以訪問數據庫時,會發生sql注入攻擊。若是代碼使用存儲過程,而這些存儲過程做爲包含未篩選的用戶輸入的字符串來傳遞,也會發生sql注入。sql注入可能致使攻擊者使用應用程序登錄在數據庫中執行命令。相關的SQL注入能夠經過測試工具pangolin進行。若是應用程序使用特權太高的賬戶鏈接到數據庫,這種問題會變得很嚴重。在某些表單中,用戶輸入的內容直接用來構造動態sql命令,或者做爲存儲過程的輸入參數,這些表單特別容易受到sql注入的攻擊。而許多網站程序在編寫時,沒有對用戶輸入的合法性進行判斷或者程序中自己的變量處理不當,使應用程序存在安全隱患。這樣,用戶就能夠提交一段數據庫查詢的代碼,根據程序返回的結果,得到一些敏感的信息或者控制整個服務器,因而sql注入就發生了。
  • 在網頁登陸的用戶名中填寫' or 1=1#,密碼隨意,這時候的合成後的SQL查詢語句爲select * from users where username='' or 1=1#' and password=md5(''),#至關於註釋符,會把後面的內容都註釋掉,而1=1是永真式,因此這個條件確定恆成立,因此可以成功登錄:

    5.XSS攻擊測試
  • XSS是一種常常出如今web應用中的計算機安全漏洞,它容許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。好比這些代碼包括HTML代碼和客戶端腳本。攻擊者利用XSS漏洞旁路掉訪問控制——例如同源策略(same origin policy)。這種類型的漏洞因爲被駭客用來編寫危害性更大的網絡釣魚(Phishing)攻擊而變得廣爲人知。對於跨站腳本攻擊,駭客界共識是:跨站腳本攻擊是新型的「緩衝區溢出攻擊「,而JavaScript是新型的「ShellCode」。
  • XSS攻擊的危害包括
    一、盜取各種用戶賬號,如機器登陸賬號、用戶網銀賬號、各種管理員賬號
    二、控制企業數據,包括讀取、篡改、添加、刪除企業敏感數據的能力
    三、盜竊企業重要的具備商業價值的資料
    四、非法轉帳
    五、強制發送電子郵件
    六、網站掛馬
    七、控制受害者機器向其它網站發起攻擊
  • 在登陸的用戶名中輸入:<img src="1.png" />szkun</a>,讀取/var/www/html目錄下的圖片:
    html

    問題

  • 在運行MySQL時,總是忘記在命令結束時加;,有時候從新打開MySQL不少次... 還有一個很神奇的是,昨天能好好解析php的瀏覽器,今天在html跳轉action時居然提示php文件下載,很迷!最後發如今本地文件打開html時會出現該狀況,經過apache打開時就能正常解析。前端

    實驗感想

  • 在上學期的網絡安全編程課程中,咱們也學習了前端和後臺的編寫方法,而且演示過最簡單的攻擊,當時以爲很神奇,但沒有本身嘗試過,此次實驗中得以知足。java

相關文章
相關標籤/搜索