怎樣從零學起成為一名黑客?
怎樣從零學起成為一名黑客?黑客,對于很多人來說,是一個神秘的代名詞,加之影視作品夸張的藝術表現,使得黑客這個本來只專注于技術的群體,散發出亦正亦邪的神秘色彩。
黑客源自英文hacker一詞,最初曾指熱心于計算機技術、水平高超的電腦高手,尤其是程序設計人員,逐漸區分為白帽、灰帽、黑帽等。
其中,白帽黑客被稱為道德黑客。他們不會非法入侵用戶網絡,而是通過一系列測試檢查公司安全系統的效率;黑帽黑客恰好與白帽黑客相反,他們往往為了個人利益去破壞用戶網絡數據,以此進一步實施網絡犯罪;而灰帽黑客,同時擁有白帽和黑帽黑客的屬性,圍繞利益尋找足夠的補償。
如果是想利用學到的技術非法牟利,奉勸盡早放棄,君子愛財取之有道,想成為一名合格的白帽黑客,要遵守“江湖規矩”。
下面來看一看,如何從零開始成為一名(白帽)黑客。
早期的互聯網非常的單調,一般只有靜態頁面,現在,隨著技術的發展,web上大多數站點實際上是web應用程序,在服務器和瀏覽器之間進行雙向的信息傳遞。他們支持注冊登錄,金融交易,搜索及用戶創作的內容。用戶只需要擁有一個瀏覽器,就能實現各種功能。
Web 是指一個網站的前端頁面到后端服務,比如我們常見的 Javascript、PHP、Python、Mysql、jQuery、Docker 等,包括開發、運維這些服務。
所以 Web 安全也就是從安全的角度探索 Web 的一種方式。
為了能夠更簡單的理解一些常見漏洞,我們首先來看一下這份試卷:試卷
考生姓名:__________考生學號:__________
一、詩歌補寫
床前明月光,___________。春眠不覺曉,___________。
二、數學運算(在括號內填入數字)
3500 + 400 * 3 / 2 + 1 =( )4 ( 1 + 2) / 3 * 400 +500 = ( )
考生姓名:__________考生學號:__________首先我們來看這個,名字和學號的填寫,這里有“漏洞”嗎?
答案是:有。
學生的姓名和學號都寫在這兒,沒有做任何保護措施,因此,你只要偷看了某人的試卷上的這部分內容,然后把你的試卷的上的姓名和考生學號寫成和他一樣的即可偽裝成他的身份。
漏洞攻擊成功。來看下一個:
一、詩歌補寫
床前明月光,___________。春眠不覺曉,___________。
這道題有漏洞嗎?
答案是:有。
這道題的答案本來應該是“疑是地上霜”和“處處聞啼鳥”
但是,問題中并沒有規定答案里不能添加標點符號,所以,我完全可以把“疑是地上霜,舉頭望明月,低頭思故鄉”以及“處處聞啼鳥,夜來風雨聲,花落知多少”當做答案寫進去。
漏洞再次進攻成功。下一個:
二、數學運算(在括號內填入數字)3500 +400 * 3 / 2 + 1 = ( )4 ( 1 + 2) / 3 * 400 +500 = ( )
這道題有漏洞嗎?
答案是:有。
出題者規定了只能填入數字,但卻沒有說是什么數字,也沒有規定多少位,那么我的答案可以是 中文數字「壹佰壹拾圓」、羅馬數字「MCI」或 二進制「0000000000001101」。
漏洞第三次進攻成功。
這份試卷簡單的模擬了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代碼會被執行,從而達到惡意攻擊用戶的目的。
- <p style='color:red'>你好啊,尊敬的______<p>
- <p style='color:red'>你好啊,尊敬的 xxx<script>alert(1)</script><p>
(遠程命令執行)
而遠程命令執行,是用戶通過瀏覽器提交執行命令,由于服務器端沒有針對執行函數做過濾,導致執行命令。
- ping _______
- ping baidu.com?& wget xxxxxxxxxxx
(越權)
越權漏洞是比較常見的漏洞類型,越權漏洞可以理解為,一個正常的用戶A通常只能夠對自己的一些信息進行增刪改查,但是由于程序員的一時疏忽 ,對信息進行增刪改查的時候沒有進行一個判斷,判斷所需要操作的信息是否屬于對應的用戶,可以導致用戶A可以操作其他人的信息。
- Cookie: uid=11426;
- Cookie: uid=1;
關于越權,就像我們剛剛試卷體中的姓名部分。
再展示一個數據的傳輸流程圖,以便直觀清晰的看到,數據在各層中是怎樣運作的,以及可能發生的漏洞:
了解了這幾個漏洞之后我們可以看到原理都有些類似,也很簡單,當然我們只要不再局限于概念名詞就會發現 web 安全的大部分漏洞都很簡單。更多時候,發現一個復雜的漏洞需要是只是耐心。 概念,不是一個神圣的東西,概念很多時候只是bullshit。很多概念的產生是因為需要認識和概括某種存在著的現象而不得已產生的,概念也許是必須的但并不是必然如此的。
換句話說,概念僅可以被看做是一種努力嘗試描述后的結果之一。或者也可以說概念是提出這個概念的人自嗨的產物,跟其他人關系不大。甚至,有些概念是‘別有用心’的發明來合理化某種其實不必合理化但是存在的現象。
所以不要把自己拘泥于一個這樣的概念中來思考所面臨問題的實質。把概念忘了,你才可能看清楚你和事物本身的關系。
完全沒有基礎該從哪下手? 完全沒有基礎學習 Web 安全是件比較難的事情,所以建議如下:
1、工具
2、先用 AWVS 掃幾個測試網站大體了解一下 testphp.vulnweb.com/htttestasp.vulnweb.comhttp://testaspnet.vulnweb.com
3、把掃到的漏洞復現,了解怎么利用,主要了解:XSS、SQL 注入、遠程代碼執行
4、書籍《細說 PHP》
5、使用 PHP 寫一個列目錄的腳本,可以通過參數列出任意目錄的列表
6、使用 PHP 抓取一個網頁的內容并輸出
7、使用 PHP 抓取一個網頁的內容并寫入到Mysql數據庫再輸出
8、手工找?http://testphp.vulnweb.com/?的漏洞,對比 AWVS 的結果
9、書籍《黑客攻防---web安全實戰詳解》和《安全之路:Web滲透技術及實戰案例解析(第2版)》
10、還是看不懂就找自己能看得進的 Web 安全的書。
此外,這是一條堅持的道路,三分鐘的熱情勸君盡早放棄;多練多想,不要離開了教程什么都不會了,最好看完教程自己獨立完成技術方面的開發。
文章整理:https://www.zhihu.com/question/276408308/answer/1083103316,侵刪!