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

詳解Mybatis框架SQL防注入指南

 更新時間:2020年07月21日 10:28:46   作者:松華說  
這篇文章主要介紹了詳解Mybatis框架SQL防注入指南,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

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

一、Mybatis的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}%'

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

正確寫法:

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

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

in之后多個id查詢時使用# 同樣會報(bào)錯,

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

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

<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沒有問題。

二、實(shí)戰(zhàn)思路

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

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

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

下載完成,等待maven把項(xiàng)目下載完成

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

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

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

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

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

3、搜索映射對象

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

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

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

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

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

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

跟進(jìn)BasicUtil.getString

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

4、漏洞確認(rèn)

項(xiàng)目運(yùn)行起來,構(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,驗(yàn)證注入存在。

三、總結(jié)

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

1、Mybatis框架下審計(jì)SQL注入,重點(diǎn)關(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防注入指南的文章就介紹到這了,更多相關(guān)Mybatis SQL防注入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java分布式ID中Snowflake雪花算法應(yīng)用實(shí)現(xiàn)

    Java分布式ID中Snowflake雪花算法應(yīng)用實(shí)現(xiàn)

    Snowflake算法作為一種高效且易于實(shí)現(xiàn)的分布式ID生成方案,能夠很好地滿足分布式系統(tǒng)中對全局唯一ID的需求,本文就來介紹一下Java分布式ID中Snowflake雪花算法應(yīng)用實(shí)現(xiàn),感興趣的可以了解一下
    2024-07-07
  • Java中位運(yùn)算(移位、位與、或、異或、非) 的簡單實(shí)例

    Java中位運(yùn)算(移位、位與、或、異或、非) 的簡單實(shí)例

    Java中位運(yùn)算(移位、位與、或、異或、非) 的簡單實(shí)例,需要的朋友可以參考一下
    2013-02-02
  • Mybatis如何從數(shù)據(jù)庫中獲取數(shù)據(jù)存為List類型(存為model)

    Mybatis如何從數(shù)據(jù)庫中獲取數(shù)據(jù)存為List類型(存為model)

    這篇文章主要介紹了Mybatis如何從數(shù)據(jù)庫中獲取數(shù)據(jù)存為List類型(存為model),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring Boot創(chuàng)建非可執(zhí)行jar包的實(shí)例教程

    Spring Boot創(chuàng)建非可執(zhí)行jar包的實(shí)例教程

    這篇文章主要介紹了Spring Boot創(chuàng)建非可執(zhí)行jar包的實(shí)例教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Java中的布隆過濾器原理實(shí)現(xiàn)和應(yīng)用

    Java中的布隆過濾器原理實(shí)現(xiàn)和應(yīng)用

    Java中的布隆過濾器是一種基于哈希函數(shù)的數(shù)據(jù)結(jié)構(gòu),能夠高效地判斷元素是否存在于一個集合中。它廣泛應(yīng)用于緩存、網(wǎng)絡(luò)協(xié)議、數(shù)據(jù)查詢等領(lǐng)域,在提高程序性能和減少資源消耗方面具有顯著優(yōu)勢
    2023-04-04
  • 教你使用eclipse?搭建Swt?環(huán)境的全過程

    教你使用eclipse?搭建Swt?環(huán)境的全過程

    本文給大家分享使用eclipse?搭建Swt?環(huán)境的全過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 簡單剖析Java中動態(tài)線程池的擴(kuò)容以及縮容操作

    簡單剖析Java中動態(tài)線程池的擴(kuò)容以及縮容操作

    這篇文章主要為大家詳細(xì)介紹了Java中動態(tài)線程池的擴(kuò)容以及縮容操作的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • 詳解JDBC對Mysql utf8mb4字符集的處理

    詳解JDBC對Mysql utf8mb4字符集的處理

    這篇文章主要介紹了詳解JDBC對Mysql utf8mb4字符集的處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Spring @value用法示例詳解

    Spring @value用法示例詳解

    這篇文章主要介紹了Spring-@value用法詳解,為了簡化讀取properties文件中的配置值,spring支持@value注解的方式來獲取,這種方式大大簡化了項(xiàng)目配置,提高業(yè)務(wù)中的靈活性,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-08-08
  • RocketMQ源碼本地搭建調(diào)試方法

    RocketMQ源碼本地搭建調(diào)試方法

    這篇文章主要介紹了RocketMQ源碼本地搭建調(diào)試,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01

最新評論

香格里拉县| 红河县| 乃东县| 西藏| 河池市| 长沙市| 彰化市| 六盘水市| 台中市| 彝良县| 讷河市| 平湖市| 吉林省| 侯马市| 鄂托克前旗| 杭锦旗| 苗栗市| 甘孜县| 新昌县| 密云县| 腾冲县| 寿宁县| 左云县| 普定县| 九江市| 邯郸县| 泸溪县| 巨野县| 永登县| 青铜峡市| 曲麻莱县| 富蕴县| 蓬安县| 丰台区| 曲靖市| 东乡县| 宁武县| 区。| 长乐市| 敦煌市| 象州县|