早期的互聯網非常的單調,一般只有靜態頁面,現在,隨著技術的發展,web上大多數站點實際上是web應用程序,在伺服器和瀏覽器之間進行雙向的信息傳遞。他們支持註冊登錄,金融交易,搜索及用戶創作的內容。用戶只需要擁有一個瀏覽器,就能實現各種功能。
Web 是指一個網站的前端頁面到後端服務,比如我們常見的 Javascript、PHP、Python、Mysql、jQuery、Docker 等,包括開發、運維這些服務。
所以在我看來 Web 安全也就是從安全的角度探索 Web 的一種方式。
為了能夠更簡單的理解一些常見漏洞,我們首先來看一下這份試卷:
試卷考生姓名:
考生學號:
一、詩歌補寫
床前沒月光,。
春眠不覺曉,。
二、數學運算(在括弧內填入數字)
3 500 +400 * 3 / 2 + 1 =
4 ( 1 + 2) / 3 * 400 +500 =
考生姓名:
考生學號:
首先我們來看這個,試卷的名字和編號填寫,這個部分有「漏洞」嗎?有
學生的姓名和編號都寫在這兒,沒有做任何保護措施,因此,你只要偷看了某人的試卷上的這部分內容,然後把你的試卷的上的姓名和考生編碼寫成和他一樣的即可偽裝出他的身份。
漏洞攻擊成功
一、詩歌補寫
床前沒月光,。
春眠不覺曉,。
這道題有漏洞嗎?有
這道題的答案本來應該是「疑似地上霜」和「處處聞啼鳥」
But,問題中,並沒有規定答案里不能添加標點符號,所以,我完全可以把「疑是地上霜,舉頭望明月,低頭思故鄉」以及「處處聞啼鳥,夜來風雨聲,花落知多少」當做答案寫進去。
漏洞再次進攻成功:P
二、數學運算(在括弧內填入數字)
3 500 +400 * 3 / 2 + 1 =
4 ( 1 + 2) / 3 * 400 +500 =
這個問題有漏洞嗎?有
出題者規定了只能填入數字,但卻沒有說是什麼數字,也沒有規定多少位,那麼我的答案可以是
中文數字「壹佰壹拾圓」、羅馬數字「MCI」或「0000000000001101」。
漏洞第三次進攻成功 XXD
這份試卷簡單的模擬了Web漏洞的攻擊思想,在實際中,我們打開一個網頁提交登錄或者是搜索都會經過伺服器做的一系列處理又回到瀏覽器,在這個過程中我們提交的數據會被帶入到一系列的填空題中,有的是我們能猜到的,有的則是意想不到的,有的會經過SQL查詢進行填空,有的會被帶入到命令行中進行執行,最後又把結果返回給瀏覽器進行填空,也就是最後我們看到的結果。
在數據的傳輸中,我們可以把 web 簡單的分為幾個層次:
- 瀏覽器:瀏覽器即客戶端,提供客戶端和伺服器端的數據信息交互。
- http:客戶端與web伺服器進行交互時就存在web請求,這種請求都基於統一的應用層協議——HTTP協議來交互數據。http屬於輕量級協議,無需連接,提供了對通信錯誤的容錯性。
- 中間件:中間件是位於平台(硬體和操作系統)和應用之間的通用服務
- Server容器:Server容器負責解析用戶請求和腳本語言,類似的有Tomcat,JBoss等。我們訪問網頁看到是web容器處理后的內容。
- 資料庫:動態頁面可提供互動式的信息查詢服務,主要依賴於web資料庫的實現,對外提供包含 表單的Web頁面作為訪問介面,查詢結果也以包含數據列表的Web頁面形式返回給用戶。
當然除了這些數據也有可能流向不些不可見的第三方服務商。
下圖就展示了數據的傳輸流程,以及不同階段經常出現的漏洞及其原因:
我們常見的Web漏洞類型主要有SQL注入、XSS、遠程命令執行以及越權等。以下我們分別用舉例的形式為大家介紹這幾種漏洞。
(SQL注入)
所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令。
- select * from username = ____ and password=_____
- select * from username "test" or ""="" and password="123456"
(XSS)
XSS則是攻擊者往Web頁面里插入惡意Script代碼,當用戶瀏覽該頁之時,嵌入Web裡面的Script代碼會被執行,從而達到惡意攻擊用戶的目的。
你好啊,尊敬的______
你好啊,尊敬的 xxx
(遠程命令執行)
而遠程命令執行,是用戶通過瀏覽器提交執行命令,由於伺服器端沒有針對執行函數做過濾,導致執行命令。
- ping _______
- ping & wget xxxxxxxxxxx
(越權)
越權漏洞是比較常見的漏洞類型,越權漏洞可以理解為,一個正常的用戶A通常只能夠對自己的一些信息進行增刪改查,但是由於程序員的一時疏忽 ,對信息進行增刪改查的時候沒有進行一個判斷,判斷所需要操作的信息是否屬於對應的用戶,可以導致用戶A可以操作其他人的信息。
- Cookie: uid=11426;
- Cookie: uid=1;
關於越權,就像我們剛剛試卷體中的姓名部分。
再展示一個數據的傳輸流程圖,以便直觀清晰的看到,數據在各層中是怎樣運作的,以及可能發生的漏洞:
了解了這幾個漏洞之後我們可以看到原理都有些類似,也很簡單,當然我們只要不再局限於概念名詞就會發現 web 安全的大部分漏洞都很簡單。更多時候,發現一個複雜的漏洞需要是只是耐心。
概念,不是一個神聖的東西,概念很多時候只是bullshit。很多概念的產生是因為需要認識和概括某種存在著的現象而不得已產生的,概念也許是必須的但並不是必然如此的。
換句話說,概念僅可以被看做是一種努力嘗試描述后的結果之一。或者也可以說概念是提出這個概念的人自嗨的產物,跟其他人關係不大。甚至,有些概念是『別有用心』的發明來合理化某種其實不必合理化但是存在的現象。
所以不要把自己拘泥於一個這樣的概念中來思考所面臨問題的實質。把概念忘了,你才可能看清楚你和事物本身的關係。
完全沒有基礎我該從哪下手?
完全沒有基礎學習 Web 安全是件比較難的事情,所以我給出的最小的方案和最少的建議。
- 工具
- 先用 AWVS 掃幾個測試網站大體了解一下
- testphp.vulnweb.com/
- 把掃到的漏洞復現,了解怎麼利用,主要了解:
- XSS
- SQL 注入
- 遠程代碼執行
- 開發
- 書籍
- 《細說 PHP》
- 實踐
- 使用 PHP 寫一個列目錄的腳本,可以通過參數列出任意目錄的列表
- 使用 PHP 抓取一個網頁的內容並輸出
- 使用 PHP 抓取一個網頁的內容並寫入到Mysql資料庫再輸出
- 安全
- 實踐
- 手工找 testphp.vulnweb.com/ 的漏洞,對比 AWVS 的結果
- 書籍
- 《黑客攻防---web安全實戰詳解》
- 《安全之路:Web滲透技術及實戰案例解析(第2版)》
- 還是看不懂就找自己能看得進的 Web 安全的書
探索資源,我在研究和學習的過程中更加好的資源和工具來幫助我們成長和解決問題?
平時我們安裝一個mysql,要先到處找安裝包,再一步步配置,運行,還不知道裝哪了。開機就自動啟動了,用了 docker 后再也沒這個煩惱拉,一行命令,或者是在Kitematic界面上點一下就運行拉。
- Github
- 搜索 awesome-xxx
- 舉例
- github.com/enaqx/awesome-pentest
- github.com/alebcay/awesome-shell
- github.com/search?utf8=%E2%9C%93&q=awesome-
- 找到大牛的 github 看 stars,也就是收藏的項目
- github.com/flankerhqd?tab=stars 移動安全
- github.com/orangetw?tab=stars WEB 安全、CTF
- github.com/EtherDream?tab=stars 前端安全
- github.com/l3m0n?tab=stars 滲透測試、內網安全
- github.com/ring04h?tab=stars 安全開發
- 探索頻道 github.com/explore
- 主要是一些有趣的新潮的項目
- 當然也有安全相關的啦 github.com/showcases/security
- 趨勢 github.com/trending/developers
- 善用收藏
- Docker hub hub.docker.com/ ,用於查找已經封裝好的環境,減少裝環境帶來的麻煩
舉例:
挖漏洞應該是一件快樂的事情,當你把挖漏洞的目的從單純的掙錢和聲望再豐富一些,你會發現收益的重要性可能遠小於心情愉快。慢慢的變成一種良性循環,讓你走的更遠。
天空才是你的盡頭,呵呵嗒 ^_^