【CyberSecurityLearning 52】Web架构安全分析(web工作机制、HTTP协议)
目錄
Web 工作機(jī)制
網(wǎng)頁(yè)、網(wǎng)站
Web容器
靜態(tài)頁(yè)面
中間件服務(wù)器
數(shù)據(jù)庫(kù)的出現(xiàn)
建立一個(gè)網(wǎng)站
HTTP 協(xié)議概述
概述
特點(diǎn)
URL
HTTP 報(bào)文分析
HTTP 工作模式
REQUEST
請(qǐng)求報(bào)文,如下
實(shí)驗(yàn)
RESPONSE
響應(yīng)報(bào)文如下:
狀態(tài)碼
主要字段
同源策略的條件
同源策略的探究
準(zhǔn)備兩個(gè)頁(yè)面
為什么學(xué)習(xí)這節(jié)課
我們學(xué)習(xí)滲透測(cè)試這門課程,主要針對(duì)的Web應(yīng)用,所以對(duì)Web 架構(gòu)需要一定的了解
上網(wǎng)瀏覽網(wǎng)站的所有東西:
??????????????????????????? ? ????
Web 工作機(jī)制
網(wǎng)頁(yè)、網(wǎng)站
我么可通過(guò)瀏覽器上網(wǎng)看到精美的頁(yè)面,一般都是經(jīng)過(guò)瀏覽器渲染的.html 頁(yè)面,其中包含css 等前端技術(shù)。多個(gè)網(wǎng)頁(yè)的集合就是網(wǎng)站。
Web容器
Web 容器,也叫Web 服務(wù)器,主要提供Web 服務(wù),也就是常說(shuō)的HTTP 服務(wù)。
常見的Web 容器有:Apache/IIS/Nginx 等。
Apache天生就支持PHP,IIS天生就支持.net ? .asp
靜態(tài)頁(yè)面
靜態(tài)頁(yè)面,都是些.html 文件,是純文本文件。這些文件中包含html 代碼。
HTML(HyperText Markup Language,超文本標(biāo)記語(yǔ)言),在瀏覽器中解釋運(yùn)行。
中間件服務(wù)器
以上這種,只能單向給用戶展示信息。隨著Web 的發(fā)展,信息要雙向流動(dòng),產(chǎn)生了交互的需求,也就是動(dòng)態(tài)網(wǎng)頁(yè)的概念;所謂動(dòng)態(tài)就是利用flash、php、asp、Java 等技術(shù)在網(wǎng)頁(yè)中嵌入一些可以運(yùn)行的腳本,用戶瀏覽器在解釋頁(yè)面時(shí),遇到腳本就啟動(dòng)運(yùn)行它。
腳本的使用讓W(xué)eb 服務(wù)模式有了雙向交流的能力,Web服務(wù)器模式也可以像傳統(tǒng)的軟件一樣進(jìn)行各種事務(wù)的處理,如編輯文件、利息計(jì)算、提交表單等,Web 架構(gòu)的適用面大大擴(kuò)展
這些腳本可以嵌入到頁(yè)面中,如JS等。也可以以文件的形式單獨(dú)存放在Web 服務(wù)器的目錄里,如.asp、.php、jsp 文件等。這樣功能性的腳本越來(lái)越多,形成常用的工具包,單獨(dú)管理,Web 業(yè)務(wù)開發(fā)時(shí),直接使用就可以了,這就是中間件服務(wù)器,它實(shí)際上時(shí)Web 服務(wù)器處理能力的擴(kuò)展。
數(shù)據(jù)庫(kù)的出現(xiàn)
靜態(tài)網(wǎng)頁(yè)與腳本都是事先設(shè)計(jì)好的,一般不經(jīng)常改動(dòng),但網(wǎng)站上的很多內(nèi)容需要經(jīng)常更新,將這些變動(dòng)的數(shù)據(jù)放在靜態(tài)網(wǎng)頁(yè)的程序中顯然不合適,傳統(tǒng)的辦法是數(shù)據(jù)與程序分離,采用的專業(yè)的數(shù)據(jù)庫(kù)。
Web 開發(fā)者在Web 服務(wù)器后邊增加了一個(gè)數(shù)據(jù)庫(kù)服務(wù)器,這些經(jīng)常變動(dòng)的數(shù)據(jù)被存進(jìn)數(shù)據(jù)庫(kù),可以隨時(shí)更新。當(dāng)用戶請(qǐng)求頁(yè)面時(shí),腳本根據(jù)用戶請(qǐng)求的頁(yè)面,涉及到動(dòng)態(tài)數(shù)據(jù)的地方,利用SQL數(shù)據(jù)庫(kù)語(yǔ)言,從數(shù)據(jù)中讀取最新的數(shù)據(jù),生產(chǎn)“完整”頁(yè)面,最后送給用戶
建立一個(gè)網(wǎng)站
源碼鏈接:https://pan.baidu.com/s/1lsn9gfOQ1TbNwIiIn-9MJw
提取碼:cy39
將源碼中的cms文件復(fù)制到phpstudy網(wǎng)站根目錄
cms文件夾中的install.sql(數(shù)據(jù)庫(kù)文件)
在include文件下有一個(gè)database.inc.php(數(shù)據(jù)庫(kù)配置文件)右鍵打開
新建一個(gè)cms數(shù)據(jù)庫(kù)(phpmyadmin)
導(dǎo)入,找到install.sql(先選中數(shù)據(jù)庫(kù)再去導(dǎo)入)
然后再刷新一下頁(yè)面
?
HTTP 協(xié)議概述
HTTP(HyperText Transfer Protocol,超文本傳輸協(xié)議,是傳遞消息的規(guī)范和要求。
-
概述
| @ | 1990 年提出的,當(dāng)前版本1.1。 |
| @ | HTTP 是用來(lái)將html 文檔從Web服務(wù)器傳輸?shù)絎eb瀏覽器。 |
| @ | 是一個(gè)請(qǐng)求和響應(yīng)的協(xié)議。客戶端發(fā)出請(qǐng)求,服務(wù)器端對(duì)請(qǐng)求給出回應(yīng)。 |
| @ | HTTP 使用可靠的TCP 連接,默認(rèn)端口80 |
-
特點(diǎn)
| @ | 支持瀏覽器/服務(wù)器模式 |
| @ | 簡(jiǎn)單快速:瀏覽器向服務(wù)器提出請(qǐng)求時(shí),只需要傳送請(qǐng)求方法和請(qǐng)求路徑 |
| @ | 靈活:HTTP 運(yùn)行傳輸任意類型的數(shù)據(jù)對(duì)象(包括html,jpg,mp3) |
| .html | ? | 純文本 |
| .jpg | ? | 圖片 |
| .mp3 | ? | 音頻 |
| @ | HTTP 協(xié)議是無(wú)狀態(tài)的協(xié)議 |
?
-
URL
統(tǒng)一資源定位符(網(wǎng)址),用來(lái)告訴Web 容器,瀏覽器所請(qǐng)求的資源(文件)的路徑。例如:http://localhost/test/requests.php?id=32
上面那個(gè)url為什么沒(méi)有用戶名和密碼?
省略了。因?yàn)橐粋€(gè)web服務(wù)發(fā)布到互聯(lián)網(wǎng)上就是想讓他匿名訪問(wèn)
證明用戶名和密碼的存在:ftp://1901:123.com@10.0.105.223
URL格式:
Schema://login:password@adress:port/path/to/resource/?query_string#fragment
schema://????????????? 是協(xié)議的名稱
login:password??? 用戶名和密碼
@adress ? ? ? ? ? ??? 地址(包括ip地址或者域名)
port??????????????????????? 默認(rèn)80,其他要加上
/path/to/resource/? 資源的路徑
?query_string ? ? ? ? 查詢字符串
fragment???????????????? 錨點(diǎn)(實(shí)現(xiàn)頁(yè)面定位)
| Port | ? | 80 |
| Login | ? | 用戶名 |
| Password | ? | 密碼??? |
| Fragment | ? | 錨點(diǎn) |
| @ | URL編碼 |
URL 只允許出現(xiàn)的字符是有限制的,URL 中path 開始允許直接出現(xiàn)[A-Z][a-z][0-9] 、半角減號(hào)(-)、下劃線句點(diǎn)(。)、波浪號(hào)(~)。其他字符均會(huì)被百分號(hào)編碼(包括空格)
如下:
| # | ? | %23 |
| [?? ]空格 | ? | %20 |
url編碼原理:%+ASCII碼十六進(jìn)制形式
url編碼的時(shí)候不要用中文
在進(jìn)行編程的時(shí)候,會(huì)用[+]加號(hào)代替空格。
| @ | 報(bào)文分析工具 |
1、F12
2、wireshark
3、fiddler
4、Burp suite
…
HTTP 報(bào)文分析
Web 應(yīng)用的所有通信的消息都要遵守HTTP 協(xié)議的規(guī)范和要求。
-
HTTP 工作模式
-
REQUEST
-
請(qǐng)求報(bào)文,如下
-
GET /php/test/get.php HTTP/1.1
Host: 192.168.1.136
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.1.136/php/test/
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
安利一幾款代理工具:
Proxy Switcher and Manager
direct直連(就是不使用任何代理)
HTTP 請(qǐng)求由請(qǐng)求行、請(qǐng)求頭、請(qǐng)求正文三部分組成
1、請(qǐng)求行:方法,資源路徑,協(xié)議/版本
方法:GET
資源路徑:/php/test/get.php
協(xié)議/版本:HTTP/1.1
2、請(qǐng)求頭
從請(qǐng)求報(bào)文第二行開始到第一個(gè)空行為止的內(nèi)容。其中包含很多字段
請(qǐng)求頭和請(qǐng)求正文有一個(gè)空格,請(qǐng)求行和請(qǐng)求頭之間沒(méi)有空格
3、請(qǐng)求正文
以上方法(GET方式)沒(méi)有請(qǐng)求正文,后面會(huì)看到(POST有請(qǐng)求正文)
?
請(qǐng)求方法:(請(qǐng)求行有哪些字段)
| GET | 最常用的方法,通常用戶請(qǐng)求服務(wù)器發(fā)送的某個(gè)資源。 |
| POST | 可以向服務(wù)器提交參數(shù)以及表單,包括文件流等 |
| HEAD | 與GET 方法類似,但在服務(wù)器響應(yīng)中只返回首部 |
| PUT(危險(xiǎn)) | 與GET 從服務(wù)器讀取文檔相反,PUT 方法會(huì)向服務(wù)器寫入文檔 |
| TRACE | 回顯瀏覽器的請(qǐng)求 |
| OPTIONS | 請(qǐng)求Web 服務(wù)器告知其支持的各種功能 |
| DELETE | 請(qǐng)求服務(wù)器刪除請(qǐng)求URL所指定的資源(可以刪除任意文件) |
如果我們服務(wù)器開啟了PUT、TRACE、DELETE任意一個(gè)方法,我們就認(rèn)為服務(wù)器很危險(xiǎn)!
-
實(shí)驗(yàn)
使用telnet 模擬瀏覽器發(fā)送HTTP 請(qǐng)求
http協(xié)議特點(diǎn)是簡(jiǎn)單快速,我們?cè)谡?qǐng)求資源的時(shí)候只需要發(fā)送請(qǐng)求資源和路徑
可以構(gòu)造一個(gè)http請(qǐng)求報(bào)文:
在win7中開啟telnet訪問(wèn):控制面板---程序---打開或關(guān)閉windows功能---勾選telnet客戶端---確定
利用telnet發(fā)送get請(qǐng)求:
telnet? 172.16.132.161 80
------------------
GET /php/test/get.php HTTP/1.1(請(qǐng)求方法+資源路徑+協(xié)議版本)
HOST:172.16.132.161
-----------------
回車后一片空白(敲ctrl+]打開回顯)
再按回車進(jìn)入空白界面,把上面報(bào)文粘貼
再回車一下,就可以看到服務(wù)器的響應(yīng)
Telnet www.baidu.com 80
----------------
GET / HTTP/1.1
Host: www.baidu.com
-----------
回車,看到html(用cmd)
在虛擬機(jī)里面新建一個(gè)baidu.html文件,把上面代碼粘貼進(jìn)去,訪問(wèn)
這樣就可以通過(guò)telnet去模擬瀏覽器發(fā)送http請(qǐng)求
利用OPTIONS 方法測(cè)試Web 服務(wù)器允許的HTTP請(qǐng)求
---------------
OPTIONS / HTTP/1.1
Host: 192.168.1.136
-------
利用telnet 傳送GET 參數(shù)
-------------
??? GET /php/test/get.php?name=AJEST&pwd=123456 HTTP/1.1
??? Host: 192.168.1.136
-------------
利用telnet 模擬POST,請(qǐng)求傳遞參數(shù)
---------------
POST /php/test/post.php?http://192.168.1.136/php/test/post.php HTTP/1.1
Host: 192.168.1.136
Content-Type: application/x-www-form-urlencoded
Content-Length: 19
name=GGG&pwd=123456
-------------
想用一種簡(jiǎn)單的方法用post方式提交數(shù)據(jù):(否則還要寫一個(gè)表單)
工具:hackbar
請(qǐng)求頭有哪些字段:
| Host | 主要用與指定被請(qǐng)求資源的Internet 主機(jī)和端口號(hào) |
| User-Agent | 瀏覽器指紋 |
| Referer | 包含一個(gè)URL,代表當(dāng)前的URL的上一個(gè)URL(就是我們這么這個(gè)請(qǐng)求是從哪一個(gè)頁(yè)面跳轉(zhuǎn)過(guò)來(lái)的) |
| Cookie | 記錄請(qǐng)求者的身份認(rèn)證信息 |
| Accept-Charset | 用戶指定客戶端接受的字符集 |
| Content-Type | 用于向接收方知識(shí)實(shí)體的介質(zhì)類型(就是數(shù)據(jù)類型) |
| Content-Length | 用于指明實(shí)體正文的長(zhǎng)度,以字節(jié)的方式存儲(chǔ)的十進(jìn)制數(shù)字來(lái)表示 |
| Last-Modified | 用于指示資源的最后修改時(shí)間和日期 |
?
?
?
RESPONSE
-
響應(yīng)報(bào)文如下:
---------------------------------------------------------------------------------
HTTP/1.1 200 OK
Date: Sat, 25 Apr 2020 09:50:59 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Content-Length: 13
Connection: close
Content-Type: text/html
array(0) {
}
------------------------------------------------------------------------------
響應(yīng)報(bào)文由狀態(tài)行(響應(yīng)行)、響應(yīng)報(bào)頭、響應(yīng)正文三部分組成。
1、狀態(tài)行:協(xié)議/版本,狀態(tài)代碼,描述短語(yǔ)
協(xié)議/版本:HTTP/1.1
狀態(tài)代碼:200
描述短語(yǔ):OK
2、響應(yīng)報(bào)頭
第二行開始到第一個(gè)空行為止的所有內(nèi)容,其中包含了關(guān)于HTTP響應(yīng)的重要字段。
3、響應(yīng)正文
服務(wù)器返回資源的內(nèi)容,即瀏覽器接收到的HTML 代碼。
?
狀態(tài)碼
| 100~199 | 信息性狀態(tài)碼(少見) |
| 200~299 | 成功狀態(tài)碼(最常見,2開頭就是請(qǐng)求成功) |
| 300~399 | 重定向狀態(tài)碼 |
| 400~499 | 客戶端錯(cuò)誤狀態(tài)碼 |
| 500~599 | 服務(wù)器錯(cuò)誤狀態(tài)碼 |
寫一個(gè)重定向代碼:
location.php: <?php header("Location:./get.php"); ?>//我沒(méi)在訪問(wèn)location.php的瞬間會(huì)直接到get.php頁(yè)面主要字段
| Server | 服務(wù)器指紋 |
| Set-Cookie | 向?yàn)g覽器端設(shè)置Cookie |
| Last-Modified | 服務(wù)器通過(guò)這個(gè)頭信息告訴瀏覽器,資源的最后修改時(shí)間 |
| Content-Length | 請(qǐng)求正文長(zhǎng)度 |
| Location | 重定向目標(biāo)頁(yè)面 |
| Refresh | 服務(wù)器通過(guò)Refresh頭告訴瀏覽器定時(shí)刷新瀏覽器 |
同源策略的條件
- URL 的主機(jī)(FQDN:Fully Qualified Domain Name 全程域名)一致
- Schema 一致
- 端口號(hào)一致
同源策略的保護(hù)對(duì)象不僅僅時(shí)iframe 內(nèi)文檔。比如實(shí)現(xiàn)Ajax 時(shí)所使用的XMLHttpRequest 對(duì)象能夠訪問(wèn)的 URL也受到了同源策略的限制。
sop叫同源策略
同源策略的探究
-
準(zhǔn)備兩個(gè)頁(yè)面
-
-------index.html
??? <html>
??? <head>
??? <title> 跨 frame 的讀取實(shí)驗(yàn) </title>
??? <meta charset="utf-8">
??? </head>
??? <body>
??? <iframe name="iframe1" width="300" height="80"
??? src="http://192.168.3.10/sop/iframe.html"
??? >
??? </iframe>
??? <input type="button" οnclick="go()" value=" 密碼: ">
??? <script>
??? function go(){
??? try {
??? var x = iframe1.document.form1.passwd.value;
??? document.getElementById('out').innerHTML = x;
??? } catch (e){
??? alert(e.message);
??? }
??? }
??? </script>
??? <span id="out"></span>
??? </body>
??? </html>
--------
--------iframe.html
??? <html>
??? <head>
??? <meta charset="utf-8">
??? </head>
??? <body>
??? <form name="form1"> iframe 的內(nèi)層
??? 密碼 <input type="text" name="passwd" value="password1">
??? </form>
??? </body>
??? </html>
--------
這里我們使用我們服務(wù)器的瀏覽器測(cè)試這個(gè)實(shí)驗(yàn)(因?yàn)槲覀円褂貌煌膬蓚€(gè)URL來(lái)訪問(wèn)我們的網(wǎng)頁(yè))
我們用指定的IP訪問(wèn),可以正常讀取
當(dāng)時(shí)當(dāng)我們使用我們本機(jī)的回環(huán)地址去訪問(wèn)時(shí),打開頁(yè)面,無(wú)法讀取(這就是由同源策略限制,無(wú)法訪問(wèn)內(nèi)層iframe)
?
總結(jié)
以上是生活随笔為你收集整理的【CyberSecurityLearning 52】Web架构安全分析(web工作机制、HTTP协议)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 作者:李友元(1986-),男,西南财经
- 下一篇: 作者:张金芳(1970-),男,中国科学