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

hamayanhamayan's blog

File Reader [DarkCTF]

File Reader
karma
My friend developed this website but he says user should know some extreme manipulative language to understand this web.
Flag is in /flag.txt
http://filereader.darkarmy.xyz

※ 理解はしたけど、自力で解けてないです

調査

アップロード試行してみると、Only Pdf and docx file are allowedと言われる。ほう。
適当にpdfを持ってきて投げると以下のように出てくる。

Uploaded File Info
File Name : sample.pdf
Size : 17123
Mimetype : application/pdf
Number of pages : 1

ほうほう。

HTTPレスポンスを見るとX-Powered-By: Express
よくよく見てみると、connect.sidが使われているuploadedの情報はセッションに入っているようだ。

アップロード済みなら302応答が帰ってきて、最初の画面にリダイレクトされる。
ん?いや、なんも分からんよ?

Writeup

XXE on docx

問題文にextreme manipulative languageとあるので、XXEを疑うべきであった。確かに。
Writeupを見れば、どこの何を弄ればいいかは分かったが、一応ググって思考の流れを作っておく。   pdf xxeとかdocx xxeとかでググってみる。
EXPLOITING XXE IN FILE UPLOAD FUNCTIONALITY
docxでXXEは有名みたい。
同スライドにはPDF XXEも載ってる。

この前提をもって、以下を見てみると、ページ数以外はリクエストから読み取れるものになっている。
ページ数をどこから持ってきているのかを考えるのは自然か。

Uploaded File Info
File Name : sample.pdf
Size : 17123
Mimetype : application/pdf
Number of pages : 1

docxファイルの拡張子をzipに変えて、pageで全検索してみると、意外とヒットは多くない。
1つ1つ見ていくと、app.xml<Pages>4</Pages>といったタグが見つかる。
ここに入れ込んでみよう。

先頭が<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE x [<!ENTITY xxe SYSTEM "file:///flag.txt" >]>っぽくなるようにして、<Pages>&xxe;</Pages>とする。
適当に7-zipでzipにして、拡張子をdocxにして提出。
Not available…同じようにしているはずなのに上手くいかない…