零基礎如何學習 Web 安全?
想學習Web安全,完全出於興趣。
如何入門?
這是個好問題,我強迫症犯了,本來你寫的是「web」,我改為了「Web」。
因為正好Web安全是我擅長的,你說的是0基礎,我總結下我的一些看法吧,針對0基礎的。
一. 首先你得了解Web
Web分為好幾層,一圖勝千言:
事實是這樣的:如果你不了解這些研究對象是不可能搞好安全研究的。
這樣看來,Web有八層(如果把瀏覽器也算進去,就九層啦,九陽神功……)!!!每層都有幾十種主流組件!!!這該怎麼辦?
別急,一法通則萬法通,這是橫向的層,縱向就是數據流啦!搞定好數據流:從橫向的層,從上到下→從下到上,認真看看這些數據在每個層是怎麼個處理的。
數據流中,有個關鍵的是HTTP協議,從上到下→從下到上的頭尾兩端(即請求響應),搞通!難嗎?《HTTP權威指南》720頁!!!坑爹,好難!!!
怎麼辦?
橫向那麼複雜、縱向數據流的HTTP協議就720頁的書!!!放棄好了……
不,千萬別這樣。
給你點信心是:《HTTP權威指南》這本書我壓根沒看過。但是通過百度/Google一些入門的HTTP協議,我做了大概了解,然後Chrome瀏覽器F12實際看看「Network」標籤里的HTTP請求響應,不出幾小時,就大概知道HTTP協議這玩意了。(這是快速研究的精髓啊)
搞明白HTTP協議後,你就會明白安全術語的「輸入輸出」。
黑客通過輸入提交「特殊數據」,特殊數據在數據流的每個層處理,如果某個層沒處理好,在輸出的時候,就會出現相應層的安全問題。
精彩舉例:1. 如果在操作系統層上沒處理好,比如Linux的Bash環境把「特殊數據」當做指令執行時,就產生了OS命令執行的安全問題,這段「特殊數據」可能長得如下這般:
; rm -rf /;2. 如果在存儲層的資料庫中沒處理好,資料庫的SQL解析引擎把這個「特殊數據」當做指令執行時,就產生SQL注入這樣的安全問題,這段「特殊數據」可能長得如下這般:
" union select user, pwd, 1, 2, 3, 4 from users--3. 如果在Web容器層如nginx中沒處理好,nginx把「特殊數據」當做指令執行時,可能會產生遠程溢出、DoS等各種安全問題,這段「特殊數據」可能長得如下這般:
%c0.%c0./%c0.%c0./%c0.%c0./%c0.%c0./%204. 如果在Web開發框架或Web應用層中沒處理好,把「特殊數據」當做指令執行時,可能會產生遠程命令執行的安全問題,這段「特殊數據」可能長得如下這般:
eval($_REQUEST["x"]);5. 如果在Web前端層中沒處理好,瀏覽器的JS引擎把「特殊數據」當做指令執行時,可能會產生XSS跨站腳本的安全問題,這段「特殊數據」可能長得如下這般:
"">&...
怎樣,刺激吧?搞懂這些,就算入門啦。
- 記好:一切的安全問題都體現在「輸入輸出」上,一切的安全問題都存在於「數據流」的整個過程中。
- 記好:「數據流」、「輸入輸出」這兩個關鍵點。
你好像悟到了點什麼,咱們繼續……
前面說了:如果你不了解這些研究對象是不可能搞好安全研究的。
拿我XSS來說,曾經有人問我,我回答的一個:在學習XSS前我應該學習什麼?你可與參考下。
假如我曾經要不是比較熟JavaScript、ActionScript、HTML/CSS的話,我估計我要研究好XSS是很困難的,我熟悉這些語言剛開始的出發點是想「創造」,我做了好些Flash動畫、做了好些網站、包括自己從後端到前端獨立實現過一個博客系統,為了解決好前端在各瀏覽器的兼容問題(當時是IE6如日中天的時候),我啃了好幾本書,如《CSS網站布局實錄》、《JavaScript DOM編程藝術》、《AJAX Hacks》、Flash從6版本以來到CS2的各類書籍我都多少看過,也實戰過,這一切都是在大學前三年搞定的。
大學第四年衝刺Web安全(長期以來有黑客情懷),大四下學期進入知道創宇(剛創業起步),然後到了現在,一晃在知道創宇六年。
說到這,很清晰啦:如果你不了解這些研究對象是不可能搞好安全研究的。
咱們繼續:)
二. 黑客兵器譜
新人入門總在尋找好工具來提高效率,Web安全這塊我之前放出了我的「兵器譜」,在這:我的滲透利器(會不斷抽時間更新)。
工欲善其事必先利其器嘛,而且新人用了好兵器會更有成就感的。
切記:這些兵器,你不僅要知其然還得知其所以然,別墮落了哦。
三. 明白「精於一而悟道」的道理
不多說,請看這我的回答:對於立志在網路安全領域發展,應該如何系統學習安全知識?
四. 融入圈子
多結交些靠譜的黑客,搞搞基啦(不過別來真的,還有我好討厭扯淡/水得不得了的人),微博(含:Twitter)、QQ、微信、知乎、博客等善於跟進,不僅學,也要分享,讓大家知道你的存在,更有利於交流與成長。
如果你對我有興趣,可以看我的介紹:關於餘弦,我自認為我自己靠譜(不,這不是浮誇,這是自信)。
關於「圈子」,我想說:別把自己局限住。
最後,再次引用黑哥的一句話:「整就牛!」早期的互聯網非常的單調,一般只有靜態頁面,現在,隨著技術的發展,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 www.baidu.com wget xxxxxxxxxxx
(越權)
越權漏洞是比較常見的漏洞類型,越權漏洞可以理解為,一個正常的用戶A通常只能夠對自己的一些信息進行增刪改查,但是由於程序員的一時疏忽 ,對信息進行增刪改查的時候沒有進行一個判斷,判斷所需要操作的信息是否屬於對應的用戶,可以導致用戶A可以操作其他人的信息。
- Cookie: uid=11426;
- Cookie: uid=1;
關於越權,就像我們剛剛試卷體中的姓名部分。
再展示一個數據的傳輸流程圖,以便直觀清晰的看到,數據在各層中是怎樣運作的,以及可能發生的漏洞:
了解了這幾個漏洞之後我們可以看到原理都有些類似,也很簡單,當然我們只要不再局限於概念名詞就會發現 web 安全的大部分漏洞都很簡單。更多時候,發現一個複雜的漏洞需要是只是耐心。
概念,不是一個神聖的東西,概念很多時候只是bullshit。很多概念的產生是因為需要認識和概括某種存在著的現象而不得已產生的,概念也許是必須的但並不是必然如此的。
換句話說,概念僅可以被看做是一種努力嘗試描述後的結果之一。或者也可以說概念是提出這個概念的人自嗨的產物,跟其他人關係不大。甚至,有些概念是『別有用心』的發明來合理化某種其實不必合理化但是存在的現象。
所以不要把自己拘泥於一個這樣的概念中來思考所面臨問題的實質。把概念忘了,你才可能看清楚你和事物本身的關係。
完全沒有基礎我該從哪下手?
完全沒有基礎學習 Web 安全是件比較難的事情,所以我給出的最小的方案和最少的建議。
- 工具
- 先用 AWVS 掃幾個測試網站大體了解一下
- http://testphp.vulnweb.com/
- http://testhtml5.vulnweb.com
- http://testasp.vulnweb.com
- http://testaspnet.vulnweb.com
- 把掃到的漏洞復現,了解怎麼利用,主要了解:
- XSS
- SQL 注入
- 遠程代碼執行
- 開發
- 書籍
- 《細說 PHP》
- 實踐
- 使用 PHP 寫一個列目錄的腳本,可以通過參數列出任意目錄的列表
- 使用 PHP 抓取一個網頁的內容並輸出
- 使用 PHP 抓取一個網頁的內容並寫入到Mysql資料庫再輸出
- 安全
- 實踐
- 手工找 http://testphp.vulnweb.com/ 的漏洞,對比 AWVS 的結果
- 書籍
- 《黑客攻防---web安全實戰詳解》
- 《安全之路:Web滲透技術及實戰案例解析(第2版)》
- 還是看不懂就找自己能看得進的 Web 安全的書
探索資源,我在研究和學習的過程中更加好的資源和工具來幫助我們成長和解決問題?
平時我們安裝一個mysql,要先到處找安裝包,再一步步配置,運行,還不知道裝哪了。開機就自動啟動了,用了 docker 後再也沒這個煩惱拉,一行命令,或者是在Kitematic界面上點一下就運行拉。
- Github https://www.github.com
- 搜索 awesome-xxx
- 舉例
- https://github.com/enaqx/awesome-pentest
- https://github.com/alebcay/awesome-shell
- https://github.com/search?utf8=%E2%9C%93q=awesome-
- 找到大牛的 github 看 stars,也就是收藏的項目
- https://github.com/flankerhqd?tab=stars 移動安全
- https://github.com/orangetw?tab=stars WEB 安全、CTF
- https://github.com/EtherDream?tab=stars 前端安全
- https://github.com/l3m0n?tab=stars 滲透測試、內網安全
- https://github.com/ring04h?tab=stars 安全開發
- 探索頻道 https://github.com/explore
- 主要是一些有趣的新潮的項目
- 當然也有安全相關的啦 https://github.com/showcases/security
- 趨勢 https://github.com/trending/developers
- 善用收藏
- Docker hub https://hub.docker.com/ ,用於查找已經封裝好的環境,減少裝環境帶來的麻煩
舉例:
- 資料庫 Mysql https://hub.docker.com/_/mysql/
一句話安裝運行:docker run -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest - XSS攻擊平台BeeF https://hub.docker.com/r/janes/beef/ 一句話安裝運行:docker run --rm -p 3000:3000 janes/beef
- Kali 滲透測試 Linux 系統 https://hub.docker.com/r/kalilinux/kali-linux-docker/
- 漏洞靶場 https://hub.docker.com/r/citizenstig/dvwa/ 一句話安裝運行:docker run -d -p 80:80 citizenstig/dvwa
- Nmap https://hub.docker.com/r/uzyexe/nmap/
一句話安裝運行:docker run --rm uzyexe/nmap -p 80 http://example.com - 搜索通用漏洞靶場,關鍵字:cve-
- 安全相關的 Paper
- http://paper.seebug.org/
- http://bobao.360.cn/learning/index
- 烏雲 Drops 文章在線瀏覽
- http://wiki.ioin.in/
挖漏洞應該是一件快樂的事情,當你把挖漏洞的目的從單純的掙錢和聲望再豐富一些,你會發現收益的重要性可能遠小於心情愉快。慢慢的變成一種良性循環,讓你走的更遠。
天空才是你的盡頭,呵呵嗒 ^_^
從我自己的親身經歷出發給你一些學習心得~我是偶爾去網吧接觸到黑客~從此踏上了自學黑客之路~
最近看的書推薦
web黑客第二版
xss攻擊剖析與防禦
企業級代碼審計
web測試相關技術
1.專註
我覺得在學習網路安全和任何東西的時候都要分階段專註學習、比如研究xss 那我這一個月就什麼也不做只研究xss 把xss研究到極致,然後在研究下一個課題xss通常結合csrf利用那麼切忌不要因為xss會結合csrf使用就把研究重點放到csrf,要有重點的研究東西,一個月後可進行下一個課題研究。
這是我寫的一篇關於flash xss的總結希望能夠幫到你
Flash XSS攻擊總結
2.整理筆記
這個我覺得最重要,這是一個好習慣 可以讓我們重新把學習的技術做一個總結和鞏固。在總結的過程形成自己對技術的理解與創新。
3.多看書和分析文章
比如我在學習代碼審計的時候,最有效的方法 。我是這樣做的。代碼審計在我們學習以前先去閱讀相關的書籍。然後找兩片分析0day的文章,照葫蘆畫瓢分析文章中一樣版本的代碼,這對你成長很有幫助,進步也非常快。
黑客學習思路實踐
在不了解黑客技術的時候覺得 盜qq 中木馬是很高深的~這些其實沒有技術含量~不要沉迷於此直接略過~跑題了這是做web安全
http請求
先去百度下webshell 一句話木馬 是什麼~
首先要學一門腳本語言推薦php不用學的太靈通,了解一些危險函數即可如 get post 請求 open exec 等函數會造成什麼漏洞……了解了php中的危險函數會造成那些漏洞可舉一反三套用到別的腳本需要當中如 asp aspx java這些語言的危險函數可能只是寫法不一樣功能是相同的~
Javascript 要好好學習一下 然後了解xss的原理~以及csrf 的原理……
關於xss初學者需要了解一些 html實體 html實體的10 或16進位 ,以及javascript 的8進位和16進位編碼 雙位元組漏洞,提供一個學習地址以上知識在這都用講解
http://xss.pkav.net/xss/
在學習 XSS 前應該學習什麼?
然後就是資料庫了~mysql sqlserver 隨便先學一個~前期學會 selsct 就行,結合php嘗試自己寫一個查詢資料庫的腳本 ~來了解sql注入的原理~這樣進步會很快……
Http請求時候的一些參數也需要做一些了解,如
user_agent
X-Forwarded-For
Referer
等參數 這些參數也會造成一些安全問題…… 下面就是伺服器本身的漏洞與編輯器上傳也需要了解
如
Iis 解析漏洞
nginx 解析漏洞
tomcat 後台上傳
jboss
fckedit
eweb
可自行網上搜索這些伺服器都有哪些
web滲透測試部分
信息搜集
二級兄弟域名搜集
利用DNS域名傳送漏洞搜集二級域名
Liunx測試命令如下:
Dns伺服器 1.1.1.1 測試域名http://wooyun.org
dig @1.1.1.1 http://sechook.org axfr
nmap --script dns-zone-transfer --script-args dns-zone-transfer.domain=http://wooyun.org -p 53 -Pn 1.1.1
實例查詢蘇寧DNS伺服器
D:deep&>nslookup
默認伺服器: localhost
Address: 10.11.0.1
&> set type=ns
&> http://suning.com
伺服器: localhost
Address: 10.11.0.1
非權威應答:
http://suning.com nameserver = http://lns1.zdnscloud.info
http://suning.com nameserver = http://gns2.zdnscloud.net.cn
http://suning.com nameserver = lns2.zdnscloud.biz
http://suning.com nameserver = http://gns1.zdnscloud.net
&>
查詢蘇寧http://suning.com IP
C:Usersjack&>nslookup http://suning.com
伺服器: localhost
Address: 10.11.0.1
非權威應答:
名稱: http://suning.xdwscache.ourwebcdn.com
Addresses: 203.130.60.48 //對應ip
203.130.60.49 //對應ip
203.130.60.50 //對應ip
Aliases: http://suning.com
http://Suning.com.wscdns.com //別名
在線二級域名爆破網站
https://dnsdumpster.com/
Netcraft - Search Web by Domain
工具獲取二級域名
滲透測試中常用的在線工具--SecWiki 專題 參考鏈接
subDomainsBrute
wydomain
theHarvester.py
Fierce
Dig
knock
dnsspider
SubDomainscollect
SubBrute
dirfuzz
使用格式:
fierce -dns http://baidu.com -threads 3
subDomainsBrute.py http://suning.com
python theHarvester.py -d http://suning.com -l 500 -b baidu -v 國內百度找的多
python theHarvester.py -d 公司名 -l 500 -b baidu -v
python theHarvester.py -d http://suning.com -l 500 -b google -v國外站google多
python theHarvester.py -d school -l 1000 -b all all使用所有的搜索引擎進行搜索
subDomainsBrute使用需要安裝依賴支持
報錯信息:ImportError: No module named dns.resolver
需要安裝的庫是 dnspython
pip install dnspython
沒有pip的話, 可以用
到https://github.com/rthalley/dnspython.git 下載
cd dnspython
python setup.py install
搜索引擎 Google新經驗:
+ 把google可能忽略的字列如查詢範圍
- 把某個字忽略
~ 同意詞
. 單一的通配符
* 通配符,可代表多個字母
"" 精確查詢
代碼託管泄漏信息搜索
Google:
http://andy-game.googlecode.com/svn-history/
Gitbub: https://github.com/search?utf8=%E2%9C%93amp;q=%E5%A4%96%E7%BD%91+%E8%B1%86%E7%93%A3amp;type=Codeamp;ref=searchresults
郵箱搜集
Metasploit郵箱搜集鏈接
http://xiao106347.blog.163.com/blog/static/215992078201311300162776/
n ip反查域名
http://dns.aizhan.com/58.240.86.229/
二級兄弟域名搜集
查詢郵件伺服器信息
目標IP地址範圍搜集
利用代碼託管網站搜集目標信息
確定ip 地址範圍
掃描c段
獲取cdn真實ip地址
社會工程學
最後友情提示 搞it易脫髮 慎重 泡不到妹子的
看了前面的高票回答,很贊。
有幾個朋友也問過我類似的問題,諸如如何讓新人學習快速上手Web安全,這裡我也梳理了一些自己的看法。
在答案的最後,我會給大家一個簡答、直接的解決方案,希望對零基礎的同學有所幫助。
一. 從零基礎開始
正所謂萬丈高樓平地起,既然是零基礎,那麼首先就需要打基礎,不了解基礎的Web知識,何談Web安全?
Web知識本身就非常豐富,覆蓋範圍也非常廣泛:
從瀏覽器到伺服器、資料庫;
從HTML、JavaScript和CSS到PHP、Java、ASP(.net);
從頁面載入到DOM渲染;
從靜態頁面到MVC;
從URL協議到HTTP協議;
還有CDN、代理、Web容器等等。
如果讓你花很長時間完全掌握這些知識,再學習Web安全,你覺得你還有興趣麽?
那麼問題來了:一個Web安全愛好者,學Web知識,要學到什麼程度?Web有哪些知識?怎麼學?
- Web知識過少,基礎不牢靠,會導致後面的學習乏力,嚴重影響Web安全的學習效率;
- Web知識過多,容易偏離主題,忘記了初衷,也會逐漸缺乏學習的動力;
所以,如何把握這個度,是初學者的一個難題。
二. 入門
掌握了Web基礎知識,說一句殘酷的但是很現實的大實話,你還是沒有入門!
這裡作為一個老司機給一些建議:
1. 和大部分老司機一樣,我會建議大家多看書
個人來講,這些書籍並不適合入門,因為這些書籍都是需要一定的門檻;但是就目前來看,書籍算是比較靠譜的入門資料。
比如
《白帽子講Web安全》
《Web之困 - 現代Web應用安全指南》
《黑客攻防技術寶典 - Web實戰篇》
《Web前端黑客技術揭秘》
幸運的是現在Web安全書籍比較多,比較遺憾的是當年我學習Web安全的時候還沒有刺總的《白帽子講Web安全》,這也導致我在後面的Web安全學習歷程中走了不少的彎路。
2. 建議大家多關注牛人的Blog、論壇、安全類的網站和微信公眾號
比較幸運的是那個時代,大部分Web安全牛人的都在集中在百度空間分享技術知識,包括大家比較了解的黑哥、刺等,現在百度空間已經死去,緬懷一下那個純粹的技術分享時代;
現在大部分的技術分享都集中化,集中到了各個安全論壇、網站,比較悲哀的是我覺得非常不錯的烏雲drops ,又逝去了一個高質量的技術文章分享圈。不過作為入門,以下幾個安全類網站也是不錯的:
FreeBuf.COM | 關注黑客與極客
安全脈搏
安全客 - 有思想的安全新媒體
聰明的同學自然知道關注他們的知乎專欄、微信公眾號。
3. 我也會建議大家去參加一些「靠譜」的培訓班和在線培訓
在學習知識的過程中,從零基礎自學成材的過程是有難度的,所以,如果大家沒有一個好的「老師」帶領的話,其實參加一些「靠譜」的培訓班和在線培訓,是很有必要的。
大部分早期接觸Web安全的老司機都有感慨,很多知識都是靠自己琢磨過來的。
當時,並沒有一個好的老師和系統化的課程,所以我們走了很多彎路;同時,由於缺乏體系化的學習,我們在入門之後存在一些知識盲區,需要在後續的學習中耗費大量的時間和精力去不斷的完善自己的知識體系。
所以一個「靠譜」的培訓,是非常重要的。
三. 一個帶有私心的解決方案
現在的Web基礎知識教學資源中,沒有一個是從Web安全去考慮這些問題。
同時,大部分的Web安全教學資料(視頻、書本),都是假定用戶已經掌握了Web基礎知識,並非從0基礎考慮。
所以,如何在Web基礎知識中融入Web安全知識,提升學員的興趣,是針對零基礎教學的一大難點。
我也看過很多教學課程,大部分都是講幾個漏洞、幾個工具,並沒有梳理成體系化的知識,這樣會導致大家學習後的知識盲點較多,學習到後面非常乏力。
當然,也有少數幾個非常不錯的教程,但是可能由於製作者精力有限,並沒有配套的教學服務,包括課後練習、實戰環境、課程測驗、討論和直播答疑等。
同時,我們在學習Web安全的過程中,會遇到很多問題:
我在前面提到過的「一個Web安全愛好者,學Web知識,要學到什麼程度?Web有哪些知識?怎麼學?」就是一個學員自身很難解決的問題?
還有很多在實際學習過程的問題,比如:
- 我按照這個書本的知識學習,發現很多都不懂怎麼辦?
- 我按照視頻教程學習,發現這個XSS在我的瀏覽器不彈窗怎麼辦?
- 我下載的工具安裝不成功怎麼辦?
- 我明明已經掌握了這個漏洞的知識,為什麼還是挖不到漏洞?
- 我沒有練手的環境,怎麼辦?
- 我怎麼知道我學習的怎樣了?
- 等等
如果同學們長時間解決不了這些問題,就會逐漸對Web安全失了興趣,或者會進入滯留期,Web安全技能難以得到提升。
最終,我們下定決心製作了一個針對初學者入門的《Web安全工程師》微專業。
說實話,最開始讓我們製作這個專業課程,我是拒絕的。講的深了,學員聽不懂,課程效果不好,白費力;
講的淺顯,又怕同行笑話。
但是,我們還是下定決心的去做了這樣一個的入門課程。
說句實話,不怕同行笑話是假的。
但是,面對這個行業的人才缺失,而大部分想學習Web安全的同學又覺得入門太難的窘境,我希望我們的課程可以幫助他們。
我希望我們在面試的時候,不會再遇到一大堆面試這個職業卻對Web安全一無所知或者毫無建樹的同學。
最後,我想說的是,如果你真的對Web安全感興趣或者希望投身於Web安全行業,歡迎加入到《Web安全工程師》微專業課程:
Web安全工程師 - 網易雲課堂
推薦本書《白帽子講web安全》
我也是在學習Web安全當中,共勉???
首先,說說《白帽子講Web安全》這本書,其實《白帽子》這本書雖說對初學者有難度,不推薦0基礎一開始就看,小白我當時有html,sql,javascript 前端基礎,但還是看不到一半就歇菜掉了。。。 但是 概覽(skim)一下,還是會得到一個最初的對web安全的印象。
「培養起一種在技術層面的初期的興趣」,向後深入時也不至於覺得找不到方向。
推薦《白帽子講Web安全》的同時, 《Web前端黑客技術揭秘》、《黑客攻防技術寶典Web實戰篇》也是極好的。大略概覽之後:
1.
一點一點的築基:
先學習前端基礎: 包括HTML,JavaScript,PHP與資料庫的聯接,SQL基本語法
(MySQL,Oracle,SQL Sever。。)
兩個極好的前端在線教程:
w3school 在線教程
菜鳥教程 - 學的不僅是技術,更是夢想!
以上語言 ,只需要達到「讀懂」的水平,記住 ,只要能讀懂就好了,千萬不要掉入開發式學習的無底洞:去糾結他的語法和規範。
2.
之後要對一些基礎的漏洞模式進行了解,web漏洞包括XSS,CSRF,劫持,SQL注入等等等等,之後選擇一個方面買一本書來細細研讀。
XSS:《xss跨站腳本攻擊剖析與防禦》
SQL:《SQL注入攻擊與防禦(第2版)(安全技術經典譯叢)》
3.
方法論:
比如看《XSS攻擊剖析與防禦》的時候,對每一個漏洞的模型,盡量都要讀懂,
這時候,你肯定會發現 以前沒有學過的一些 比如HTML,PHP,SQL甚至是關於ASP的相關函數和語法。這時候不能 / 不要著急。你需要把涉及到的每一個函數。搜索一下,然後記錄到書上。因為涉及到安全的函數,總共也就那麼些,而且他們總是會以不同的馬甲重複的出現。所以這一部分,可能比較偏僻的函數是我們需要掌握的。
但是! 總體來說我們所學到的函數比開發人員所需要的,確實是少了很多的。(開心 o(*≧▽≦)ツ )
另外不光是書上有各種各樣的漏洞模型。在一些公開的安全論壇里,更是寶庫(疼惜烏雲)。比如:
http://bar.freebuf.com/comment/10754
http://www.freebuf.com/
http://www.52pojie.cn/waf_verify.htm
https://bbs.ichunqiu.com/portal.php
http://ctf.idf.cn/
4、
學習過XSS、SQL注入...之後,可能這時候 想著會去找一個,不知名的小網站進行一下某種奇怪的注入。(我初學時 就找了很多偏僻的小網站輸入&。現在想來覺得可笑。因為這種方式太傻,而且人工的效率,實在是太低。(逃) )
所以幾款好的工具是。web安全愛好者所必備的。
插件:比如必備的 Google chrome開發者工具,火狐的firebug,hacker..
掃描軟體:.X-scan .Nikto .Paros proxy .WebScarab (在安全論壇里你會get到更多的軟體)
當然,我們對於不同的特殊情況,最膩害的當然還是使用自己編寫的腳本工具啦~(可惜我現在還不會 orz)
最終,通過 「 基礎知識 + 方便的工具 + 豐富經驗嗅覺」 的一套組合拳 ,我們肯定能在Web安全的道路上馳騁揚帆,水擊三千! 祝你成功~
——————————————————————
覺得有用就點個讚唄 ヾ(=^▽^=)ノ
——————————————————————
推薦刺總的書,白帽子講web
安全,還可以多去烏雲看一些案例
看到贊最多的評論 不知道題主是傻乎乎的去啃那些推薦的各種書籍還是再在用老外打包好的滲透測試環境實戰中學習呢?
1L的說法有對有誤導之處 強調那麼多基礎 誰又是基礎學過來的呢 不去實戰你學再多基礎都是扯淡
熟悉JS HTML CSS嗎 真正熟悉的又有幾個人呢?就算是很牛的專業前端 不關注漏洞方面的東西能寫出XSS 這類前端攻擊么?【熟悉的定義是什麼?大腦自帶W3C ECMAScript 各種標籤? 看著不舒服的話 求摺疊】
入門書推薦《滲透測試實踐指南:必知必會的工具與方法》
國人寫的書不推薦看【某帽子說安全里 一個已經都無法run起來Xss Worm還長篇大論的列印在書上完全就是坑讀者 實戰環境都不分享 真是無奈中的無奈】
在安全的江湖之中,有一群武功高強、行俠仗義的英雄叫做:白帽黑客
他們熱衷於研究網路與計算機,
善於發現安全漏洞,
但他們並不會做壞事,
而是將漏洞及時提交給企業協助修復,
在鍛煉自己能力的同時也能獲取企業反饋的獎勵。
他們可以是醫生、可以是老闆,
不過大部分 「白帽子黑客」本身也是企業的安全人員
從事著安全建設與安全維護的工作。
黑客需要掌握的知識很多,不是一朝一夕就能學完的,所以對於「小白」而言,Web安全容易上手,是最好的入門方向。不僅如此,隨著Web技術應用廣泛、發展迅速,「Web安全」已經成為信息安全中一個重要的分支,就業範圍也非常廣泛。
那麼問題來了:如何從安全「小白」成為一名Web安全高手呢?
1. 首先要有一定的Web基礎,才能更好的學習Web安全
Web基礎知識這裡我們不做詳解,基本上我們可以通過諸多線上的課程進行學習
2. 就像武俠小說一樣,學習神功通常需要一本武功秘籍
這裡,給大家推薦幾本非常厲害的Web安全武功秘籍:
1)《白帽子講Web安全》
2)《黑客攻防技術寶典—Web實戰篇》
3)《Web前端黑客技術揭秘》
回想起10年前,若想學習安全技術,就只能從《黑客X檔案》、《黑客手冊》的雜誌中汲取,學習起來真是非常不容易。所以我們不得不感謝安全前輩們沉澱分享了這麼優質的學習教材。
3. 行走江湖,除了好的武功,還需要選一件適合自己的武器
在Web安全中,使用和掌握一些常用的Web安全工具,不僅能夠達到事半功倍的效果,還能夠幫助我們擴展測試思路。如:
1)AWVS,綜合漏掃工具
2)burpsuite、Charles、fiddler等抓包工具
3)sqlmap,注入工具
4)御劍,經典的敏感文件掃描工具
4. 在江湖中行走,俠客們都會在客棧一起聊天、討論,獲取最新的消息
在Web安全中,我們也需要了解新的諮詢、技術等,我們需要關注一些常見的站點和微信公眾號。如:
1)Freebuf(http://www.freebuf.com/)
2)T00ls(https://www.t00ls.net/)
3)SecWiki(https://www.sec-wiki.com/)
各類安全站點已經發展到了百家爭鳴的熱鬧場面,優質的站點也有很多,你也可以關注一個安全圈的導航站自己去探索和發現適合自己的站點:
安全圈info: http://www.anquanquan.info/
5. 紙上得來終覺淺,絕知此事要躬行
在山上修鍊的武林高手,最終都需要下山進行實戰修鍊。Web安全高手也是如此,不是掌握幾個概念就是高手,而是需要實戰,用漏洞喂出來的。
以上。
「既然想學Web安全,當然得先學會Web。」
具體怎麼說呢....
首先,
HTML CSS JS是Web架構中最重要的內容,他們運行在瀏覽器上,直接表現和渲染你看到的網頁。學好他們,是你走上Web安全之路的第一步。
當你能用HTML/CSS/JS表現出一個簡單網頁(比如自己寫個谷歌頁面?)你就可以進入第二步啦,因為你會發現前端這點東西並不足以表現你的想法,你需要更多的交互。於是你就可以找一門你喜歡的後端語言(php?)表現更多的東西,比如寫一個登陸登出功能,做一個圖片上傳?在這樣的過程中你還會了解到HTTP、SQL等東西。
那麼當你把上面的東西都學會了,能按照自己的想法做一個有基本交互功能的網站。這時候你再來看《白帽子講Web安全》、《Web之困》之類的書時,會不停地驚嘆,「哇這東西居然可以這樣」,「這個點居然會被這麼利用」。於是在你自己的復現過程中你會收穫到很多樂趣,當然也會學到很多知識。
如果你善於總結的話,你會慢慢發現,所謂SQL注入、XSS、文件上傳、命令執行等大部分Web安全漏洞其實不過是各種形式的「代碼和數據不分」。那麼你再看大佬們的技術文章,漏洞利用過程學習各種奇技淫巧就相當輕鬆了。
如果你能堅持下來,你會發現Web安全只是網路安全領域裡一個非常小的部分,甚至只是滲透測試中的一個小部分。當然這過程你會被無數大牛吊打,慢慢的習慣了也就成長了。
當然啦,如果你能找到一群志同道合的小夥伴,或者加入一個安全團隊/論壇/CTF戰隊你會學得更快更好,畢竟有師傅帶飛啊是很爽的事情啊。
最後還要說一句,真的如果你先學開發,有那麼一點Web開發經驗,轉安全不要太容易啊,而且會比一般安全研究員有更深的見解,更容易成為大牛哦。
一個字一個字手機碼的,求贊~(≧▽≦)/~個人建議不要去報班,浪費錢,自學吧,個人從前端到程序都是靠自學的。
個人建議,你可以去買本教程,學習基本的理論知識,並耐心地實踐教程里的案例。
然後呢開始看網站,試在修改網站,然後遇到問題,解決問題,什麼不懂就學什麼,這樣有針對性的去學習,這樣會快些。
在學習的過程中,碰到問題,在百度找答案。
這樣的進度或許會比報班慢點,但學得紮實,只要你有耐心和恆心,相信自己也會成為高手的。畢竟從網站開發的角度來說,其難度跟軟體開發,還是差一個檔次的,網站開發比較容易上手的。
零基礎如何X?其實很簡單,把能找到的書都看了。
- 白帽子講Web安全
- 安全技術大系:Web前端黑客技術揭秘
- Web Application Security, A Beginner"s Guide
- The Tangled Web: A Guide to Securing Modern Web Applications / Web之困:現代Web應用安全指南
- Hacking Web Apps: Detecting and Preventing Web Application Security Problems
- The Browser Hacker"s Handbook
- The Web Application Hacker"s Handbook: Finding and Exploiting Security Flaws / 黑客攻防技術寶典:Web實戰篇
web安全其實是一個偏實戰的學科,而學習最重要的還是正反饋,有反饋才會有動力。
不妨先從給自己設立以下目標(譬如拿X台伺服器許可權)開始,在初期可以自己搭建測試環境,然後測試一些成熟的exp。
給自己一些成就感,不然光看書啥時候才會是盡頭。
如果你負責編碼,記住把用戶輸入轉碼可以解決99%的安全問題,包括各種跨站和sql注入。
如果你負責運維,記得勤打補丁,關掉文件夾訪問和非頁面文件的下載和執行,然後祈禱碼農做到了上邊那點先說結論:
0基礎,不懂js什麼鬼的,反正就是web相關啥都不懂,當時搞的時候直接奔著xss搞的,以興趣為導向做東西比較有激情,遇到什麼問題學什麼,三個月差不多吧,寫了掃描器,整了成噸的xss洞(新浪網易京東等都有搞到),雖然沒什麼價值,但是也算是入門了,並且熟悉了js,php,html,python等一堆腳本語言。
大概的流程:
1. google xss資料,理解概念和原理,碰到的js代碼就查查看看語法,沒碰到不去管。
2. 看了「那些年,一起挖的xss」系列,就看前邊3到5篇,加深概念的理解即可。然後自己構造個網頁x自己。
3. 查資料寫爬蟲,根據原理寫掃描工具,最開始寫的沒任何過濾,就是扔字元串看輸出頁面,這樣搞也能搞到洞,不過都是一些和諧網站的。這個過程中學了python,還是用什麼學什麼。
4. 到這一步已經搞了些xss洞了,增加了信心,繼續深入理解xss,把「那些年,一起挖的xss」系列看完,優化掃描器規則,自己開腦洞的想法都可以試試,這時候已經能搞到大網站的xss了。
5. 入門之後發現提高比較難,就google資料,知乎搜「零基礎如何學習 Web 安全」,按照獲贊最多的慢慢補基礎吧。
總結:
從0到1難,從1到1000就很容易了,我學習的方式都是以興趣為導向,前期一味去啃資料,又難懂又枯燥,很容易把興趣搞沒。如果你對xss感興趣,按照這個方法也能找到成噸的洞。
要學web安全,首先你必須要學會主流的腳本語言,php,jsp,asp,python會這些,腳本方面應該可以了(喔,對了,還有javascript,xss好像這兩年國內很流行),然後你就可以去看一些前輩的關於挖掘腳本漏洞的文章!這時你應該算上是大部分不明真相的人的眼裡的大牛了(自信心開始膨脹,興趣也增加)不過你不能滿足於此,你應該繼續深入,這時候你應該去學一點網路方面的知識(無論是想成為web hacker還是os hacker我想都應該要了解一些網路知識)在學習的過程中一定要重視實踐,不要一天到晚啃書(本人親身的經歷證明,只學知識不及時實踐到最後你只能像我現在這樣在這裡扯淡)你可以去owasp上面轉轉,那裡有不錯的資源有一個叫owasp broken web application的東西,當然如果你做到這一步你會發現鳥文看不懂啊,對啊,看不懂你就學啊!至於原因我就不說了,手機打字麻煩,不過學了之後你可以多接觸到一點新的有意思的東西!我想想……嗯,差不多了,我沒有給你任何的鏈接地址就是希望你可以學會怎麼學習自己想學的東西,多用用百度谷歌神馬的,學會學習比別人告訴你怎麼學習要重要的 多!
國內的黑客書滿足了坑你們的需求
想要學習 Web 安全,你得知道,Web 一般到底有哪些可以攻擊的點,漏洞。隨便找一個網站試一試,看看你能成功不,如果成功,恭喜,你入門了。簡單的可以查看下面的內容:
- SQL injection
- 實例攻擊
- SQL 防護
- XSS attack
- XSS 原理
- XSS 能做什麼?
- prevent XSS attack
- 針對標籤屬性的XSS防護
- 對於URL encoding的選擇
- 對於input內容進行防護
- CSP之終極防護
- CSRF 攻防戰
- POST』s CSRF
- how to Prevent CSRF
- 設置 secert Token
- 盡量使用JSON類型傳輸
- DNS hijacking
- DNS hijacking 的危害
- how to revent hijack
- HTTP(ISP) 劫持
- HTTP 劫持原理
- HTTP 劫持防護
- 普通用戶的防範
- developer 防範
- 總結圖譜
歡迎關注公眾號:前端小吉米~
http://weixin.qq.com/r/Ij9hebLEpO-brfYa92ow (二維碼自動識別)
1.你對前面各位牛牛,分析的方向,喜歡哪一個?
2.你想學Web安全,用來做什麼?防禦黑客、自己去黑黑網站、攻防文章當小故事看?這樣有不同的學習路線roadmap.
3.從學習的方式上,分為以原理入門、以實踐入門,兩種方式。
3.1原理入門,先去學習各類Web語言、語法,學習基礎架構搭建與配置,學習。。。
3.2實踐入門,先去學如何操作工具,學習黑網站。
4.明天繼續
WEB安全入門很簡單,重要的是積累。
總的來說分為三個時期:
1.入門期:
一些工具的基礎用法(nmap/wireshark/metasploit/sqlmap/burp/fd)
《黑客攻防技術寶典:web實戰篇》
一本足夠了,在於你好不好好看的問題。
然後可以在網上找一些資料學習提權、內網滲透
2.擴展期:
此階段需要擴展自己的知識,用餘弦大大的話來說就是:透過問題看本質
你知道了這個漏洞,需要知道它的本質。
也就是說要了解web程序運行的邏輯。
1.html+css+javascript
2.php/aspx/jsp(其中一個就好了)
3.windows系統管理/linux系統管理(shell編程)
4.《計算機組成與設計:硬體/軟體介面》了解計算機的原理
此階段的目標為簡單的白盒測試
3.積累期:
此階段沒有終點!
此階段可以說是擴展期的擴展期,補足自己一切需要補足的東西。
此階段得看自己的需求,所以我就不列出來了,每個人的需求都是不一樣的。
此階段一定要記住黑哥的一句話:整就牛!
信息安全交流群:606541827
www.1945cn.org
推薦閱讀:
※17 歲時你在幹什麼?
※如果在上海找一個適合 IT 圈內人聚會的咖啡館,地址選在哪裡比較好?有合適的推薦嗎?
※現在什麼瀏覽器比較好?
※生物信息分析專業換到 IT 行業可行么?
※怎樣才能獲取大部分人不知道的信息,避免信息不對稱?