<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    PHP代碼審計學習

    VSole2021-09-18 12:43:18

    0x01 工具準備

    PHPSTORM,不只是編程。

    個人覺得只要能夠提供全局搜索、單頁搜索、函數跳轉的編輯器就能夠滿足要求。一般在審計的時候,先找到一個入口點,配合代碼和瀏覽器,一邊下斷點,一邊打印變量,再在瀏覽器上觀察反應。

    自動化審計工具,食之無味,棄之可惜。

    當然,我手邊能用到的自動化審計工具就是能在網上找到資源的那幾種。對于快速定位漏洞點來審計,自動化工具是有一定作用的,但是,大多數我能接觸到的審計工具大抵是基于規則匹配的或者有一定的數據流向,但由于不能做到語義識別,很多邏輯控制語句無法識別,導致敏感點可可控參數無法自由的跳轉結合。

    現在的習慣是,有了代碼,先會扔進審計工具里跑一跑,看一個大概趨勢,如果時間充裕,一般還是愿意一點一點從代碼入口點跟進。

    0x02 審計初步

    審計可以從多個角度切入,首先是搞清楚審計對象的架構,是套了開源的框架,還是原生代碼;是MVC,還是僅僅是函數調用。

    那么在審計之前,最好就是使用或者熟悉這些常見框架的特性機制。

    CI

    https://codeigniter.org.cn/

    YII2http://www.yiichina.com/

    ThinkPHPhttp://www.thinkphp.cn/

    Laravelhttps://laravel.com/

    熟悉這些框架方便我們快速判斷審計點。比如之前的一次代碼審計就是套了ThinkPHP的核心代碼,結果導致ThinkPHP的漏洞對于那套系統依然適用。

    為了能夠邊學習邊實踐別人的思想,我這里以MetInfo為例進行學習。

    對于快速審計,比如自動化工具,往往可以考慮以下一些切入點。

    敏感函數切入

    敏感函數包括能夠代碼執行(PHP、MYSQL)的函數、上傳下載文件的函數、文件讀取的函數、加載資源的函數。

    • eval()- 海洋CMS6.28
    @eval("if(".$strIf."){\$ifFlag=true;}else{\$ifFlag=false;}");
    
    • exec()-imo云辦公
    $result = exec($_POST['command']);
    
    • preg_replace()-Thinkphp2.1
    preg_replace('/test/e', 'phpinfo()', 'just test');
    preg_replace('@(w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
    
    • system()-Family Connections CMS v2.5.0-v2.7.1
    • assert()
    • call_user_func()
    • call_user_func_array()
    • create_function
    • shell_exec()
    • passthru()-Narcissus在線圖像匯編器
    • escapeshellcmd()
    • pcntl_exec()
    • 反引號 ` 大括號{}
    • ob_start()
    • array_map()
    • proc_open()
    • popen()
    • require_once()
    • include_once()
    • file_get_contents()
    • highlight_file()
    • fopen()
    • readfile()
    • fread()
    • fgetss()
    • fgets()
    • parse_ini_file()
    • show_source()
    • file()
    • echo XSS

    ...............

    這一類的函數有很多,這種漏洞一般可能會呈現兩種趨勢,一種就是常用函數過濾繞過,一種是不常見函數用法失誤的。

    漏洞點切入

    如果說白盒找敏感函數的話,黑盒上對應的就是優先查找程序的SQL執行點、上傳點、登錄點、密碼找回點等

    • SQL注入

    登錄頁面、表單接收頁面、信息顯示頁面

    普通拼接,這種不多說了,主流開源的代碼想挖到這種已經很難了,要么沒有拼接的用法,要么就做了更加嚴格的過濾。

    當然,這里有些小技巧,比如多次過濾情況下的繞過。如\include\mail\class.phpmailer.php的1741行:

    tip1:$textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s','',$message)));
    

    這里連續用了兩個過濾函數,這兩個函數在一起容易造成繞過。

    可以使用這兩個payload做對比:

    <head>evil</head>
    <he<>ad>evil</head>
    

    編碼注入:

    二次編碼注入,addslashes、mysql_real_escape_string、mysql_escape_string或者開啟GPC來轉義,但是,如果再次使用urlencode就會出現二次編碼。

    • 文件包含

    模塊加載,模板加載,cache調用

    • 任意文件讀取

    尋找文件讀取敏感函數

    • 文件上傳

    move_uploaded_file()

    • 文件刪除

    unlink()

    • 變量覆蓋

    extract()

    parse_str()

    $$

    index切入

    從軟件的index入口點開始,逐漸遍歷到所有函數文件。

    0x03 審計實踐

    這里以Metinfo為例進行演示,先大致了解一下該款CMS的結構。

    根目錄下入口index.php,前臺客戶邏輯在/member/里,后臺邏輯在/admin/里,自己創建的應用在/app/中,

    前臺的下載/搜索/等邏輯對應在相應的目錄下。

    常用的功能函數集中在/include/下,重點在*.inc.php和*.func.php中

    /index.php    
    |
    /include/common.inc.php
    

    這個文件很有意思,比如里面有名的變量覆蓋,由變量覆蓋處跳轉到過濾函數daddslashes(),明顯這里有國瓷打補丁的痕跡,分享時現場細說,這里就不贅述。

      /include/common.inc.php

    |

    /include/head.php
    |
    /app/    
    |
    /include/
    

    MetInfo由于特殊的變量傳遞機制和路由機制,使得我們可以輕易訪問到任意PHP文件并且攜帶參數進行測試,所以對于它的審計順序會更加松散一點。

    我這里先從關聯性較弱的/about/,/upload/,/search/等幾個文件夾看起,最后再集中閱讀用戶應用的/app/文件夾。

    利用前面說到的斷點輸出變量的方法一點一點調試實例,分享用。

    (http://127.0.0.1/case/index.php?metid=1&filpy=&fmodule=0&modulefname=2)

    到這里都沒有什么太大的發現,唯一的感受就是有很多點都很驚險,由于沒有用MVC框架,顯然很多SQL語句之間的寫法差異都比較大。

    之后就可以跟進include的功能函數來看,也就是在這里終于知道了一個小漏洞。

    前臺大概看得差不多,就可以跟進后臺admin文件夾看看,這里就會覺得輕松很多,一個后臺就不在適用過濾函數了,另一個后臺功能更多一點,不過后臺漏洞大多就只能算代碼BUG,沒有前臺來得那么驚艷。

    大多數的內容打算分享的時候直接口述,這里其實只能算是一個大綱,所以文字上可能不是很通順。

    php審計軟件
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    Java審計其實和Php審計的思路一樣,唯一不同的可能是復雜的框架和代碼。
    PHP代碼審計學習
    2021-09-18 12:43:18
    這是一次分享準備。自己還沒有總結這個的能力,這次就當個搬運工好了~~0x
    企業安全規劃建設過程中,往往會涉及到開發的代碼安全,而更多可以實現落地的是源代碼安全審計中,使用自動化工具代替人工漏洞挖掘,并且可以交付給研發人員直接進行安全自查,同時也更符合SDL的原則,此外可以顯著提高審計工作的效率。
    作者:LoRexxar‘@知道創宇404實驗室時間:2020年9月21日 前言 自從人類發明了工具開始,人類就在不斷為探索如何更方便快捷的做任何事情,在科技發展的過程中,人類不斷地試錯,不斷地思考,于是才有了現代偉大的科技...
    歐盟近日宣布將為歐盟公共服務部門大量使用的五個開源項目提供漏洞賞金計劃。
    權限維持分析
    2021-11-23 09:28:29
    專注是做事成功的關鍵,是健康心靈的特質。當你與所關注的事物融為一體時,就不會讓自己縈繞于焦慮之中。專注與放松,是同一枚硬幣的兩面而已。一個人對一件事只有專注投入才會帶來樂趣。一旦你專注投入進去,它立刻就變得活生生起來。
    在信息安全領域。后門是指通過繞過安全控制措施獲取對程序或系統ti訪問權限的方法。系統維護人員可以清除操作系統中的后門,以恢復目標系統安全控制體系的正規用戶的認證過程。在windows主機上連續按5次“shift”鍵,就可以調出粘滯鍵。windows的粘滯鍵主要是為無法同時按多個按鍵的用戶設計的。
    今天分享的主題是開源軟件漏洞挖掘實踐,主要講對于企業項目、開源項目審計的認識以及做代碼審計的經驗。
    代碼安全審計
    2023-06-02 09:19:23
    代碼安全審計是指有開發和安全經驗的人員,通過閱讀開發文檔和源代碼,以自動化分析工具或者人工分析為手段,對應用程序進行深入分析,高效全面的發現系統代碼的編碼缺陷以及開發人員不安全的編程習慣,并指導開發人員進行修復,保障應用系統的安全運行。
    經過這個cms的審計過后 對MVC這種框架的也有了基本的認識了 以后遇到也不至于這樣的無厘頭 不知道怎么搞路由 怎么調用的
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类