女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Mybatis的SQL注入審計的基本方法

馬哥Linux運維 ? 來源:freebuf ? 作者:sunny ? 2022-10-17 11:16 ? 次閱讀

前言

SQL注入漏洞作為WEB安全的最常見的漏洞之一,在java中隨著預編譯與各種ORM框架的使用,注入問題也越來越少。新手代碼審計者往往對Java Web應用的多個框架組合而心生畏懼,不知如何下手,希望通過Mybatis框架使用不當導致的SQL注入問題為例,能夠拋磚引玉給新手一些思路。

一、Mybatis的SQL注入

Mybatis的SQL語句可以基于注解的方式寫在類方法上面,更多的是以xml的方式寫到xml文件。Mybatis中SQL語句需要我們自己手動編寫或者用generator自動生成。編寫xml文件時,MyBatis支持兩種參數符號,一種是#,另一種是$。比如:


SELECT*FROMNEWSWHEREID=#{id}

#使用預編譯,$使用拼接SQL。

Mybatis框架下易產生SQL注入漏洞的情況主要分為以下三種:

1、模糊查詢

Select*fromnewswheretitlelike‘%#{title}%’

在這種情況下使用#程序會報錯,新手程序員就把#號改成了$,這樣如果java代碼層面沒有對用戶輸入的內容做處理勢必會產生SQL注入漏洞。

正確寫法:

select*fromnewswheretilelikeconcat(‘%’,#{title},‘%’)

2、in 之后的多個參數

in之后多個id查詢時使用# 同樣會報錯,

Select*fromnewswhereidin(#{ids})

正確用法為使用foreach,而不是將#替換為$

idin

#{ids}

3、order by 之后

這種場景應當在Java層面做映射,設置一個字段/表名數組,僅允許用戶傳入索引值。這樣保證傳入的字段或者表名都在白名單里面。需要注意的是在mybatis-generator自動生成的SQL語句中,order by使用的也是$,而like和in沒有問題。

二、實戰思路

我們使用一個開源的cms來分析,java sql注入問題適合使用反推,先搜索xml查找可能存在注入的漏洞點-->反推到DAO-->再到實現類-->再通過調用鏈找到前臺URL,找到利用點,話不多說走起

1、idea導入項目

Idea首頁 點擊Get from Version Control,輸入https://gitee.com/mingSoft/MCMS.git

下載完成,等待maven把項目下載完成

fdd247fc-4bd3-11ed-a3b6-dac502259ad0.jpg

2、搜索$關鍵字

Ctrl+shift+F 調出Find in Path,篩選后綴xml,搜索$關鍵字

fddcd474-4bd3-11ed-a3b6-dac502259ad0.jpg

根據文件名帶Dao的xml為我們需要的,以IContentDao.xml為例,雙擊打開,ctrl +F 搜索$,查找到16個前三個為數據庫選擇,跳過,

fde7f1a6-4bd3-11ed-a3b6-dac502259ad0.jpg

繼續往下看到疑似order by 暫時擱置

fe022cd8-4bd3-11ed-a3b6-dac502259ad0.jpg

繼續往下看發現多個普通拼接,此點更容易利用,我們以此為例深入,只查找ids從前端哪里傳入

fe15b88e-4bd3-11ed-a3b6-dac502259ad0.jpg

3、搜索映射對象

Mybatis 的select id對應要映射的對象名,我們以getSearchCount為關鍵字搜索映射的對象

fe24f786-4bd3-11ed-a3b6-dac502259ad0.png

搜到了IContentDao.java,IContentDaoimpl.java和McmsAction.java,分別對應映射的對象,對象的實現類和前端controler,直接跳轉到controler類

ff068b6a-4bd3-11ed-a3b6-dac502259ad0.jpg

發現只有categoryIds與目標參數ids相似,需進一步確認,返回到IContentDao.java按照標準流繼續反推

ff13d2d4-4bd3-11ed-a3b6-dac502259ad0.png

找到ids為getSearchCount的最后一個參數,alt+f7查看調用鏈

ff244600-4bd3-11ed-a3b6-dac502259ad0.jpg

調轉到ContentBizImpl,確認前臺參數為categoryIds

ff33e498-4bd3-11ed-a3b6-dac502259ad0.jpg

返回到McmsAction,參數由BasicUtil.getString接收,

ffab9646-4bd3-11ed-a3b6-dac502259ad0.jpg

跟進BasicUtil.getString

ffb35458-4bd3-11ed-a3b6-dac502259ad0.jpg

繼續跳到SpringUtil.getRequest(),前端未做處理,sql注入實錘

ffc53768-4bd3-11ed-a3b6-dac502259ad0.jpg

4、漏洞確認

項目運行起來,構造sql語句http://localhost:8080/ms-mcms/mcms/search.do?categoryId=1%27)%20%20or+updatexml(1,concat(0x7e,(SELECT+%40%40version),0x7e),1)%23 得到mysql的版本5.7.27,驗證注入存在。

ffddce04-4bd3-11ed-a3b6-dac502259ad0.jpg

三、總結

以上就是mybatis的sql注入審計的基本方法,我們沒有分析的幾個點也有問題,新手可以嘗試分析一下不同的注入點來實操一遍,相信會有更多的收獲。當我們再遇到類似問題時可以考慮:

1、Mybatis框架下審計SQL注入,重點關注在三個方面like,in和order by

2、xml方式編寫sql時,可以先篩選xml文件搜索$,逐個分析,要特別注意mybatis-generator的order by注入

3、Mybatis注解編寫sql時方法類似

4、java層面應該做好參數檢查,假定用戶輸入均為惡意輸入,防范潛在的攻擊

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    20

    文章

    2984

    瀏覽量

    106841
  • SQL
    SQL
    +關注

    關注

    1

    文章

    780

    瀏覽量

    44801
  • mybatis
    +關注

    關注

    0

    文章

    63

    瀏覽量

    6867

原文標題:Mybatis 框架下 SQL 注入審計分析

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    sql注入原理及預防措施

    信息直接存放,加密或者hash掉密碼和敏感的信息。5. 應用的異常信息應該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝6. sql注入的檢測方法一般采取輔助軟件或網站平臺來檢測
    發表于 03-21 14:47

    基于SQL注入攻擊檢測與防御的方法

    顯露出來,這些給人們的生活、工作、學習都帶來了巨大的損失。面對Web 網站存在的種種安全漏洞問題,文章通過對大量SQL注入攻擊報文的攻擊特征進行總結分析,結合SQL注入攻擊的攻擊特征和
    發表于 10-31 10:57 ?18次下載
    基于<b class='flag-5'>SQL</b><b class='flag-5'>注入</b>攻擊檢測與防御的<b class='flag-5'>方法</b>

    sql注入攻擊實例講解

     “SQL注入”是一種利用未過濾/未審核用戶輸入的攻擊方法(“緩存溢出”和這個不同),意思就是讓應用運行本不應該運行的SQL代碼。如果應用毫無防備地創建了
    發表于 11-17 14:07 ?1.9w次閱讀
    <b class='flag-5'>sql</b><b class='flag-5'>注入</b>攻擊實例講解

    網絡環境的SQL注入行為檢測

    SQL注入攻擊是Web應用面臨的主要威脅之一,傳統的檢測方法針對客戶端或服務器端進行。通過對SQL注入的一般過程及其流量特征分析,發現其在請
    發表于 02-23 09:58 ?1次下載

    mybatis動態sql詳解

    本文詳細介紹了mybatis執行動態sql語句的方法
    發表于 02-24 11:37 ?3959次閱讀

    mybatis中#和$的區別

    注入。$方式無法防止Sql注入。$方式一般用于傳入數據庫對象,例如傳入表名。一般能用#的就別用$。所以我們在使用mybatis的時候,盡量的使用#方式,這是大家要注意的地方。
    發表于 02-24 13:35 ?2365次閱讀

    在使用MyBatisSQL語句優化總結

    MyBatis 作為一款優秀的持久層框架,它支持自定義SQL、存儲過程以及高級映射。它免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作。還可以通過簡單的 XML 或注解來配置和映射原始
    的頭像 發表于 02-04 15:20 ?2980次閱讀

    SQL注入攻擊是什么 SQL注入會帶來哪些威脅

    AQL的定義 SQL是操作數據庫數據的結構化查詢語言,網頁的應用數據和后臺數據庫中的數據進行交互時會采用SQL。而SQL注入是將Web頁面的原URL、表單域或數據包輸入的參數,修改拼接
    的頭像 發表于 08-04 17:40 ?5376次閱讀

    Fluent Mybatis、原生MybatisMybatis Plus對比

    使用fluent mybatis可以不用寫具體的xml文件,通過java api可以構造出比較復雜的業務sql語句,做到代碼邏輯和sql邏輯的合一。不再需要在Dao中組裝查詢或更新操作,在xml或
    的頭像 發表于 09-15 15:41 ?1621次閱讀

    SQL注入到Getshell的教程

    上一節,我們已經介紹了基本的SQL查詢語句,常見的SQL注入類型,DVWA靶場演示SQL注入。學習了上一節我們可以做到執行任意
    的頭像 發表于 09-21 14:45 ?3329次閱讀

    一文掌握MyBatis的動態SQL使用與原理

    摘要:使用動態 SQL 并非一件易事,但借助可用于任何 SQL 映射語句中的強大的動態 SQL 語言,MyBatis 顯著地提升了這一特性的易用性。
    的頭像 發表于 01-06 11:27 ?1206次閱讀

    超級SQL注入工具–SSQLInjection

    支持手動靈活的進行SQL注入繞過,可自定義進行字符替換等繞過注入防護。本工具為滲透測試人員、信息安全工程師等掌握SQL注入技能的人員設計,需
    的頭像 發表于 03-07 10:26 ?2511次閱讀

    MyBatis動態sql是什么?MyBatis動態SQL最全教程

    動態 SQLMyBatis 的強大特性之一。在 JDBC 或其它類似的框架中,開發人員通常需要手動拼接 SQL 語句。根據不同的條件拼接 SQL 語句是一件極其痛苦的工作。
    的頭像 發表于 08-10 10:18 ?1151次閱讀

    sql注入漏洞解決方法有哪些?

    什么是sql注入SQL注入(SQLi)是一種執行惡意SQL語句的注入攻擊。攻擊者可能會利用
    的頭像 發表于 10-07 17:29 ?5446次閱讀
    <b class='flag-5'>sql</b><b class='flag-5'>注入</b>漏洞解決<b class='flag-5'>方法</b>有哪些?

    什么是SQL注入?Java項目防止SQL注入方式

    Java項目防止SQL注入方式 這里總結4種: PreparedStatement防止SQL注入 mybatis中#{}防止
    發表于 10-16 14:26 ?792次閱讀