2017-2018-2 20155315《網絡對抗技術》Exp8 :Web基礎

實驗目的

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

實驗內容

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

實驗步驟

(一)Web前端HTML

Apache

  • 查看Apache的配置文件 /etc/apache2/apache2.conf ,能夠看到偵聽端口的配置文件名php

  • 虛擬機裏已經存在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」
  • 在Apache的工做目錄下新建一個html文件並經過瀏覽器打開

(二) Web前端javascipt

基礎知識理解

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

JavaScript編程

  • 在前面html編程的基礎上,加上判斷用戶名和密碼的JavaScript語句
  • 測試一下,當用戶名或密碼爲空的時候,彈出警告框

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

  • 前端的設計告一段落,接下來就要處理咱們從網頁上提交的數據了,這裏咱們使用MySQL來處理數據
  • 由於用的老師的虛擬機因此已經安裝MySQL了,若是沒有,使用apt-get install mysql-server mysql-client mysql-workbench安裝MySQL
  • 啓動MySQL:service start/stop/restart mysql
  • 登陸數據庫:mysql -u root -p,密碼爲p@ssw0rd,若出現錯誤,多重啓幾回數據庫就能夠了
  • 密碼有點複雜,爲方便作實驗就改個密碼吧update user set password=PASSWORD("5315") where user='root';
  • 更新權限flush privileges;
  • 退出quit;再從新登陸,使用咱們更改修改的密碼就能夠了
  • 使用CREATE SCHEMA `數據庫名`;建立一個名爲test的數據庫,使用show databases;能夠看到建立成功
  • 使用咱們剛剛建立的數據庫use 數據庫名
  • 使用create table 表名 (字段1,字段2 ···);,查看一下,建立成功
  • 使用insert into 表名 values('數值1''數值2''···');添加數據
  • 建立一個新用戶便於後面的實驗,給新用戶提供全部的權限grant all privileges on 數據庫名.* to 用戶名@localhost identified by '密碼';,更新權限flush privileges;並退出
  • 使用咱們剛剛建立的用戶名和密碼登陸數據庫,登錄成功
  • 重複上面的步驟,建數據庫、建表、插入數據。值得注意的是,咱們在以前只爲新用戶的某個具體的數據庫分配了權限,所以這裏只能建立名字和前面同樣的數據庫,若是想要建立新的數據庫,能夠按照這裏的教程先建立用戶、建立數據庫再分配權限。

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

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

    <?php
    include($_GET["a"]);
    ?>
  • 瀏覽器打開 127.0.0.1:80/test.php?a=/etc/passwd可看到/etc/passwd文件的內容
  • 編寫獲取表單數據,myspli的參數分別爲本機IP地址、用戶名、密碼、數據庫名
  • 在網頁輸入同戶名和密碼,能夠看到成功鏈接到數據庫
    linux

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

SQL注入

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

  • 編寫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('hhh','ccc');--能夠看到雖然登陸失敗,但咱們已經在表中插入了一個新用戶
  • 這時,咱們要將代碼改回原來的,再使用新的用戶名和密碼就能夠登陸了
  • 咱們平常接觸的網頁都是不容許輸入多條查詢語句的,並且爲了不網頁遭受SQL注入,在編寫後端php網頁的時候就要注意將查詢語句分開,或者對輸入的字符串進行處理,去掉註釋符等特殊符號,這樣才能使網頁更安全。

XSS攻擊測試

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

  • 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="4.png" />,注入成功
  • 輸入<a href="text.txt">open test</a>若存放網頁的文件夾下有一個「test.txt」,咱們就能夠直接打開了
    sql

  • 一開始我一直沒有顯示圖片,發現是由於我一開始的代碼中並無直接將網頁提交的用戶名顯示出來,因此JavaScript的代碼沒法執行。也就是說,要想抵禦XSS攻擊,最好是設計代碼對數據進行一些處理而不是直接顯示。

實驗問題回答

  • 什麼是表單
    • 表單是用來採集輸入的數據的
    • 表單由三個部分組成
      • 表單標籤:這裏麪包含了處理表單數據所用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、數據庫鏈接的功能,讓咱們直觀地體會到一個網站運行的過程當中參數的傳遞和應用,更明白網頁攻擊的原理與過程。作此次實驗的過程當中想到了不少以前使用過的漏洞,要想作一個徹底安全的網頁要考慮不少,數據庫參數的鏈接、字符串等都要進行一些特殊的處理才能真正達到安全的須要。

參考資料

相關文章
相關標籤/搜索