每日學習打卡計劃是信安之路知識星球開啟的每天讀書一小時,挑戰打卡一百天的活動,能夠堅持學習打卡 100 天的同學可以獲得信安之路提供的百分成就徽章和證書,學習書籍可以自選,主要目的是養成每日讀書學習的好習慣,並將自己的學習心得分享出來供大家學習,下圖為最新打卡內容以及上周星球主題集贊榜單 TOP5,目前每周集贊第一名可獲得騰訊視頻 VIP 月卡一張,以滋鼓勵:
打卡一 P109-136這部分內容主要解決的問題是,我們如何獲取 web 應用的站點地圖,也就是網站的所有頁面和功能,我們可以對其測試的攻擊面,主要分幾種:主動式爬蟲、被動式抓取、隱藏頁面獲取、頁面參數擴展。
主動式爬蟲:這個很好理解,就是爬蟲,通過頁面之間的超連結關聯來一層一層獲取頁面內容,然後從內容中匹配頁面連結,逐步將網站的所有連結完整爬取,對於從來沒有在其他網頁設置超連結的頁面是無法通過這種方式獲取到的,工具的話,可以用自實現的爬蟲工具,用 python 寫的居多,如今的網站好多架構前端都是 nodejs 框架,數據的獲取通過普通的爬蟲已經無法實現,可以藉助無頭瀏覽器來對頁面進行解析,從而獲取數據。
被動式抓取:這個原理就是開啟一個網頁代理,然後在瀏覽器設置通過代理訪問,這樣我們在使用瀏覽器訪問網站,點擊網站的各個按鈕時,流量通過代理,代理就會將所有請求連結和數據都保留下來,這種方式的好處就是可以將動態的頁面和數據保留下來,彌補主動爬蟲獲取數據難度大的問題。
隱藏頁面獲取:對於隱藏的頁面,通過前兩種方式都無法獲取,那麼就需要我們進行一些暴力枚舉,設置一些目錄和文件的字典,通過不斷嘗試訪問,根據返回結果,比如 404 表示頁面不存在,200 表示頁面存在,然後獲取因此的目錄和頁面,網站為了限制搜尋引擎的數據爬取,會使用 robots.txt 來制定規則,這也是我們獲取因此目錄和頁面的方式,還有就是搜尋引擎的歷史歸檔記錄,由於網站的變化,舊的頁面也許未進行刪除,但是已不再使用,通過爬蟲和暴力枚舉都無法獲取的情況下,可以藉助搜尋引擎,查詢歷史歸檔,這裡涉及一些搜尋引擎的語法,需要自行查閱。
頁面參數獲取:有了功能頁面之後,我們需要跟網站進行交互,那麼就需要知道不同的頁面有哪些參數可以利用,我們在前期的信息收集時會抓到很多不同類型的參數提交方式和默認參數信息,有一些隱藏參數是我們在正常操作時無法獲取的,那麼也需要用到我們經常用的暴力枚舉的方式,猜測其有哪些參數存在但是已不再使用的情況,說不定有意想不到的收穫。
最後關於暴力枚舉,這個在不同的場景下成功率取決於字典的質量,每個場景都有一些默認的字典,我們還可以根據已經收集到的情報,比如目錄和文件的命名方式,公司的常用關鍵詞等組合一些自定義字典,這個在實際的滲透中有很大的幫助。
打卡二 P137-140有了攻擊面之後,我們就需要對 web 的頁面進行測試,因為應用的安全問題來自於用戶的輸入,所以所有可以輸入的地方都是我們要重點關注的,這部分內容主要講的是如何識別用戶輸入點。
用戶可以輸入和利用的地方主要包括:URL 中帶的參數,也就是 GET 方式提交參數;POST 請求主體中的參數;cookie 中的欄位;header 中的 referer、x-forword-for、user-agent、Host 等。
關於 URL 的類型,主要取決於開發者,已經經常說的偽靜態,看上去是靜態頁面,其實頁面的名字就是個變量,這種設置主要用 .htaccess 。
referer 的問題在於,有些應用程式通過 referer 來判斷用戶來源,針對不同的來源釋放不同的內容,比如對於來自搜尋引擎的跳轉,來自合作廣告商的推廣等等,這是我們可以利用的點。
user-agent 的問題在於,不同 UA 可以判斷用戶使用的設備,為了提升用戶體驗,根據 UA 為用戶提供不同的展示頁面,如果展示頁面屬於不同的開發者,不同的頁面,雖然 PC 端展示頁不存在安全問題,那麼移動端展示頁就可能存在問題。
x-forword-for 對於有負載均衡的網站,通常會記錄用戶的外網 IP,對於來源 IP 如果設置了特權,那我們就有利用的可能,比如反爬蟲會對搜尋引擎的 IP 加白,我們可以設置這個參數為搜尋引擎的 IP,那麼就實現了繞過反爬的可能
最後一個帶外通道,理解起來比較費勁,說的應該是應用程式會獲取一些數據,然後攻擊者控制著這些數據,這些數據在被應用程式獲取並處理時觸發安全問題,可以利用的應用程式包括:web 郵箱、自動化爬蟲並展示的應用、獲取網絡流量並展示的系統。
打卡三 P140-145這部分內容主要講如何識別 web 伺服器的類型和版本,主要包括:伺服器消息頭、URL 的文件擴展名、伺服器報錯信息、目錄指紋、會話令牌、第三方組件,識別伺服器的版本能夠讓我們在未來的測試中更有針對性,縮小測試範圍,提升測試效率,也存在以前比較老版本的伺服器組件存在一些 Nday,如果遇到對應版本有漏洞的可以直接進行利用嘗試。
不同的伺服器在請求的響應包中有所提示,但是有些伺服器管理員為了迷惑攻擊者可以將默認的響應信息進行自定義或者偽造,所以在伺服器類型識別中要結合多種方式來進行確認,不能依靠單一方式。
通過 URL 中的文件擴展也能很好的判斷,比如 php 後綴的,通常是 php + apache 或者 PHP + nginx,aspx 後綴的通常是 iis + asp.net 等。
通過各種嘗試使伺服器報錯之後的錯誤頁面能夠看到詳細的伺服器版本信息,比如訪問不存在的目錄或文件報錯,參數中輸入單引號報錯等。
有些伺服器會默認帶一些文件或者目錄,通過目錄測試也可以識別部分 web 伺服器的信息。
開發者在開發的時候經常會使用第三方組件來提升開發效率,結合第三方組件的指紋來對網站進行探測能夠很好的識別網站使用的框架和 web 伺服器的類型。
不同的伺服器在 cookie 中默認使用的 session ID 的名稱有所不同,比如:PHP--PHPSESSID、IIS--ASPSESSIONID、Java--JSESSIONID 等。
關於這塊的技術,存在大量自動化工具,一般 web 自動化掃描器都會存在這個功能,見的多了之後,基本上很快就可以識別出來,一眼看出使用什麼樣的伺服器,網站架構是什麼樣子。
打卡四 P146-156這是第四章最後的內容,其中包括如何識別 url ,查看數據包中哪些是我們可以利用的參數,根據經驗大概推測背後的功能邏輯,做那些操作等等。
這部分內容對後續的章節關於漏洞的類型做了個總結,本書涉及的安全漏洞包括:
客戶端操作確認——伺服器對客戶端攜帶數據沒有做安全檢查
資料庫交互——可能存在 SQL 注入漏洞
文件上傳與下載——路徑遍歷漏洞、存儲型跨站漏洞
對用戶輸入的數據進行展示——跨站漏洞
頁面動態重定向——重定向漏洞與消息頭注入攻擊
社交網絡功能——用戶名枚舉、存儲型跨站漏洞
登錄——用戶名枚舉、弱口令、撞庫、暴力破解
多階段登錄——登錄邏輯漏洞
會話狀態——預測令牌、令牌洩漏
訪問控制——水平越權、垂直越權、未授權訪問
用戶管理——權限提升
明文傳輸——會話劫持、網絡嗅探
站外連結——Referer 消息頭中查詢字符串參數洩漏
錯誤提示——信息洩漏
電子郵件交互——郵件替換
執行本地代碼——緩衝區溢出、命令注入
使用第三方應用程式組件——已知漏洞 Nday
Web 伺服器軟體——伺服器 Nday、配置錯誤
以上內容會在後續的書籍內容中呈現,前面所需的基礎還需踏實沉澱。