1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

アーカイバ内部のLog4jのバージョンを調べる

Posted at

StreamRelay.jar/StreamRelay.NET.exeのサポートプログラムとして、zip形式のファイル内部を操作する ZipStream.class/ZipStreamNET.exeがあるので、それの紹介


前節(Log4Shell)

2021年末に報告されたリモートコード実行の脆弱性(CVE-2021-44228)。

wikipedia


前節/方針(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"))

な感じかな


リンク


目次へ戻る

目次というか最初の一歩

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?