2018-2019-2 網絡對抗技術 20165303 Exp 8 Web基礎
實驗目的
1.本實踐的具體要求有:
(1).Web前端HTML(0.5分)
能正常安裝、啟停Apache。理解HTML,理解表單,理解GET與POST方法,編寫一個含有表單的HTML。
(2).Web前端javascipt(0.5分)
理解JavaScript的基本功能,理解DOM。編寫JavaScript驗證用戶名、密碼的規則。
(3).Web後端:MySQL基礎:正常安裝、啟動MySQL,建庫、創建用戶、修改密碼、建表(0.5分)
(4).Web後端:編寫PHP網頁,連接數據庫,進行用戶認證(1分)
(5).最簡單的SQL註入,XSS攻擊測試(1分)
功能描述:用戶能登陸,登陸用戶名密碼保存在數據庫中,登陸成功顯示歡迎頁面。
課題負責人需要完成:登陸後可以發貼;會話管理。
基礎問題回答
1.什麽是表單
我認為表單就是網頁中用來收集各種信息的模塊,一個表單有三個基本組成部分: 表單標簽:這裏面包含了處理表單數據所用CGI程序的URL以及數據提交到服務器的方法。 表單域:包含了文本框、密碼框、隱藏域、多行文本框、復選框、單選框、下拉選擇框和文件上傳框等。 表單按鈕:包括提交按鈕、復位按鈕和一般按鈕;用於將數據傳送到服務器上的CGI腳本或者取消輸入,還可以用表單按鈕來控制其他定義了處理腳本的處理工作。
2.瀏覽器可以解析運行什麽語言
支持HTML(超文本標記語言)、XML(可擴展標記語言)以及Python、PHP、JavaScript、ASP等眾多腳本語言。C#,C,C++,delphi,ObjC等都可以
3.WebServer支持哪些動態語言
目前為止三種常用的動態語言是ASP,JSP,PHP等
ASP即Active Server Pages,是Microsoft公司開發的服務器端腳本環境,可用來創建動態交互式網頁並建立強大的web應用程序。當服務器收到對ASP文件的請求時,它會處理包含在用於構建發送給瀏覽器的HTML(Hyper Text Markup Language,超文本置標語言)網頁文件中的服務器端腳本代碼。除服務器端腳本代碼外,ASP文件也可以包含文本、HTML(包括相關的客戶端腳本)和com組件調用。
ASP簡單、易於維護 , 是小型頁面應用程序的選擇 ,在使用DCOM (Distributed Component Object Model)和 MTS(Microsoft Transaction Server)的情況下, ASP甚至可以實現中等規模的企業應用程序。
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。
Web前端HTML(0.5分)
我們的kali默認安裝有apach,所以service apache2 start命令打開Apache服務即可,一般默認開啟,不需要啟動
此時在瀏覽器輸入127.0.0.1,如果可以打開Apache的默認網頁,則開啟成功
使用
cd /var/www/html
進入Apache目錄下,使用命令vi simple_form.html
新建一個簡單的含有表單的html文件simple_form.html,內容如下
- 在瀏覽器輸入
/var/www/html/simple_form.html
可以打開剛剛創建的html網頁
2.Web前端:javascipt
我們可以在原有的基礎上可以添加一段JavaScript代碼,以完成對用戶是否填寫郵箱和密碼的判斷,添加後的代碼如下
<html>
<head>
<title>Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<style type="text/css">
body{
background-image:url("1.png");
background-position:center;
background-repeat:no-repeat;
}
</style>
<h2 align="center">Login</h2>
<center>
<form action="login" method="post" name="form_login">
<input placeholder="E-mail" name="Name" 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>
</center>
<script language="javascript">
function validateLogin(){
var sUserName = document.form_login.Name.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 > ```
- 接著在瀏覽器輸入
/var/www/html/login_test.html
如果用戶郵箱或密碼未填寫就提交,那麽就會出現如下的畫面
3.Web後端:MySQL基礎
首先輸入/etc/init.d/mysql start
開啟MySQL服務
- 在輸入
mysql -u root -p
使用root權限進入,默認密碼是password,就是這幾個字母
- 然後輸入
show databases;
可以查看數據庫基本信息,一定不要忘了輸入分號
再輸入use mysql;選擇使用這個數據庫
在輸入
select user, password, host from user;
可以查看當前用戶信息
然後輸入你想要修改的密碼可以修改
update user set password=PASSWORD("5303") where user=‘root‘;
輸入
flush privileges;
可以更新權限
這樣密碼就修改完了,可以使用新的密碼登錄了
使用```create database wy; 建立數據庫
show databases;可以查看創建的數據庫
使用
use wy;
使用我們創建的數據庫:
- 使用create table 表名 (字段設定列表);建立數據庫表,並設置字段基本信息:
這裏使用的是varchar類型而非char類型,他們的差別如下:
char類型指定大小後會預分配固定大小,不管是否使用空間都被占用
varchar類型用多少占多少,只是不能超過括號中指定的上限
create table login (username VARCHAR(20),password VARCHAR(20));
- 使用
show tables;
查看表信息:
使用insert into login value(‘[email protected]‘,‘wy20165303‘);可以插入數據
使用select * from login;查詢表中的數據:
grant select,insert,update,delete on 數據庫.* to 用戶名@登錄主機(可以是localhost,也可以是遠程登錄方式的IP) identified by "密碼";指令,這句話的意思是將對某數據庫的所有表的select,insert,update,delete權限授予當前主機localhost登錄的用戶weiyu,5303是登錄密碼
退出後使用新的登錄,登錄成功說明成功增加新用戶
4.Web後端:編寫PHP網頁
- 在/var/www/html目錄下新建一個PHP測試文件
phptest.php
<?php
echo ($_GET["a"]);
include($_GET["a"]);
echo "Hello word! This is my php test page!<br>";
?>
在瀏覽器網址欄中輸入localhost:80/phptest.php,可看到文件的內容:
也可以在瀏覽器網址欄中輸入
localhost:80/phptest.php?a=/etc/passwd
,可看到/etc/passwd文件的內容:
在瀏覽器中輸入127.0.0.1/login.php
,連接成功如下圖,但是由於沒有輸入登錄信息,因此查詢失敗:
利用PHP和MySQL,結合之前編寫的登錄網頁進行登錄身份認證,修改後的login.php代碼如下:
<?php
$uname=$_POST["Email"];
$pwd=$_POST["Password"];
echo $uname;
$query_str="SELECT * FROM login where username='$uname' and password='$pwd';";
$mysqli = new mysqli("127.0.0.1", "weiyu", "5303", "wy");
$query_str1="use wy;";
/* 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!!! <br> ";
}
else {
echo "<br> login failed!!!! <br> " ; }
/* free result set */
$result->close();
}
$mysqli->close();
?>
然後在瀏覽器輸入127.0.0.1/login.html進行登錄,登陸成功後可以看到如下
如果輸入錯誤就會顯示登錄失敗
5.最簡單的SQL註入,XSS攻擊測試
1.sql註入
SQL註入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來說,它是利用現有應用程序,將(惡意的)SQL命令註入到後臺數據庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。
在用戶名輸入框輸入‘ 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攻擊而變得廣為人知。
把一張圖片放入到/var/www/html下,在用戶名輸入框輸入<img src="1.jpg" />
,密碼隨意,就可以讀取圖片了。
攻擊成功
實驗中遇到的問題
在實驗中首先遇到的就是數據庫裏面各種用戶名和密碼很容易搞混,導致後面用到的時候死活登錄不上去,所以要認真的縷清數據庫的邏輯關系,到底是用戶名還是創建的庫的名字,以及創建的數據庫裏面的數據,其次就是網頁的制作以及前後端數據的傳輸了,由於我這個網站制作學的不是很好,所以導致前後傳輸數據的時候老是出現錯誤,還有就是登陸的時候老是失敗,搞得很頭疼,最後修改了很多次終於修改好了
實驗總結與體會
這次實驗給我的印象最深的就是你需要用到很多方面的知識,缺一樣都是不可以的,網絡攻防的技術,網頁制作的技術,這是一個綜合性很強的實驗,首先我們學會了很多關於數據庫的創建以及設定的知識,然後就是如何制作一個網站,前臺後臺數據庫,然後把三者聯系起來,接下來就是編寫好代碼之後,進行適當地攻擊,學會了數據庫攻擊中的簡單的攻擊,給我的印象非常深,通過一行代碼就可以實現註入攻擊導致數據庫的權限被打開,這在我們生活中也是會出現的,所以在制作數據庫的時候要想到這些問題,防範這些攻擊
2018-2019-2 網絡對抗技術 20165303 Exp 8 Web基礎