# 2017-2018-2 20155319 『網絡對抗技術』Exp8:Web基礎
2017-2018-2 20155319 『網絡對抗技術』Exp8: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分)
2.基礎問題回答
(1)什麽是表單?
- 表單在網頁中主要負責數據采集功能。一個表單有三個基本組成部分:
表單標簽:這裏面包含了處理表單數據所用CGI程序的URL以及數據提交到服務器的方法。
(2)瀏覽器可以解析運行什麽語言?
- 支持HTML(超文本標記語言)、XML(可擴展標記語言)以及Python、PHP、JavaScript、ASP等眾多腳本語言。
(3)WebServer支持哪些動態語言?
- 最常用的三種動態網頁語言有ASP(ActiveServerPages),JSP(JavaServerPages),PHP(HypertextPreprocessor)。
二.實踐過程記錄
1.Web前端:HTML
1.使用netstat -aptn
查看80端口是否被占用,發現我的電腦的80端口未被占用,也可以把這些用不到的進程先kill掉。使用service apache2 start
命令打開Apache服務。查看端口是否被apache使用:
此時在瀏覽器輸入127.0.0.1
,可以看見上次實驗克隆的網址。
2.使用cd /var/www/html
進入Apache目錄下,新建一個簡單的含有表單的html文件vi login.html
:
login.html:
<html> <head> <title>Login</title> <body bgcolor=‘#FFFFCC‘> </head> <body> <h2>Welcome</h2> <form action="login" method="post"> <td align="left"> username:</td> <input placeholder="E-mail/Phone" name="Name" class="user" type="email"> <br> </br> <td align="left">password:</td> <input placeholder="Password" name="Password" class="pass" type="password"> <br> </br> <input type="submit" value="Login"> </form> </body> </html>
在瀏覽器中打開:
點擊登錄:
2.Web前端:javascipt
1.在原有login.html基礎上,可以添加一段JavaScript代碼,以完成對用戶是否填寫郵箱和密碼的判斷。修改後的logintest.html如下所示:
<html>
<head>
<title>Login</title>
<body bgcolor=‘#FFFFCC‘>
</head>
<body>
<h2>Welcome</h2>
<form action="rhl.php" method="POST" name="formtext">
<td align="left"> username:</td>
<input placeholder="E-mail/Phone" name="username" type="text" value="Your name" onfocus="if (this.value==‘Your name‘) this.value=‘‘;" />
<br>
</br>
<td align="left">password:</td>
<input placeholder="Password" name="password" type="password" value="Your password" onfocus="if (this.value==‘Your password‘) this.value=‘‘;" />
<br>
</br>
<input type="submit" value="Login" onClick="return Login()" />
</form>
<script language="javascript">
function Login(){
var sUserName = document.formtext.username.value ;
var sPassword = document.formtext.password.value ;
if((sUserName=="root") && (sPassword=="admin")){
alert("success");}
if ((sUserName =="") || (sUserName=="Your name")){
alert("user name");
return false ;
}
if ((sPassword =="") || (sPassword=="Your password")){
alert("password!");
return false ;
}
}
</script>
</body>
</html>
2.在瀏覽器訪問127.0.0.1:80/logintest.html
,如果用戶郵箱或密碼未填寫就提交,網頁會報提示:
登錄成功會顯示success:
3.Web後端:MySQL基礎
1.輸入/etc/init.d/mysql start
開啟MySQL服務。因為首次登錄不知道密碼所以上網找了一種方法:先打開/etc/mysql找到mysql的文件夾,選中50-server.cnf
在下面一行加入skip-grant-tables
並保存退出,繼而重新啟動即可跳過輸密碼的環節。
2.輸入use mysql
;,選擇mysql數據庫;輸入update user set password=PASSWORD("新密碼") where user=‘root‘;,修改密碼;輸入flush privileges;
,更新權限
3.退出數據庫,用新密碼重新登錄
4.使用create database 數據庫名稱;建立數據庫使用show databases;查看存在的數據庫:
5.使用use 庫名
;使用我們創建的數據庫,使用create table 表名 (字段設定列表);
建立數據表,數據表是數據庫中一個非常重要的對象,一個數據庫中可能包含若幹個數據表;使用show tables;
查看存在的數據表
6.使用insert into 表名 values(‘值1‘,‘值2‘,‘值3‘...);
插入數據;使用select * from 表名;
查詢表中的數據:
7.在MySQL中增加新用戶,使用grant select,insert,update,delete on 數據庫.* to 用戶名@登錄主機(可以是localhost,也可以是遠程登錄方式的IP) identified by "密碼";
指令,這句話的意思是將對某數據庫的所有表的select,insert,update,delete權限授予某ip登錄的某用戶。如圖所示,增加新用戶之後,退出,重新使用新用戶名和密碼進行登錄,登錄成功說明增加新用戶成功:
4.Web後端:PHP基礎
PHP是一種通用開源腳本語言,語法吸收了C語言、Java和Perl的特點,主要適用於Web開發領域。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。
1.在/var/www/html
目錄下新建一個PHP測試文件,簡單了解一下它的一些語法:vi test.php
<?php
echo ($_GET["a"]);
include($_GET["a"]);
echo "This is rhl php page!<br>";
?>
2.在瀏覽器網址欄中輸入localhost:80/test.php?a=/etc/passwd
,可看到/etc/passwd文件的內容:
3.利用PHP和MySQL結合之前編的登錄網頁進行簡單的用戶身份認證,這裏可以參考老師給的代碼編寫rhl.php
,代碼及配置如下所示:
<?php
$uname=$_POST["username"];
$pwd=$_POST["password"];
echo $uname;
$query_str="SELECT * FROM loginlist where username=‘$uname‘ and password=‘$pwd‘;";
$mysqli = new mysqli("127.0.0.1", "rhl", "toor", "rhl");
/* 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> {$uname}:Welcome!!! <br> ";
}
else {
echo "<br> login failed!!!! <br> " ; }
/* free result set */
$result->close();
}
$mysqli->close();
?>
4.將之前編的登錄網頁的logintest.html
代碼中form的action屬性由#改成rhl.php
,即登錄後跳轉到rhl.php,再在火狐瀏覽器中輸入localhost:80/logintest.html
訪問自己的登錄頁面
成功界面:
失敗界面:
5.SQL註入攻擊,XSS攻擊
- 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是永真式,所以這個條件永遠成立/
- XSS攻擊:跨站腳本攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆。故將跨站腳本攻擊縮寫為XSS。XSS是一種經常出現在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。比如這些代碼包括HTML代碼和客戶端腳本。攻擊者利用XSS漏洞旁路掉訪問控制——例如同源策略(same origin policy)。這種類型的漏洞由於被駭客用來編寫危害性更大的phishing攻擊而變得廣為人知。對於跨站腳本攻擊,黑客界共識是:跨站腳本攻擊是新型的“緩沖區溢出攻擊“,而JavaScript是新型的“ShellCode”。
1.將一張圖片存入/var/www/html目錄
2.在用戶名輸入框中輸入<img src="aa.jpeg" />
讀取/var/www/html目錄下的圖片:
三、實踐總結及體會
這次實驗一開始機器沒有默認裝PHP,發現後重裝,然後mysql又出現了問題!最後換了個虛擬機順利完成。這次實驗運用到JAVA、網頁制作等知識,重溫了以前的知識。同時利用sql註入、XSS攻擊等網絡攻擊,進行網頁的攻擊,雖然過程很是艱難,但做出來還是特別開心!
# 2017-2018-2 20155319 『網絡對抗技術』Exp8:Web基礎