本文內容:
~代碼審計得思路
~實戰文章分析
~總結
每日一句:
當排除了所有的可能,剩下的無論是多不可能也是真相。
自新手篇後,好久沒有更新。最近很忙,一直沒有時間來寫寫文章。
但是大家放心,一有時間的話,即更新進階篇或者其他的文章。
不多說,開始正題
一、代碼審計得思路
1,滲透測試的核心
滲透測試的核心 ---> 找漏洞 ---> 找有危害的bug --->
2,爲什麼存在bug?
~開發人員技術不過關
~不同功能(版本)之間的銜接問題
~公司有人得罪了開發
3,安全不能孤立
用戶的體驗性與安全性是成反比的
不能因爲體驗性放棄安全,也不可能因爲安全性放棄體驗性
這就需要尋找最合適的平衡點
所有有一點是確定的,那就是因爲體驗性的存在,安全問題也一定存在
4,代碼審計的核心
~核心在於通過源代碼,知道代碼如何運行,然後根據代碼執行中可能產生
的問題來尋找漏洞
~代碼審計一半泛指白盒審計,但是要記住,通用型漏洞,例如CMS通殺漏洞
其實也可以通過本地搭建後,純黑盒測試也能找到。只不過是白盒測試
更爲全面,也更容易找到漏洞
5,代碼審計思路
~全文通讀
一般從index.html文件切入,因爲這是系統的入口
需要有一定的代碼能力,但是強烈建議有時間一定要全文審計
一個老版本的CMS,只有這樣才能瞭解開發是怎麼寫一個網站的,
正所謂,知己知彼,方能百戰不殆
~代碼能力怎麼樣時,纔可以審計呢?
沒有統一的說法,隨時都可以。
能力好,審計的快點,效率高一些
能力差,審計的慢點,效率低一些,
且審計代碼的過程也是學習的過程(看不懂的函數就百度)
多提一句,第一個審計的cms時間可能會很長,1個月都正常
但是之後的就輕鬆多了
建議代碼能力強點在去審計,不然很容易“從入門到放棄”
~敏感函數定位
掌握住可以存在危險函數的地方 反推
比如我們之前的文章:文件包含、變量覆蓋都提到很多危險函數,
如include,這時直接去找這個函數。再看看有哪些地方的這個函數
是我們可以控制的。然後想辦法使程序運行到我們可以控制的地方
6,個人建議
本着一個關鍵點出發,黑盒與白盒並不是從對立的 (即灰盒測試)
對新人來說,你去黑盒審計一個地方是否存在sql注入,可能很難測試出,
若是黑盒測試這就結束了 但是,這時候我們可以去審計源碼
去找你注入點的代碼,也許能明白爲什麼sql注入沒注入出,
是被轉義了,還是沒有閉合呢,還是有其他的問題呢
然後見招拆招,或者根據CMS特別的參數就可以完成sql注入了
7,滲透測試的步驟(思路)
~正常來說先是信息收集 ---> 擴大攻擊面積 ---> 攻擊
~但是有源碼了,還收集什麼信息,直接幹。具體:
找網站功能點(看看什麼函數控制,什麼傳參控制)
然後黑盒測試:
試試SQL注入、xss、csrf、xxe、ssrf、文件上傳
深入測試一些邏輯漏洞:驗證碼找回、密碼找回、支付漏洞、越權等等
白盒有:
變量覆蓋、文件包含、反序列化
進一步思考爲什麼黑盒沒有測試成功?
是過濾? ---> 過濾規則 ---> 能否繞過
是傳參不對? ---> 傳參經過了什麼處理 --> 能否繞過
二、實戰文章分析
0,以一個CMS爲例
1,劃分功能模塊(比如:)
~安裝
~重複安裝(覆蓋原數據庫內容);可以進入後臺Getshell
很多網站提倡,站庫分離,即網站與數據庫不在同一臺機器
重複安裝時,可以將數據庫外連到我們公開的數據庫。
自定義管理員賬戶密碼後,直接登陸後臺
//需要一個公網服務器
~雙引號解析,直接寫shell
注意,雙引號解析只會發生在php5.5以上的版本
~前臺
~用戶註冊
可能存在的危害
~sql注入
~存儲型xss
~邏輯錯誤可爆破用戶名
標準的註冊處理頁面功能:
~接受傳參
~過濾傳參
~插入數據庫
如何審計?
正常註冊,提交,抓包,
~看看請求包內容。(主要是我們填寫的信息那)
~看看提交給誰處理(找處理頁面)
~看看有沒有標識符(一般和我們填寫信息在一起)
一個php文件可能有幾個功能塊,標識符的作用就是調用哪個功能
然後去標識符功能那看看,功能的代碼(作用)
假設功能是,接受傳參,插入數據庫
//沒有過濾參數或者可以繞過過濾
測試,值得一提的是。流程:
~先正常註冊看看行不行
~在註冊含有惡意代碼的語句
如果正常都註冊不成功,可以試試改變php版本
~擴大攻擊威力
比如註冊的地方存在xss,你登錄後僅僅彈你自己是沒什麼大危害的。
一般的管理員都可以訪問用戶列表,你可以登錄管理員
訪問用戶列表,假如直接彈框。即你這個危害可以從前臺打到後臺
恭喜你可以去審計得到一個CNVD證書,一個存儲型xss一般中危跑不了
~擴大攻擊面積
當打出xss的時候,思考會不會也可以打出sql注入
填寫註冊信息的時候,加上'")#這四個符號試試閉合
發現註冊成功,沒有危害,黑盒測試到這就終止了
但是白盒可以,去看看源代碼怎麼過濾的或用seay審計
找到具體的防護手段,可以思考如何繞過
例如碰到魔術引號,用寬字節,注意bp不能插入漢字
且%df是經過url編碼的,post傳參的話也是不行
綜上,可以寫a',去將a對應hex(16進制)61改爲df
發送修改的數據包,網站報錯,即存在注入
繼續打危害:
可以用updatexml()並補充對應格式,最後加註釋打出報錯注入
對應格式可以通過seay抓到
若一直執行失敗,可以先將語句直接丟到數據庫執行,若沒問題,則說明cms有所防護(關閉了錯誤回顯)
此刻兩個路:盲注(每次驗證碼會變)、有經驗去尋找關閉回顯怎麼來的
兩條路都不易,所以新姿勢:能否一次插入多條數據?
insert into 表名(id,name,pw,email) values (15,'admin123',md5('admin123'),[email protected]'),
//注意這個a的hex改爲gf
//從這開始,開始插入的語句,要避免引號出現
(100,0x自己name的16進制,md5(123456),(select databaase()))#
將這兩句話插入後,我們登錄剛剛註冊的用戶,看看郵箱處,是不是數據庫的名稱
若是,直接構建一個獲取管理員賬戶密碼的語句
ok,到這又一個漏洞搞定
~擴大攻擊面積之邏輯錯誤爆破用戶名
在注入時,經常會提示,你的用戶名已經被使用的情況
可以註冊,抓取註冊語句,通過返回狀態碼批量爆破用戶名
~用戶登錄
可能存在的危害
~寬字節注入 - 萬能密碼
~cookie未加密
如何審計?
登錄處,結合bp和seay看看能否繞
注意要用一個真存在的用戶名去測試,很多cms會檢測你的
用戶名不存在的話,連密碼都不校驗了
一般or 1=1#的語句放到密碼處,用戶名使用存在的
修改資料
~存儲型xss
~sql注入
~文件上傳
~後臺
2,防禦機制
內網比外網弱
後臺比前臺弱
拿下後臺後可以進行,
後臺寫文件,或者getshell的方法。拿下目標服務器
但是代價很大,授權不到位就會進去
三、總結
1,如何提高自己的代碼審計能力
~看文章,關於代碼審計漏洞的文章且復現
~看CNVD,看CNVD公式xxxCMS存在xxx漏洞,然後復現
~自己去進行挖掘,可以先灰盒 在定位危險函數 再復現
2,一些注意的點
~有些時候的過濾檢測是前端的,可以正常輸入信息,抓包,修改
~一個地方有xss,基本也會有其他的一些漏洞如sql注入
~搭建的cms出現一些問題的時候,記得去百度或者谷歌一下
也許一個小小的改動就可以正常使用
~白盒審計可以藉助工具,如Seay(監控數據庫的功能很常用)
~抓包修改後提示驗證碼錯誤,可以右擊驗證碼,複製鏈接,網頁打開,
用這個新的驗證碼將包內驗證碼一併替換
~在bp中a'改hex,一定要放到最後做,不然會發生一些莫名其妙的問題
~記得復原環境,親自測試一遍
blueCms號稱最適合新手的cms,大家可以去找找,搭建一下練練手