什麼是表單javascript
表單能夠收集用戶的信息和反饋意見,是網站管理者與瀏覽者之間溝通的橋樑。php
一個表單有三個基本組成部分html
表單標籤前端
表單域:包含了文本框、密碼框、隱藏域、多行文本框、複選框、單選框、下拉選擇框和文件上傳框等java
表單按鈕:包括提交按鈕、復位按鈕和通常按鈕.mysql
瀏覽器能夠解析運行什麼語言web
此次實驗過程當中遇到了很多問題,但都解決了,感受很開心,特別是最後的圖片顯示出來了。經過實驗也感覺到對MySQL數據庫的使用比較不熟練,常常會忘記在命令後面加分號啊什麼的。從此次實驗也初步瞭解了一些web攻擊的基礎知識,在web開發時要注意避免常見的攻擊手段。sql
使用apache -v
查看本機安裝Apache
的版本狀態。數據庫
使用netstat -aptn
查看端口占用狀況。apache
使用vi /etc/apache2/ports.conf
對apache所要佔用的端口進行設置,這裏把偵聽端口改成了本身的學號5330。
經過systemctl start apache2
開啓Apach。
再次使用netstat -aptn
查看端口占用(在這以前kill掉了佔用其餘端口的進程),發現apache2佔用5330端口。
測試apache是否正常工做:在kali的firefox
瀏覽器上輸入127.0.0.1:5330
或localhost:5330
(這裏的端口號爲/etc/apache2/ports.conf
下設置的Apache監聽端口號,我設置爲了本身的學號。localhost指kali的IP地址(這裏我用了迴環地址一樣能夠測試))。測試結果以下:
使用如下命令在/var/www/html
目錄下編輯測試網頁test.html
。
cd /var/www/html touch test.html vi test.html
在firefox
瀏覽器中輸入網址127.0.0.1:5330/test.html
打開該網頁
點擊login
頁面發生跳轉,但跳轉失敗。緣由是尚未編寫php後端文件。
對網頁代碼進行改進,加入JavaScript語句。
在/var/www/html
目錄下編輯測試php文件login.php
。
<?php echo ($_GET["a"]); include($_GET["a"]); echo "This is lxm php test page!<br>"; ?>
在瀏覽器打開127.0.0.1:5330/login.php?a=/etc/passwd
可看到/etc/passwd文件的內容
使用/etc/init.d/mysql start
命令開啓sql服務。
輸入mysql -u root –p
,並根據提示輸入密碼(默認密碼爲p@ssw0rd
),進入MySQL.
輸入show databases;
,查看基本信息
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
,輸入密碼檢測新密碼可否成功使用,登錄成功。
create database zy;
創建一個數據庫use zy;
進入數據庫create table zy (username VARCHAR(20),password VARCHAR(20));
創建一個數據表insert into zy values('zy','5330');
添加數據庫的信息select * from zy;
查看數據庫中內容
新建用戶:grant select,insert,update,delete on 數據庫.* to 用戶名@localhost identified by "密碼";
將對某數據庫的全部表的select,insert,update,delete權限授予某用戶。
退出後,輸入mysql -u 用戶名 –p
登陸。成功。
在/var/www/html文件夾下編輯test2.html
<html> <html> <head> <title>test2</title> </head> <body> <form name="login" method="POST" action="login.php"> <table> <tr><td>username:</td><td><input type="text" name="username" onfocus="if (this.value=='Your name') this.value='';" /></td></tr> <tr><td>password:</td><td><input type="password" name="userpwd" onfocus="if (this.value=='Your password') this.value='';" /></td></tr> </table> <input type="submit" value="login" onClick="return validateLogin()"/> <input type="reset" value="reset"> </form> <script language="javascript"> function validateLogin(){ var sUserName = document.login.username.value ; var sPassword = document.login.password.value ; if ((sUserName =="") || (sUserName=="Your name")){ alert("user name"); return false ; } if ((sPassword =="") || (sPassword=="Your password")){ alert("password!"); return false ; } } </script> </body> </html>
在firefox
瀏覽器中輸入127.0.0.1:5330/test2.html
,就能夠訪問本身的登錄頁面啦
在登陸頁面中輸入數據庫中存有的用戶名和密碼並點擊提交進行用戶認證登陸成功,輸入數據庫中沒有的就會認證失敗
登錄成功。
最後發現是php文件中的$mysqli = new mysqli("127.0.0.1", "zy", "123456", "zy");
語句裏的值有問題。通過更改後成功登錄。第一個zy
對應的是MySQL的用戶名,123456
是用戶密碼,第二個zy
是所要使用的數據庫名。
這個漏洞是由語法形成的漏洞,接下來對剛剛本身創建的登陸網站進行注入。
構造SQL注入語句:在用戶名輸入框中輸入' or 1=1#
,密碼隨便輸入,此時合成後的SQL查詢語句爲select * from users where username='' or 1=1#' and password=m''
即如下的兩句sql語句等價:
select * from users where username='' or 1=1#' and password=''
select * from users where username='' or 1=1
「#」號的做用是註釋掉後面的語句,而1=1
做爲永真式表示永遠是都是成立的,即where子句老是爲真,因此可以成功登陸。
if ($result = $mysqli->query($query_str))
判斷語句不容許多條sql語句執行,因此將它改爲if ($result = $mysqli->multi_query($query_str))
用於執行多個sql語句。在用戶名輸入框中輸入';insert into lxmtable values('xx','5330','1234567890');#
,拆開來看就是
SELECT * FROM lxmtable WHERE username='';
insert into lxmtable values('xx','5330','1234567890');
查看數據庫中的數據,發現新增了一條xx 5330
的數據,說明插入成功
使用插入的用戶名和密碼登陸。
成功。
在用戶名輸入框中輸入<img src="22.png" />
讀取/var/www/html
目錄下的圖片:
一開始沒法顯示圖片
在/var/www/html
目錄下經過chmod 755 22.png
獲取圖片權限後成功。
解決問題 「You don't have permission to access /index.html on this server.」