最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis下SQL注入攻擊的3種方式

 更新時間:2021年07月05日 15:16:17   作者:公眾號:IT老哥  
SQL注入漏洞作為WEB安全的最常見的漏洞之一,本文希望通過Mybatis框架使用不當(dāng)導(dǎo)致的SQL注入問題為例,能夠拋磚引玉給新手一些思路。感興趣的可以了解一下

前言

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

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

`<select id="queryAll"  resultMap="resultMap">`
 `SELECT * FROM NEWS WHERE ID = #{id}`
`</select>`

#使用預(yù)編譯,$使用拼接SQL。

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

1、模糊查詢

Select * from news where title like ‘%#{title}%'

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

正確寫法:

select * from news where tile like concat(‘%',#{title}, ‘%')

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

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

Select * from news where id in (#{ids})

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

`id in`
`<foreach collection="ids" item="item" open="("separatosr="," close=")">`
`#{ids}` 
`</foreach>`

3、order by 之后

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

二、實戰(zhàn)思路

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

1、idea導(dǎo)入項目

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

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

1592450876_5eeadf3cabd3f.png!small

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

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

1592452194_5eeae46267257.png!small

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

1592452345_5eeae4f964218.png!small

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

1592452267_5eeae4ab1bbcc.png!small

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

1592450877_5eeadf3d1556c.png!small

3、搜索映射對象

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

1592450877_5eeadf3d5e474.png!small

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

1592452415_5eeae53fec991.png!small

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

1592450877_5eeadf3d8bcea.png!small

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

1592450877_5eeadf3dc14e8.png!small

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

1592450877_5eeadf3dcdcf1.png!small

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

1592450877_5eeadf3de12fa.png!small

跟進BasicUtil.getString

1592450878_5eeadf3e1cbeb.png!small

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

1592450878_5eeadf3e19a8a.png!small

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,驗證注入存在。

1592450878_5eeadf3e7e396.png!small

三、總結(jié)

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

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

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

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

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

到此這篇關(guān)于MyBatis下SQL注入攻擊的3種方式的文章就介紹到這了,更多相關(guān)MyBatis SQL注入攻擊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA 數(shù)據(jù)結(jié)構(gòu)之Queue處理實例代碼

    JAVA 數(shù)據(jù)結(jié)構(gòu)之Queue處理實例代碼

    這篇文章主要介紹了JAVA 數(shù)據(jù)結(jié)構(gòu)之Queue處理實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • java比較兩個json文件的差異及說明

    java比較兩個json文件的差異及說明

    這篇文章主要介紹了java比較兩個json文件的差異及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 淺談HttpClient、okhttp和RestTemplate的區(qū)別

    淺談HttpClient、okhttp和RestTemplate的區(qū)別

    這篇文章主要介紹了HttpClient、okhttp和RestTemplate的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring Security 實現(xiàn)用戶名密碼登錄流程源碼詳解

    Spring Security 實現(xiàn)用戶名密碼登錄流程源碼詳解

    在服務(wù)端的安全管理使用了Spring Security,用戶登錄成功之后,Spring Security幫你把用戶信息保存在Session里,但是具體保存在哪里,要是不深究你可能就不知道,今天小編就帶大家具體了解一下Spring Security實現(xiàn)用戶名密碼登錄的流程
    2021-11-11
  • SpringMVC中@controllerAdvice注解的詳細解釋

    SpringMVC中@controllerAdvice注解的詳細解釋

    剛接觸SpringMVC應(yīng)該很少會見到這個注解,其實它的作用非常大,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@controllerAdvice注解的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • 深入理解Java強依賴和弱依賴

    深入理解Java強依賴和弱依賴

    本文主要介紹了深入理解Java強依賴和弱依賴,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • java創(chuàng)建excel示例(jxl使用方法)

    java創(chuàng)建excel示例(jxl使用方法)

    Java Excel是一開放源碼項目,通過它Java開發(fā)人員可以讀取Excel文件的內(nèi)容、創(chuàng)建新的Excel文件、更新 已經(jīng)存在的Excel文件。下面是使用方法,包括去掉網(wǎng)格線、字體設(shè)置、單元格設(shè)置、對齊方式等設(shè)置
    2014-03-03
  • java進階解析Springboot上傳excel存入數(shù)據(jù)庫步驟

    java進階解析Springboot上傳excel存入數(shù)據(jù)庫步驟

    項目需要,寫了一個,批量導(dǎo)入的接口。因為需要使用excel去批量導(dǎo)入數(shù)據(jù),所以寫了一個例子,經(jīng)過測試已經(jīng)可以用于實際開發(fā),這里記錄一下
    2021-09-09
  • Java并發(fā)編程之synchronized底層實現(xiàn)原理分析

    Java并發(fā)編程之synchronized底層實現(xiàn)原理分析

    這篇文章主要介紹了Java并發(fā)編程之synchronized底層實現(xiàn)原理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • SpringBoot項目如何打可執(zhí)行war包

    SpringBoot項目如何打可執(zhí)行war包

    最近小編做了一個springboot項目,最后需要打成war包在容器中部署,下面小編給大家分享下SpringBoot項目如何打可執(zhí)行war包,感興趣的朋友一起看看吧
    2020-04-04

最新評論

西峡县| 伊春市| 古蔺县| 城口县| 望奎县| 麻城市| 崇信县| 奈曼旗| 磐安县| 常熟市| 邹平县| 阿图什市| 南京市| 福州市| 金溪县| 上林县| 个旧市| 巴塘县| 盐边县| 永清县| 朝阳区| 宁强县| 金塔县| 鄂伦春自治旗| 贡山| 航空| 平塘县| 宜州市| 平和县| 云南省| 曲周县| 武胜县| 北流市| 霍山县| 尚义县| 什邡市| 体育| 梓潼县| 留坝县| 通城县| 高雄县|