StreamRelay.jar/StreamRelay.NET.exeのサポートプログラムとして、zip形式のファイル内部を操作する ZipStream.class/ZipStreamNET.exeがあるので、それの紹介
前節(Log4Shell)
2021年末に報告されたリモートコード実行の脆弱性(CVE-2021-44228)。
前節/方針(jar/warはzip形式)
javaのプログラムであるclassファイルは、1ファイル=1クラスという原則(例外はあるかもしれないけど)があるため、基本的にJavaのアプリケーション・プログラムではファイルが複数のたくさんのファイル群に分かれてしまうという性格がある。
そこで、それらのクラスファイルをまとめる方法として、jar(JavaARchive)とかwar(WebapplicationARchive)とかが出てきたわけであるが、jarもwarも、Javaのアーカイバは基本的にzipファイルだったりする。
実際に、拡張子.jarを.zipに書き換えると、WindowsのエクスプローラーのZipファイル拡張で、jarファイル(zipファイル)の中身が見えたりする。
ということで、Zipの中身が見えるツールで、スキャンすれば、Javaの様々なアーカイブの中に潜んでいるLog4jのバージョンのリストを作ることができるだろう。
まずは、ファイル一覧
Windowsの場合は、
```bat`
DIR c:\ /s /b
で、Cドライブ直下のファイル一覧が生成できる。
```bat`
FOR /F "usebackq" %I IN (`DIR c:\ /s /b`) DO @ECHO %I
でもよいけど。
まずは、ファイル一覧(複数ドライブの場合)
ドライブが C,D とあるとすれば、
```bat`
FOR %I IN (C D) DO (DIR %I:\ /s /b >> c:\file.lst)
とか
```bat`
FOR %J IN (C D) DO (FOR /F "usebackq" %I in (`DIR %J:\ /s /b`) DO @ECHO %I >> c:\file.lst)
で、C,Dドライブのファイル全てが、C:\file.lstに出力される。
次は、ファイル一覧から jar/warを抜き出す
FINDコマンドで行けるでしょう。
だけど、OR ができないので、
```bat`
FOR %I IN (jar war) DO (TYPE c:\file.lst | FIND ".%I" >> c:\file.arllst)
のように、FORコマンドで繰り返し処理が必要かもしれない
で、c:\file.arlstに、jarとwarの一覧が出力される。
FINDSTR.exeを使えば、FORコマンドは不要かもしれない
```bat`
TYPE c:\file.lst | FINDSTR /R "\.[jw]ar" >> c:\file.arllst
こんな感じ
最後にZipStream.class (1)
ファイル一覧を「list」モードに通して、Log4jのファイル名を見つけるだけ
```bat`
FOR /F "tokens=*" %I IN ('c:\file.arlst') DO @(java.exe ZipStream list "%I" | FIND "log4j-X-X")
でよいはず
---
### 最後にZipStreamNET.exe (2)
ファイル一覧を「list」モードに通して、Log4jのファイル名を見つけるだけ
```bat`
FOR /F "tokens=*" %I IN ('c:\file.arlst') DO @(ZipStreamNET.exe list "%I" | FIND "log4j-X-X")
でよいはず
蛇足:一気通貫
Cドライブだけで一気通貫
```bat FOR %J IN (jar war) DO (FOR /F "tokens=* usebackq" %I IN (
DIR c:\ /s /b^|FIND ".%J"`) DO @(java.exe ZipStream list "%I" | FIND "log4j-X-X"))
とか
```bat`
FOR %J IN (jar war) DO (FOR /F "tokens=* usebackq" %I IN (`DIR c:\ /s /b^|FIND ".%J"`) DO @(ZipStreamNET.exe list "%I" | FIND "log4j-X-X"))
な感じかな
リンク
- アーカイバコマンドの代替としての StreamRelay.NET.exe のサポートプログラム
- アーカイバコマンドの代替としての StreamRelay.jar のサポートプログラム
- find.exe の代替としての find.net.exe(find.net2.exe/find.net4.exe)