1. 程式人生 > >20155326《網路對抗》Exp8 WEB基礎實踐

20155326《網路對抗》Exp8 WEB基礎實踐

fir 讀取 例如 用戶登錄 設計者 域名 類型 分享圖片 ner

20155326《網路對抗》Exp8 WEB基礎實踐

實踐內容

(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)什麽是表單

表單在網頁中主要負責數據采集功能。可以收集用戶的信息和反饋意見,是網站管理者與瀏覽者之間溝通的橋梁。

表單由文本域、復選框、單選框、菜單、文件地址域、按鈕等表單對象組成,所有的部分都包含在一個由標識符標誌起來的表單結構中。

表單的種類有註冊表、留言薄、站點導航條、搜索引擎等。

(2)瀏覽器可以解析運行什麽語言。

超文本標記語言:HTML

可擴展標記語言:XML

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

(3)WebServer支持哪些動態語言

ASP語言,PHP語言和JSP語言

實踐過程記錄

Web前端:HTML

首先進行Apache環境配置

apache是kali下的web服務器,通過訪問ip地址+端口號+文件名稱可以打開對應的網頁。

輸入命令vi /etc/apache2/ports.conf更改apache2的監聽端口號為5326

技術分享圖片

輸入命令apachectl start打開apahce,並使用netstat -aptn查看端口號,確認apache正確開啟。
技術分享圖片

在kali下的firefox輸入http://127.0.0.1:5236可以看見上一次實驗克隆的網頁

技術分享圖片

使用cd /var/www/html在/var/www/html目錄下編輯test.html

編寫一個含有表單能實現輸入用戶名、密碼實現登錄的html。

技術分享圖片

在firefox中輸入:http://127.0.0.1:5326/test.html就能打開該網頁,輸入姓名、密碼後點擊submit。

技術分享圖片

由於沒有設置跳轉的.php頁面,所以無法跳轉到別的頁面,在接下來的過程中我會完善它。

Web前端:javascript

用JavaScript來編寫一個驗證用戶名、密碼的函數,當其為空時提示錯誤信息.


function nameText(){
var name= document.getElementByIdx_x ("username");
var divID= document.getElementByIdx_x ("divName");
divID.innerHTML="";
if(name.value==""){
 divID.innerHTML="用戶名不能為空";
 return false;
}
}
function passText(){
var pass= document.getElementByIdx_x ("password");
var divIP= document.getElementByIdx_x ("divPass");
divIP.innerHTML="";
if(pass.value==""){
 divIP.innerHTML="密碼不能為空";
 return false; 
}
}
}
</script>

JavaScript是一種直譯腳本語言,是瀏覽器的一部分,廣泛用於客戶端,最早用於HTML網頁,用來給網頁增加動態功能

DOM可以看做是節點,可以使用 Javascript 語言來操作 DOM 以改變網頁。為了改變網頁,你必須告訴 Javascript 改變哪一個節點。這就是操作 DOM。

PHP測試

新建一個PHP測試文件vi /var/www/html/test.php

技術分享圖片

用瀏覽器打開http://127.0.0.1:5236/test.php,可以看見如下界面,測試成功

技術分享圖片

MySQL基礎

開啟sql服務/etc/init.d/mysql start

技術分享圖片

輸入mysql -u root –p,並根據提示輸入密碼,默認密碼就是直接回車,進入MySQL

技術分享圖片

如果要修改自己的密碼,則進行以下操作:

  • 輸入 use mysql; 選擇mysql數據庫

  • 輸入 select user, password, host from user; mysql庫中的user表中存儲著用戶名、密碼與權限

技術分享圖片

  • 輸入UPDATE user SET password=PASSWORD("新密碼") WHERE user=‘root‘; 修改密碼

技術分享圖片

  • 輸入flush privileges;,更新權限

  • 輸入quit退出

重新輸入mysql -u root –p,檢測新密碼能否成功使用,能成功登錄即可。

技術分享圖片

如果要在Mysql中建庫建表,則進行以下操作:

輸入 :

CREATE SCHEMA `庫表的名稱`; 
CREATE TABLE `庫表的名稱`.`users` (
 `userid` INT NOT NULL COMMENT ‘‘,
 `username` VARCHAR(45) NULL COMMENT ‘‘,
`password` VARCHAR(256) NULL COMMENT ‘‘,
 `enabled` VARCHAR(5) NULL COMMENT ‘‘,
 PRIMARY KEY (`userid`) COMMENT ‘‘);

技術分享圖片

技術分享圖片

接著向表中添加用戶:

use 5326
insert into users(userid,username,password,enabled) values(1,‘用戶id‘,password("用戶密碼"),"TRUE");

技術分享圖片

輸入show databases ,查看新建的庫表的信息

技術分享圖片

php+mysql實現登錄網頁編寫

在/var/www/html文件夾下輸入vim login.html,編寫登錄網頁

技術分享圖片

接著輸入vim login.php,通過php實現對數據庫的連接

技術分享圖片

在瀏覽器中輸入localhost:5236/login.html,訪問自己的登陸頁面。

在登錄頁面中輸入數據庫中存有的用戶名和密碼並點擊提交進行用戶認證,這裏出現了錯誤。分析後得知在剛剛數據庫中應該存在問題,使用的網頁代碼也有問題。

技術分享圖片

返回數據庫,使用show tables查看存在的數據表,發現是空。

技術分享圖片

於是,我們重新再來一遍。。。

先輸入/etc/init.d/mysql start指令開啟mysql服務,再輸入mysql -u root -p,進入MySQL。

技術分享圖片

使用 show databases; 查看存在的數據庫,輸入 use 庫名; 使用之前創建的數據庫lmc。

技術分享圖片

使用create table 表名 (字段設定列表);建立數據表,用show tables;查看存在的數據表。

技術分享圖片

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

技術分享圖片

在MySQL中增加新用戶,使用grant select,insert,update,delete on 數據庫.* to 用戶名@登錄主機(可以是localhost,也可以是遠程登錄方式的IP) identified by "密碼";指令,這句話的意思是將對某數據庫的所有表的select,insert,update,delete權限授予某ip登錄的某用戶。

技術分享圖片

增加新用戶之後,退出,重新使用新用戶名和密碼進行登錄,登錄成功說明增加新用戶成功。

技術分享圖片

處理數據庫的修改之外,php代碼也需要修改。

首先,無論.php文件中的方法修改成POST還是GET,都要與html文件中的method一致。

技術分享圖片

然後,這裏的 users 是我自己的表名,也需要修改。

技術分享圖片

127.0.0.1是本機地址,lmc是數據庫的用戶名,toor是我之前設置的登錄密碼,lmc是數據庫的庫名。

技術分享圖片

接著,將之前編的登錄網頁的login.html代碼中form的action屬性由#改成login.php,即登錄後跳轉到login.php,再在火狐瀏覽器中輸入localhost:80/login.html訪問自己的登錄頁面。(這裏用戶名就是之前新建的用戶20155326和密碼lmclmc。

技術分享圖片

輸入表中的username和password,登錄進行用戶認證,認證成功出現歡迎界面。

技術分享圖片

認證失敗則出現下面界面。

技術分享圖片

SQL註入攻擊

SQL註入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來說,它是利用現有應用程序,將(惡意的)SQL命令註入到後臺數據庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。

搭建一個網站實現用戶登錄,這步之前已經完成

構造SQL語句:在用戶名輸入框中輸入‘ or 1=1#,密碼隨便輸入

技術分享圖片

這時候的合成後的SQL查詢語句為select * from users where username=‘‘ or 1=1#‘ and password=md5(‘‘)
以下的兩句sql語句等價:

select * from users where username=‘‘ or 1=1#‘ and password=md5(‘‘)
select * from users where username=‘‘ or 1=1

’#‘相當於註釋符,會把後面的內容都註釋掉,而1=1是永真式,所以這個條件肯定恒成立,所以能夠成功登陸:

技術分享圖片

我們還可以通過SQL註入將用戶名和密碼保存在數據庫中,但是得修改一下之前的代碼,因為我們之前編的代碼中if ($result = $mysqli->query($query_str))這條判斷語句不允許多條sql語句執行,所以將它改成if ($result = $mysqli->multi_query($query_str))便能實現執行多個sql語句。

技術分享圖片

在用戶名輸入框中輸入‘;insert into users values(‘lmc1998‘,‘1998lmc‘);#,拆開來看就是SELECT * FROM users WHERE username=‘‘;、insert into users values(‘lmc1998‘,‘1998lmc‘);,接著登錄,提示了登錄失敗。

技術分享圖片

但是當我們查看數據庫時,發現插入成功了。

技術分享圖片

然後,把代碼中sql語句執行的代碼改回 if ($result = $mysqli->query($query_str)) 接著使用新插入的用戶名和密碼進行登錄,成功啦

技術分享圖片

技術分享圖片

XSS攻擊

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

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

技術分享圖片

在用戶名輸入框中輸入技術分享圖片balabala讀取/var/www/html目錄下的圖片:

技術分享圖片

成功讀取,這樣看著是一個假的百度網頁哈哈哈。

技術分享圖片

實驗總結與體會

這次實驗準備的涉及到了上個學期的網絡安全編程基礎中JavaWeb的知識,數據庫的運用還是不太了解,盲目的做後來就會出錯。網頁代碼也是,得搞清楚裏面的語句,直接粘貼代碼是不行的,得將代碼與自己的數據庫連接起來,這裏參考了很多同學的解決辦法,感覺收獲了很多。

20155326《網路對抗》Exp8 WEB基礎實踐