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

hamayanhamayan's blog

CTFのWebセキュリティにおけるWebサーバー/インフラまとめ(Apache, nginx, IIS, CDN/Cache, CGI, Docker/Kubernetes)

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

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

インフラ回り

Webセキュリティではインフラ回りも理解している必要がある。
「ブラウザ -> リバースプロキシ -> アプリ」みたいな構造が分かってないと解けない問題も多くある。

apache

関連パス

  • URL
  • ホストディレクト
    • /etc/apache2/conf-available/fqdn.conf ここに「ServerName ホスト名」でホスト名が記載されている
    • /etc/apache2/sites-enabled/000-default.conf 設定が書いてある

.htaccess

  • インデックスファイルがないときのファイル一覧機能は無効化しておくこと
    • Options -Indexes
  • エラー時に出るファイルを指定することも効果的
    • DirectoryIndex index.html /errmsg.html
  • アクセス制限をかけたいとき
  • バーチャルホスト
    • writeups/2020/asis_ctf/Less secure secrets at master · Red-Knights-CTF/writeups · GitHub
      • リバースプロキシとして使っているっぽく見える
      • RequestHeaderをつけると、許可するヘッダーになる
      • <if "%{REMOTE_ADDR} != '127.0.0.1'">で内部じゃなかったら…としている。以下で表示を抑制
        • AddOutputFilterByType INFLATE;SUBSTITUTE;DEFLATE text/html
        • Substitute s|<secret>(.*)</secret>|Protected|i
      • Range: bytes=785-808をすると応答する部分が限られることで、Substituteでの置き換えができなくなるようにできる

キャッシュ

  • Web Cache Poisoning キャッシュを汚染して被害者に悪意あるコンテンツを踏ませる
    • Web Cache Posoningできれば、Reflected XSS, Host Header XSS, User-Agent XSSのようなSelf XSSをStored XSSにできる
    • Practical Web Cache Poisoning | PortSwigger Research
      • X-Forwarded-Host: a."><script>alert(1)</script>をつけると、<meta property="og:image" content="https://a."><script>alert(1)</script>"/>のようにXSS
      • これでキャッシュが残っていれば、X-Forwarded-Hostはキャッシュキーに入らないので、キャッシュされたXSS応答が返る
  • 操作時に重要なこと、キャッシュキーの操作
    • Cache Key なにをキーとしてキャッシュを保存するか
      • protocol|method|host|/path?key=valueでキャッシュキーとするhttps|GET|example.com|/api/help?lang=en
      • キャッシュサーバによってはX-Original-URL: /adminのようにすることでキャッシュキーをこっちに差し替えることができる
    • キャッシュキーで使われない部分を利用して悪さをする
  • Web Cache Deception 相手にキャッシュを保存させて、それを読み込むことで情報を抜き出す
  • ESI: Edge Side Includes
    • <esi:XXX>というタグを使ってキャッシュを効率化するものだが、これでXSSが起きたりする

cgi-bin

Shellshock

Docker

Kubernetes

IIS

nginx