在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

Mybatis的SQL注入審計(jì)的基本方法

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

前言

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

一、Mybatis的SQL注入

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


SELECT*FROMNEWSWHEREID=#{id}

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

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

1、模糊查詢

Select*fromnewswheretitlelike‘%#{title}%’

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

正確寫法:

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

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

in之后多個(gè)id查詢時(shí)使用# 同樣會(huì)報(bào)錯(cuò),

Select*fromnewswhereidin(#{ids})

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

idin

#{ids}

3、order by 之后

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

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

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

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

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

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

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個(gè)前三個(gè)為數(shù)據(jù)庫(kù)選擇,跳過,

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

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

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

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

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

3、搜索映射對(duì)象

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

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

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

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

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

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

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

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

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

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

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

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

跟進(jìn)BasicUtil.getString

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

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

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

4、漏洞確認(rèn)

項(xiàng)目運(yùn)行起來,構(gòu)造sql語(yǔ)句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)證注入存在。

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

三、總結(jié)

以上就是mybatis的sql注入審計(jì)的基本方法,我們沒有分析的幾個(gè)點(diǎn)也有問題,新手可以嘗試分析一下不同的注入點(diǎn)來實(shí)操一遍,相信會(huì)有更多的收獲。當(dāng)我們?cè)儆龅筋愃茊栴}時(shí)可以考慮:

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

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

3、Mybatis注解編寫sql時(shí)方法類似

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

審核編輯:湯梓紅

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

    關(guān)注

    20

    文章

    2982

    瀏覽量

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

    關(guān)注

    1

    文章

    779

    瀏覽量

    44641
  • mybatis
    +關(guān)注

    關(guān)注

    0

    文章

    63

    瀏覽量

    6831

原文標(biāo)題:Mybatis 框架下 SQL 注入審計(jì)分析

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    sql注入原理及預(yù)防措施

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

    基于SQL注入攻擊檢測(cè)與防御的方法

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

    sql注入攻擊實(shí)例講解

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

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

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

    mybatis動(dòng)態(tài)sql詳解

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

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

    注入。$方式無法防止Sql注入。$方式一般用于傳入數(shù)據(jù)庫(kù)對(duì)象,例如傳入表名。一般能用#的就別用$。所以我們?cè)谑褂?b class='flag-5'>mybatis的時(shí)候,盡量的使用#方式,這是大家要注意的地方。
    發(fā)表于 02-24 13:35 ?2340次閱讀

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

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

    SQL注入攻擊是什么 SQL注入會(huì)帶來哪些威脅

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

    Fluent Mybatis、原生MybatisMybatis Plus對(duì)比

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

    SQL注入到Getshell的教程

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

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

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

    超級(jí)SQL注入工具–SSQLInjection

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

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

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

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

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

    什么是SQL注入?Java項(xiàng)目防止SQL注入方式

    Java項(xiàng)目防止SQL注入方式 這里總結(jié)4種: PreparedStatement防止SQL注入 mybatis中#{}防止
    發(fā)表于 10-16 14:26 ?747次閱讀
    主站蜘蛛池模板: 夜夜爽天天爽 | 性色在线视频 | 婷婷99精品国产97久久综合 | 免费人成在线观看视频色 | 8x8x极品国产在线 | fenfencao在线观看免费视频 | 久久这里精品青草免费 | 97天天摸天天碰天天爽 | 久久狠狠干 | 韩国黄色三级视频 | 亚洲大成色www永久网址 | 午夜高清视频 | semm亚洲欧美在线高清 | 亚洲www视频 | 国模精品视频一区二区三区 | 一本到午夜92版免费福利 | 69女poren18女 | 菲菲国产在线观看 | 国产五月 | 国产精品午夜自在在线精品 | 免费成人毛片 | 网红和老师啪啪对白清晰 | 午夜一级精品免费毛片 | 欧美一区二区三区在线观看 | 好大好硬好长好爽a网站 | 久久性生活 | 狠狠色丁香婷婷综合 | 伦理一区二区三区 | 色噜噜狠狠色综合欧洲selulu | 在线看视频你懂的 | 免费福利片2022潦草影视午夜 | 丁香视频在线观看播放 | 视频一区二区三区在线观看 | 日产毛片| 福利社藏经阁 | 在线看黄色的网站 | 中文字幕av一区二区三区 | 亚洲三级理论 | 美女一级毛片免费观看 | 在线播放免费人成毛片乱码 | 午夜精品久久久久久久第一页 |