はまやんはまやんはまやん

hamayanhamayan's blog

CTFのWebセキュリティにおけるその他言語まとめ(C#, .NET, GO, Java, Perl, Ruby)

この記事はCTFのWebセキュリティ Advent Calendar 202120日目の記事です。

本まとめはWebセキュリティで共通して使えますが、セキュリティコンテスト(CTF)で使うためのまとめです。
悪用しないこと。勝手に普通のサーバで試行すると犯罪です。

ASP.NET

Csharp

.NET

Go言語

Java

Thymeleaf

テンプレートエンジン。SSTIできるかも。

  • 使えそうな情報
    • Tutorial: Thymeleaf + Spring
      • Use Spring Expression Language (Spring EL) as a variable expression language, instead of OGNL. Consequently, all ${...} and *{...} expressions will be evaluated by Spring’s Expression Language engine.
      • SPELで使える攻撃が使える
  • 便利な記法 CTFtime.org / SharkyCTF / WebFugu
    • 全部の変数情報取得 html <tr th:each="var : ${#vars.getVariableNames()}"> <td th:text="${var}"></td> <td th:text="${#vars.getVariable(var)}"></td> </tr>
    • フィールドの確認 html <tr th:each="var : ${flag.class.declaredFields}"> <td th:text="${var.name}"></td> <td th:text="${var}"></td> </tr>
    • メソッドの確認 html <tr th:each="var : ${flag.class.getMethods()}"> <td th:text="${var.name}"></td> <td th:text="${var}"></td> </tr>
    • メソッド実行結果の確認 html <td th:text="${flag.getContent()}"></td>

Java EEのWAR形式

Java EEで開発されたWebアプリケーションを一つのファイルにパッケージする標準形式の一つ。 zipなので、zipにして解凍すればいい。 一回解凍してみたら、以下のような感じになっていた。 多分、META-INF, WEB-INFは固定であって、それ以外が普通のWebリソース?

  • root
    • META-INF
    • WEB-INF
    • index.html

Unsafe Java Object Deserialization

J2EE / Spring

  • セッション
    • JSESSIONIDって名前でCookie発行されてセッションIDが付与される
  • Spring Boot のデフォルトの状態では、404 Not Found 等が発生した際に Whitelabel Error Page というエラーページが表示される。

解析

  • jarファイルとかclassファイルをデコンパイルして解析してみる
  • jd-gui
    • apt-get install jd-guiでインストールしてjd-guiで起動するだけ
    • jar,classをD&Dすれば中身が見られる

テク

  • web.xmlが公開状態になっていないか
  • writeups
  • UUID.randomUUID()は暗号学的にも安全なUnique IDが得られる

Perl

Perl難読化

PerlのopenにはRCE脆弱性がある

https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a04_01.html

|lsみたいなファイルパスを入れると|以降が実行されて結果が返ってくる

Ruby