[代碼審計]某租車系統JAVA代碼審計[前台sql注入]


0x00 前言

艱難徘徊這么久,終於邁出第一步,畏畏縮縮是阻礙大多數人前進的絆腳石,共勉。

系統是租車系統,這個系統是Adog師傅之前發在freebuf(http://www.freebuf.com/articles/web/162910.html)的,他審的時候沒有發現sql注入,但在評論中有個師傅說有前台sql注入。

那么我就來找找前台的sql注入吧,雖說是java但其實代碼審計的點都是通用的,萬變不離其宗。

扯遠了,這篇文章,算是踏入java代碼審計領域的開篇。

 

0x01 基礎環境搭建

源碼下載:http://down.admin5.com/jsp/135501.html

環境還是某study一把梭,下載鏈接(http://phpstudy.php.cn/phpstudy/JspStudy.zip)

IDE的話用的是IDEA

安裝步驟按照使用說明來就是了

安裝步驟1中,注意要把tomcat的server.xml中的這一行注釋掉

步驟2:在數據庫的目錄中打開cmd窗口,導入mysql的命令: (jspstudy的mysql默認賬號密碼是root/root)

mysql -u root -p opencar <opencar.sql

順便一提這個租車系統的默認配置賬號密碼也是root/root,見db.properties

接着重啟jspstudy即可。

訪問url:http://localhost:8080/opencarrun/,無報錯則表示成功安裝。

 

0x02 前台sql注入

 加載源碼到IDEA,打開大概是這樣子的。

xss和短信轟炸就不說了,直接找sql注入。

根據Adog師傅的文章,我找到了幾個處理sql語句的類,比如

加紅的原因是因為IDEA找不到類的位置,加載的opencar文件夾也確實沒有源碼。

那么如何找到這里的源碼呢?其實在opencarrun\WEB-INF\lib\中存放了相關的依賴jar包,其中有一個名為car-weishang-1.0.jar的jar包

因為是jar包,我們需要反編譯回java文件。

下載jd-gui(http://jd.benow.ca/),可以單獨下載,也可以下載idea的插件,我這里是單獨下載。

反編譯一下這個包,可以拿到相關的源碼:

 

重點關注service下的,因為是前台,所以權限有限,可以重點關注get前綴的方法(表示查詢)

找sql注入的話其實也沒有比較好的方法,就是一個個看,再輔以一定的搜索技巧(看源碼規律配上正則來搜)。

這套系統從Adog師傅的文章知道是用了預編譯的,那么我們要考慮的就是預編譯防御不了的地方,比如like,in,order by這三個位置的。

參考京東安全的這篇文章(https://mp.weixin.qq.com/s?__biz=MjM5OTk2MTMxOQ==&mid=2727827368&idx=1&sn=765d0835f0069b5145523c31e8229850&mpshare=1&scene=1&srcid=0926a6QC3pGbQ3Pznszb4n2q),雖然說的是mybatis框架的,但是預編譯的道理還是一樣。

再結合,java是強類型語言,要注入的話就必須是String類型,那么我們只需要分析可傳String參數的方法即可。

經過刷選,最終符合條件的方法沒幾個,再一一去看代碼是否會有注入,有注入了再去回調調用的地方,最終找到外部傳進來的參數和訪問url。

很幸運找到了幾個。

看到ShopService類的getGoodsPojoListByTypeAndcatAndBranAndPrice方法

回溯看看方法在哪里調用到(Ctrl+Shift+F)

在GoodList.java文件中,跟進去。

這個方法的幾個參數都是有注入的。

同理還有ShopService類的getGoodsPojoListByTypeAndcatAndBranAndPriceCount方法、getGoodsListByExtendCat方法也是一樣,但是位置都是在getGoodsPojoListByTypeAndcatAndBranAndPrice方法之后,所以利用的話還是getGoodsPojoListByTypeAndcatAndBranAndPrice方法比較好利用,至於其他service類也是有可能有注入,就不再一一分析。

分析GoodList.java的訪問url是什么,看到匹配的是/goods url下面。

 

直接訪問會跳404頁面

 通過對前端頁面研究發現是通過首頁的搜索頁面進去的。

 

其中的cat_id就是我們的注入參數(當然還有其他的,不一一舉例),因為系統是對異常進行了捕獲的,所以不能直接進行報錯注入。

那么就只能進行盲注了,用union回顯也是不行的,因為這里的三條語句都是受影響,那么就只能用延時盲注了。

但因為受影響的字段較多,且會執行三遍,並且這里用不了and,只能用or。

那么用or  1=1 和 or 1=2查詢的時間就已經足夠了。

or 1=2的時候大約執行7-8秒,or 1=1的時候大約執行24-26秒左右。

那么我們可以使false的時候為or 1=2,true為or 1=1 ,payload如下:

http://localhost:8080/opencarrun/goods?cat_id=1)%20or+1=if(ascii(substr(user(),1))=114,1,2)%23&menuId=7+

底層不知道為什么還有一個報錯,但不影響注入

雖然是前台注入,但是這個注入點頗為雞肋,實戰意義不大,僅供參考。

到此,該CMS告一段落。

 

0x03 總結

剛開始還有很多生疏的地方,慢慢來吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM