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

實驗目的

理解HTML,學會Web前端、Web後端和數據庫編程及SQL注入、XSS攻擊測試
教程php

實驗內容

  • 操做程序規律
    • 運行腳本或可執行文件
    • 查看配置文件
    • 出錯找日誌
  • Web前端HTML
    • 能正常安裝、啓停Apache。理解HTML,理解表單,理解GET與POST方法,編寫一個含有表單的HTML。
  • Web前端javascipt
    • 理解JavaScript的基本功能,理解DOM。編寫JavaScript驗證用戶名、密碼的規則。
  • Web後端:MySQL基礎:正常安裝、啓動MySQL,建庫、建立用戶、修改密碼、建表
  • Web後端
  • 最簡單的SQL注入,XSS攻擊測試
    • 功能描述:用戶能登錄,登錄用戶名密碼保存在數據庫中,登錄成功顯示歡迎頁面。

實驗步驟

(一)Web前端HTML

Apache

  • 使用service apache2 start啓動Apache。使用netstat -aptn查看端口信息,看到80端口被Apache2監聽,啓動成功
    html

    若是有其餘應用有端口衝突,能夠修改ports.conf前端

  • 對Apache進行測試:打開網頁127.0.0.1:80可打開上次實驗克隆的網頁,在Apache的工做目錄下/var/www/html編輯一個測試文件,咱們就能夠只在在網頁打開看到了
    java

HTML編程

  • 編寫一個簡單網頁,包含一個表單,輸出用戶名、密碼而後提交,提交以後會跳轉到「login.php」mysql

  • 在Apache的工做目錄下新建一個html文件並經過瀏覽器打開
    linux

(二) Web前端javascipt

基礎知識理解

  • 什麼是FORM(表單)
    • 表單至關於一個數據容器,提交表單的同時會將容器中的全部數據提交給後臺處理
  • 表單的兩種提交方法,GET和POST
    • GET - 從指定的資源請求數據,只應當用於取回數據,不該在處理敏感數據時使用
    • POST - 向指定的資源提交要被處理的數據
    GET POST
    可被緩存 不會被緩存
    保留在瀏覽器歷史記錄中 不會保留在瀏覽器歷史記錄中
    可被收藏爲書籤 不能被收藏爲書籤
    對數據有長度限制 對數據沒有長度限制
  • Javascript事件
    • 指的是能夠出發JavaScript的條件,如點擊、劃過、選中等

JavaScript編程

  • 在前面html編程的基礎上,加上判斷用戶名和密碼的JavaScript語句
function submit()
{ 
    if(document.form.password.value==""   || document.form.username.value=="")
    {
        alert("please input your name!");
        window.location.href="login.html"
    
    }   
    else
       form.submit();
}
  • 按照老師的教程,將原來的action改爲一個php文件的名字,例如:<form action="login.php" method="post"
  • 要注意添加javascript的相關代碼,個人代碼實現了利用javascript檢查用戶名或密碼是否爲空,若爲空則彈出提示框並從新跳轉回登陸界面:

(三)Web後端:MySQL基礎:正常安裝、啓動MySQL,建庫、建立用戶、修改密碼、建表

  • 前端的設計告一段落,接下來就要處理咱們從網頁上提交的數據了,這裏咱們使用MySQL來處理數據git

  • 啓動MySQL:直接運行/etc/init.d/mysql start開啓MySQL服務就能夠
    web

  • 登陸數據庫:mysql -u root -p,密碼爲p@ssw0rd,直接複製粘貼進去就行
    sql

  • show databases;查看數據庫基本信息注意這裏每一個sql語句要以分號爲結尾

  • 輸入use mysql;選擇使用mysql這個數據庫

  • 輸入select user, password, host from user;查看當前用戶信息

  • 輸入update user set password=PASSWORD("新密碼") where user='root';更改密碼
  • 更新權限flush privileges;

  • 退出quit;再使用新密碼從新登陸mysql -u root -p,用咱們更改修改的密碼就能夠了

  • 使用create databases `數據庫名`;建立一個名爲tky的數據庫,使用show databases;能夠看到建立成功

  • 使用咱們剛剛建立的數據庫use tky

  • 使用create table 表名 (字段1,字段2 ···);,建立數據表。
    • create table user (username VARCHAR(20),password VARCHAR(20));
  • 使用insert into 表名 values('數值1''數值2''···');添加數據
    • insert into user values('20165230','5230');向表中username password兩個字段插入數據,即用戶名爲20165230,密碼爲5230
  • 建立一個新用戶便於後面的實驗,給新用戶提供全部的權限grant all privileges on 數據庫名.* to 用戶名@localhost identified by '密碼';,更新權限flush privileges;並退出

  • 使用咱們剛剛建立的用戶名和密碼登陸數據庫,登錄成功
  • 重複上面的步驟,建數據庫、建表、插入數據。值得注意的是,咱們在以前只爲新用戶的某個具體的數據庫分配了權限,所以這裏只能建立名字和前面同樣的數據庫,若是想要建立新的數據庫,能夠按照這裏的[教程]先建立用戶、建立數據庫再分配權限。

(四)Web後端:編寫PHP網頁,鏈接數據庫,進行用戶認證

  • 前面提到咱們的網頁會將數據提交到login.php,所以要想處理數據,咱們要編寫本身的PHP網頁。若是電腦裏沒有php,使用sudo apt-get install php安裝
  • 在工做目錄下編寫測試文件

    <?php
    include($_GET["a"]);
    ?>
  • 瀏覽器打開 127.0.0.1:80/test.php?a=/etc/passwd可看到/etc/passwd文件的內容,以下圖所示

注:若是想這裏測試成功,首先須要保證apache成功開啓(service apache2 start)

  • 編寫獲取表單數據,myspli的參數分別爲本機IP地址、用戶名、密碼、數據庫名

  • 在網頁輸入同戶名和密碼,能夠看到成功鏈接到數據庫

(五)最簡單的SQL注入,XSS攻擊測試

SQL注入

SQL注入漏洞是指在Web應用對後臺數據庫查詢語句處理存在的安全漏洞。也就是,在輸入字符串中嵌入SQL指令,在設計程序中忽略對可能構成攻擊的特殊字符串的檢查。後臺數據庫將其認做正常SQL指令後正常執行,可能實現對後臺數據庫進行各類操做,甚至形成破壞後臺數據庫等嚴重後果。

  • 編寫php頁面的時候咱們直接將輸入的參數與查詢語句進行鏈接,這樣咱們只要輸入一些特殊字符如註釋的符號就能夠進行SQL注入攻擊了
  • 輸入框中鍵入'or 1=1 -- 而且提交,能夠看到鏈接成功。這是由於此時查詢語句爲select * from users where name='' or 1=1 --'and password='1';而「--」在MySQL表明註釋,查詢語句實際爲select * from users where name='' or 1=11=1爲永真式,則這個條件恆成立,所以數據庫不會報錯

  • 攻擊成功!

  • 那咱們是否是也能夠經過注入插入一個新的用戶呢?要注意的是咱們以前編的代碼if ($result = $mysqli->query($query_str))是不容許輸入多條查詢語句的,現實生活中也應該是不容許的,但這裏爲了實驗咱們須要代碼能容許輸入多條查詢語句。
  • 修改代碼爲if ($result = $mysqli->multi_query($query_str)),在登陸界面輸入';insert into user values('tky','tky');--
  • 能夠看到雖然登陸失敗,但咱們已經在表中插入了一個新用戶

  • 這時,咱們要將代碼改回原來的,再使用新的用戶名和密碼就能夠登陸了

  • 咱們平常接觸的網頁都是不容許輸入多條查詢語句的,並且爲了不網頁遭受SQL注入,在編寫後端php網頁的時候就要注意將查詢語句分開,或者對輸入的字符串進行處理,去掉註釋符等特殊符號,這樣才能使網頁更安全。

XSS攻擊測試

XSS就是在網站任何接受正常文本輸入的地方,輸入Javascript腳本,並讓腳本執行。

  • XSS分爲三種類型:
    • 反射型:發出請求時,XSS代碼出如今URL中,做爲輸入提交到服務器端,服務器端解析後響應,XSS隨響應內容一塊兒返回給瀏覽器,最後瀏覽器解析執行XSS代碼,這個過程就像一次發射,因此叫反射型XSS。
    • 存儲型: 存儲型XSS和反射型的XSS差異就在於,存儲型的XSS提交的代碼會存儲在服務器端(數據庫,內存,文件系統等),下次請求目標頁面時不用再提交XSS代碼。
    • DOM:不通過後端,DOM—based XSS漏洞是基於文檔對象模型Document Objeet Model,DOM)的一種漏洞,dom - xss是經過url傳入參數去控制觸發的。
  • 也就是說,用戶提交的數據中若是含有js代碼,從數據庫中讀出來的時候這段js代碼就變成了可執行的代碼。
  • 在用戶名輸入框中輸入<img src="login.png " />,讀取/var/www/html目錄下的圖片
  • 運行結果以下所示,正確顯示了網頁背景圖:

實驗問題回答

  • 什麼是表單
    • 表單是用來採集輸入的數據的
    • 表單由三個部分組成
      • 表單標籤:這裏麪包含了處理表單數據所用CGI程序的URL以及數據提交到服務器的方法
      • 表單域:包含了文本框、密碼框、隱藏域、多行文本框、複選框、單選框、下拉選擇框和文件上傳框等
      • 表單按鈕:包括提交按鈕、復位按鈕和通常按鈕;用於將數據傳送到服務器上的CGI腳本或者取消輸入,還能夠用表單按鈕來控制其餘定義了處理腳本的處理工做
  • 瀏覽器能夠解析運行什麼語言。
    • 瀏覽器能夠解析HTML,XML,Python,PHP,JavaScript,ASP等腳本語言。
  • WebServer支持哪些動態語言
    • ASP全名Active Server Pages,是一個WEB服務器端的開發環境,ASP採用腳本語言VBScript(Java script)做爲本身的開發語言。
    • PHP是一種跨平臺的服務器端的嵌入式腳本語言。它大量地借用C,Java和Perl語言的語法,並融合PHP本身的特性,使WEB開發者可以快速地寫出動態產生頁面
    • JSP全名Java ServerPage,能夠在Servlet和JavaBean的支持下,完成功能強大的站點程序

實驗總結

此次實驗在本來的網頁編程基礎上增長了不少如php、數據庫鏈接的功能,讓咱們直觀地體會到一個網站運行的過程當中參數的傳遞和應用,更明白網頁攻擊的原理與過程。作此次實驗的過程當中想到了不少以前使用過的漏洞,要想作一個徹底安全的網頁要考慮不少,數據庫參數的鏈接、字符串等都要進行一些特殊的處理才能真正達到安全的須要。

參考資料

相關文章
相關標籤/搜索