1. 程式人生 > >零基礎如何學習 Web 安全?

零基礎如何學習 Web 安全?

作者:餘弦
連結:https://www.zhihu.com/question/21606800/answer/22268855
來源:知乎
著作權歸作者所有,轉載請聯絡作者獲得授權。

這是個好問題,我強迫症犯了,本來你寫的是“web”,我改為了“Web”。

因為正好Web安全是我擅長的,你說的是 0基礎,我總結下我的一些看法吧,針對0基礎的。

一. 首先你得了解Web

Web分為好幾層,一圖勝千言:
<img data-rawheight="720" data-rawwidth="960" src="https://pic4.zhimg.com/133c88180340b844466e8fa5552e122b_b.jpg" class="origin_image zh-lightbox-thumb" width="960" data-original="https://pic4.zhimg.com/133c88180340b844466e8fa5552e122b_r.jpg">

事實是這樣的: 如果你不瞭解這些研究物件是不可能搞好安全研究的。
這樣看來,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./%20

4. 如果在Web開發框架或Web應用層中沒處理好,把“特殊資料”當做 指令執行時,可能會產生遠端命令執行的安全問題,這段“特殊資料”可能長得如下這般:
eval($_REQUEST['x']);

5. 如果在Web前端層中沒處理好,瀏覽器的JS引擎把“特殊資料”當做 指令執行時,可能會產生XSS跨站指令碼的安全問題,這段“特殊資料”可能長得如下這般:
'"><script>alert(/cos is my hero./)</script>

...

怎樣,刺激吧?搞懂這些,就算入門啦。
  • 記好:一切的安全問題都體現在“輸入輸出”上,一切的安全問題都存在於“資料流”的整個過程中。
  • 記好:“資料流”、“輸入輸出”這兩個關鍵點。
你好像悟到了點什麼,咱們繼續……

前面說了: 如果你不瞭解這些研究物件是不可能搞好安全研究的。

拿我XSS來說,曾經有人問我,我回答的一個: 在學習XSS前我應該學習什麼?你可與參考下。

假如我曾經要不是比較熟JavaScript、ActionScript、HTML/CSS的話,我估計我要研究好XSS是很困難的,我熟悉這些語言剛開始的出發點是想“ 創造”,我做了好些Flash動畫、做了好些網站、包括自己從後端到前端獨立實現過一個部落格系統,為了解決好前端在各瀏覽器的相容問題(當時是IE6如日中天的時候),我啃了好幾本書,如《CSS網站佈局實錄》、《JavaScript DOM程式設計藝術》、《AJAX Hacks》、Flash從6版本以來到CS2的各類書籍我都多少看過,也實戰過,這一切都是在大學前三年搞定的。

大學第四年衝刺Web安全(長期以來有黑客情懷),大四下學期進入知道創宇(剛創業起步),然後到了現在,一晃在知道創宇六年。

說到這,很清晰啦: 如果你不瞭解這些研究物件是不可能搞好安全研究的。

咱們繼續:)

二. 黑客兵器譜

新人入門總在尋找好工具來提高效率,Web安全這塊我之前放出了我的“兵器譜”,在這: 我的滲透利器(會不斷抽時間更新)。

工欲善其事必先利其器嘛,而且新人用了好兵器會更有成就感的。

切記:這些兵器,你不僅要知其然還得知其所以然,別墮落了哦。

三. 明白“精於一而悟道”的道理

不多說,請看這我的回答: 對於立志在網路安全領域發展,應該如何系統學習安全知識?

四. 融入圈子

多結交些靠譜的黑客,搞搞基啦(不過別來真的,還有我好討厭 扯淡/ 水得不得了的人),微博(含:Twitter)、QQ、微信、知乎、部落格等善於跟進,不僅學,也要分享,讓大家知道你的存在,更有利於交流與成長。

如果你對我有興趣,可以看我的介紹: 關於餘弦,我自認為我自己靠譜(不,這不是浮誇,這是自信)。

關於“圈子”,我想說:別把自己侷限住。

最後,再次引用黑哥的一句話:“整就牛!” 編輯於 2015-10-20 104 條評論 感謝 分享   收藏 沒有幫助 舉報 作者保留權利 怪力我想學會如何裝逼 31 人贊同 從我自己的親身經歷出發給你一些學習心得~我是偶爾去網咖接觸到黑客~從此踏上了自學黑客之路~ 最近看的書推薦web黑客第二版xss攻擊剖析與防禦企業級程式碼審計 web測試相關技術1.專注 我覺得在學習網路安全和任何東西的時候都要分階段專注學習、比如研究xss … 顯示全部

從我自己的親身經歷出發給你一些學習心得~我是偶爾去網咖接觸到黑客~從此踏上了自學黑客之路~

最近看的書推薦

web黑客第二版

xss攻擊剖析與防禦

企業級程式碼審計

web測試相關技術

1.專注

我覺得在學習網路安全和任何東西的時候都要分階段專注學習、比如研究xss 那我這一個月就什麼也不做只研究xss 把xss研究到極致,然後在研究下一個課題xss通常結合csrf利用那麼切忌不要因為xss會結合csrf使用就把研究重點放到csrf,要有重點的研究東西,一個月後可進行下一個課題研究。

這是我寫的一篇關於flash xss的總結希望能夠幫到你

Flash XSS攻擊總結

2.整理筆記

這個我覺得最重要,這是一個好習慣 可以讓我們重新把學習的技術做一個總結和鞏固。在總結的過程形成自己對技術的理解與創新。

3.多看書和分析文章

比如我在學習程式碼審計的時候,最有效的方法 。我是這樣做的。程式碼審計在我們學習以前先去閱讀相關的書籍。然後找兩片分析0day的文章,照葫蘆畫瓢分析文章中一樣版本的程式碼,這對你成長很有幫助,進步也非常快。

學習思路

在不瞭解黑客技術的時候覺得 盜qq 中木馬是很高深的~這些其實沒有技術含量~不要沉迷於此直接略過~跑題了這是做web安全

先去百度下webshell 一句話木馬 是什麼~

首先要學一門指令碼語言推薦php不用學的太靈通,瞭解一些危險函式即可如 get post 請求 open exec 等函式會造成什麼漏洞……瞭解了php中的危險函式會造成那些漏洞可舉一反三套用到別的指令碼需要當中如 asp aspx java這些語言的危險函式可能只是寫法不一樣功能是相同的~

Javascript 要好好學習一下 然後瞭解xss的原理~以及csrf 的原理……

關於xss初學者需要了解一些 html實體 html實體的10 或16進位制 ,以及javascript 的8進位制和16進位制編碼 雙位元組漏洞,提供一個學習地址以上知識在這都用講解

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 測試域名 wooyun.org
dig @1.1.1.1 http://sechook.org axfr
nmap --script dns-zone-transfer --script-args dns-zone-transfer.domain= wooyun.org -p 53 -Pn 1.1.1

例項查詢蘇寧DNS伺服器

D:\deep>nslookup
預設伺服器: localhost
Address: 10.11.0.1
> set type=ns
> suning.com
伺服器: localhost
Address: 10.11.0.1
非權威應答:
suning.com nameserver = lns1.zdnscloud.info
suning.com nameserver = gns2.zdnscloud.net.cn
suning.com nameserver = lns2.zdnscloud.biz
suning.com nameserver = gns1.zdnscloud.net
>

查詢蘇寧suning.com IP

C:\Users\jack>nslookup suning.com
伺服器: localhost
Address: 10.11.0.1
非權威應答:
名稱: suning.xdwscache.ourwebcdn.com
Addresses: 203.130.60.48 //對應ip
203.130.60.49 //對應ip
203.130.60.50 //對應ip
Aliases: suning.com
Suning.com.wscdns.com //別名

線上二級域名爆破網站

dnsdumpster.com/
Netcraft - Search Web by Domain

工具獲取二級域名

滲透測試中常用的線上工具--SecWiki 專題 參考連結

subDomainsBrute
wydomain
theHarvester.py
Fierce
Dig
knock
dnsspider
SubDomainscollect
SubBrute
dirfuzz

使用格式:

fierce -dns baidu.com -threads 3
subDomainsBrute.py suning.com
python theHarvester.py -d suning.com -l 500 -b baidu -v 國內百度找的多
python theHarvester.py -d 公司名 -l 500 -b baidu -v
python theHarvester.py -d 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的話, 可以用
github.com/rthalley/dns 下載 cd dnspython python setup.py install

搜尋引擎 Google新經驗:

+ 把google可能忽略的字列如查詢範圍 - 把某個字忽略 ~ 同意詞 . 單一的萬用字元 * 萬用字元,可代表多個字母 "" 精確查詢

程式碼託管洩漏資訊搜尋

Google:

andy-game.googlecode.com
Gitbub: https://github.com/search?utf8=%E2%9C%93&amp;q=%E5%A4%96%E7%BD%91+%E8%B1%86%E7%93%A3&amp;type=Code&amp;ref=searchresults

郵箱蒐集

Metasploit郵箱蒐集連結
xiao106347.blog.163.com

n ip反查域名

dns.aizhan.com/58.240.8

二級兄弟域名蒐集

查詢郵件伺服器資訊
目標IP地址範圍蒐集
利用程式碼託管網站蒐集目標資訊

確定ip 地址範圍
掃描c段
獲取cdn真實ip地址
社會工程學