iT邦幫忙

2022 iThome 鐵人賽

DAY 6
1
影片教學

從建立環境、驗證漏洞、感受漏洞來學習資安系列 第 6

Day06 - Spring4Shell 跟 Log4Shell 建置環境差不了多少,地獄17層和16層的差別而已

  • 分享至 

  • xImage
  •  

Yes

  • 第六天終於要開始進行第二個漏洞環境的分析,但這次會針對這個漏洞設計一個測試用的SpringBoot專案,方便我們之後進行測試用。而測試的程式碼則是透過靜態分析觀察而來的。 /images/emoticon/emoticon12.gif

  • 漏洞分析方式

    • 靜態分析
      • WAR 檔案解析
      • Java 物件反組譯
    • 專案建置 :
      • SpringBoot 專案建置
      • Dockerfile 的撰寫

靜態分析的部分與之前相同。相關步驟如下所示:

1. docker run -p 8066:8080 --rm --name spring4shell vulfocus/spring-core-rce-2022-03-29:latest #執行弱點專案,並expose在8066 port 上面
2. docker exec -it spring4shell bash #進到容器內執行shell指令
3. ps aux #觀察一下容器內執行程式,並得到程式目錄位置
4. exit #脫離容器
5. docker cp spring4shell:/app/tomcat/webapps/ROOT.war . #將容器內的弱點專案複製到宿主機當前目錄
6. docker cp spring4shell:/app/jdk9 . #將jdk9複製到宿主機當前目錄
  • 跟之前一樣將WAR檔案丟入JD-GUI進行分析。可以從pom.xml看出使用的spring-boot-starter-parent為2.6.5版本,其中相關核心套件會是5.3.17版本。相關的程式進入點分析可以參考之前Log4Shell的分析方式,就可以找到程式的主邏輯位址。參考如下圖。

https://ithelp.ithome.com.tw/upload/images/20220920/20148308C4TqU2mJUj.jpg

https://ithelp.ithome.com.tw/upload/images/20220920/20148308lV3G6zxmLn.jpg

  • 這個主程式有一個特別的地方就是用到了SpringBoot的 Data Binding 功能,協助將傳入的參數綁定到物件上。這部分待會我們會透過例子進行測試。但首要之務在於建置一個可控的弱點專案出來進行測試及修改。

  • SpringBoot可有提供相關的IDE及初始化專案可以使用,分別為Spring Tools以及Spring initializr。可透過下列方式進行弱點專案的編譯。

*小提醒,Eclipse的設定目錄在專案目錄底下。Maven的下載資料在家目錄的.m2底下。

建置步驟 :

  1. 進入 https://start.spring.io/
  2. 設定相關參數如下圖 (紅色框圍需要注意部分,不要選錯)
    https://ithelp.ithome.com.tw/upload/images/20220920/20148308uitWTxL7Xx.jpg
  3. 按下GENERATE按鈕產生專案
  4. 進入 https://spring.io/tools 下載想用的IDE並解縮
  5. 開啟IDE,調整IDE字型大小或是風格(非必要)
  6. 用Maven專案匯入剛剛產生的SpringBoot專案
  7. 設定編譯用的JDK設定
  8. 調整POM檔案內的配置 (java version -> 1.9 以及spring-boot-starter-parent -> 2.6.5)
  9. 將弱點反組譯的程式部分複製貼上
  10. export PATH=/home/aeifkz/iThome_30/day06/jdk9/bin:$PATH #設定外部JDK版本
  11. mvn clean package -DskipTests
  12. 將編譯出來的檔案重新命名
  • 為了不要重新下載tomcat進行環境建置,接著要編寫一個Dockerfile借用弱點專案的容器環境,把建置該專案會用的指令寫在一個檔案在編譯成容器。

建置步驟 :

  1. vim Dockerfile #新增一個 Dockerfile檔案
  2. 輸入以下程式碼
FROM vulfocus/spring-core-rce-2022-03-29:latest
ADD Spring4Shell/target/Spring4Shell.war /app/tomcat/webapps
CMD ["/app/tomcat/bin/catalina.sh","run"]
  1. docker build --tag my_spring4shell:v1.0 --no-cache .
  2. dokcer images #觀察編譯後的映像檔
  3. docker run -p 8066:8080 --rm --name my_spring4shell my_spring4shell:v1.0 #執行容器
  4. curl http://localhost:8066/Spring4Shell/?username=1234 #測試自動綁定功能
  5. python3 test.py --url http://localhost:8066/Spring4Shell/ #進行payload攻擊測試
  6. curl --output - "http://localhost:8066/tomcatwar.jsp?pwd=j&cmd=whoami"
  • 透過這次的SpringBoot的專案建置,並借用容器環境,我們部署出了可以隨意測試的測試環境,那下一次的影片就要透過這個環境針對這個漏洞的原理做更多的測試。

參考資料

  1. Spring Tools
  2. Spring initializr

上一篇
Day05 - 那些年,我們與黑橘大神一起追的Spring4Shell (作業1解答)
下一篇
Day 06 亂入 - Dirty 漏洞系列,Assemble!!!!
系列文
從建立環境、驗證漏洞、感受漏洞來學習資安37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言