chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內(nèi)不再提示

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支持兩種參數(shù)符號,一種是#,另一種是$。比如:


SELECT*FROMNEWSWHEREID=#{id}

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

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

1、模糊查詢

Select*fromnewswheretitlelike‘%#{title}%’

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

正確寫法:

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

2、in 之后的多個參數(shù)

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

Select*fromnewswhereidin(#{ids})

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

idin

#{ids}

3、order by 之后

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

二、實戰(zhàn)思路

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

1、idea導入項目

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

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

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

2、搜索$關(guān)鍵字

Ctrl+shift+F 調(diào)出Find in Path,篩選后綴xml,搜索$關(guān)鍵字

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

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

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

繼續(xù)往下看到疑似order by 暫時擱置

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

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

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

3、搜索映射對象

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

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

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

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

發(fā)現(xiàn)只有categoryIds與目標參數(shù)ids相似,需進一步確認,返回到IContentDao.java按照標準流繼續(xù)反推

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

找到ids為getSearchCount的最后一個參數(shù),alt+f7查看調(diào)用鏈

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

調(diào)轉(zhuǎn)到ContentBizImpl,確認前臺參數(shù)為categoryIds

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

返回到McmsAction,參數(shù)由BasicUtil.getString接收,

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

跟進BasicUtil.getString

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

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

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

4、漏洞確認

項目運行起來,構(gòu)造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

三、總結(jié)

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

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

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

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

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

審核編輯:湯梓紅

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

    關(guān)注

    20

    文章

    2997

    瀏覽量

    116054
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    789

    瀏覽量

    46500
  • mybatis
    +關(guān)注

    關(guān)注

    0

    文章

    64

    瀏覽量

    7116

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    sql注入原理及預防措施

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

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

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

    sql注入攻擊實例講解

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

    網(wǎng)絡環(huán)境的SQL注入行為檢測

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

    mybatis動態(tài)sql詳解

    本文詳細介紹了mybatis執(zhí)行動態(tài)sql語句的方法。
    發(fā)表于 02-24 11:37 ?4934次閱讀

    mybatis中#和$的區(qū)別

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

    在使用MyBatisSQL語句優(yōu)化總結(jié)

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

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

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

    Fluent Mybatis、原生MybatisMybatis Plus對比

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

    SQL注入到Getshell的教程

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

    一文掌握MyBatis的動態(tài)SQL使用與原理

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

    超級SQL注入工具–SSQLInjection

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

    MyBatis動態(tài)sql是什么?MyBatis動態(tài)SQL最全教程

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

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

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

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

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