ysoserial.net dockerize

2024-02-10

最近遇到了需要打反序列化的靶機,產 payload 的工具想當然第一時間會想到 ysoserial

但這次我要的是 .net 的版本而不是一般常見的 JAVA 版本,喜歡把工具都裝到 Linux 上的我於是在想 .net 版本的有沒有跟 JAVA 一樣有 docker 版本

但很遺憾地找到這篇 issue
https://github.com/pwntester/ysoserial.net/issues/47

既然作者覺得沒辦法,那我就自己想辦法弄一個出來吧,實際研究下去後才知道為什麼作者覺得不可行,一個完整的 docker build 應該是不需要跟使用者有任何交互的需求就能完成,但受限 .net framework 的安裝一定需要交互才能

但我主要的目的是不想汙染現有環境跟不想折騰 wine 的安裝,想要弄一個穩定的環境來跑,需不需要 interactive 對我來說並不重要

廢話說那麼多,直接給做法

安裝 ysoserial.net 的 reference:
https://medium.com/@hypri0n/run-ysoserial-exe-on-kali-linux-47b344ddff27

使用的 docker image:
https://github.com/scottyhardy/docker-wine
首先確定 docker-wine 可以跑成功

如果只打算跑一次 ysoserial.net 的話可以這樣下:

1
./docker-wine --as-root /bin/bash -c 'winetricks dotnet48;rm -rf /root/.wine;wget https://github.com/pwntester/ysoserial.net/releases/download/v1.36/ysoserial-1dba9c4416ba6e79b6b262b758fa75e2ee9008e9.zip -O /tmp/ysoserial.zip;unzip /tmp/ysoserial.zip -d /tmp/ ;winetricks dotnet48;wine /tmp/Release/ysoserial.exe [your argv]' 

因為使用到 winetricks 需要用到 root 權限,所以需要 --as-root

另外為什麼需要創一個 .wine 的環境後又 rm /root/.wine 再創一個 .wine 環境呢? (winetricks的當下就會 init wine 的環境了),因為第一次下 winetricks 他只會安裝 .net 4.0 不會安裝到 .net 4.8,可是把他刪除再跑一次安裝的話就會安裝了 (我也不知道原因,多次嘗試出來的結果)

如果想要 keep 住這個環境的話,只需要把 docker-wine 裡面有關 --rm 那邊的 code 註解掉 (add_run_arg --rm),直接用 --as-root 進去下

1
/bin/bash -c 'winetricks dotnet48;rm -rf /root/.wine;wget https://github.com/pwntester/ysose    rial.net/releases/download/v1.36/ysoserial-1dba9c4416ba6e79b6b262b758fa75e2ee9008e9.zip -O /tmp/ysoserial.zip;unzip     /tmp/ysoserial.zip -d /tmp/ ;winetricks dotnet48'

就好了,或是你可以手動 trace 看看,說不定你的環境不用砍 .wine 那麼麻煩

另外如果遇到這個問題

砍掉 .wine 再跑一次 winetricks dotnet48 應該就好了,基本上就是要安裝玩 .net 4.8 才算可以跑

之後也有打算把一些 windows 才有的 exe 工具整進去這個 docker-wine 裡面,弄一個屬於自己的大補帖,也提供給各為一個參考