見出し画像

CpawCTF Writeup Level 2 後半


こんばんは。
今回はLevel 2の後半です。
今回は手間を惜しまずもう少し詳しく書きたいと思います。
他の方の記事を見た感じ1問ずつでもいいかなと思いましたがそれはLevel3からにします。
SQLiの問題についてはLevel3にあるものと同記事で解説するのでここでは省略しています。

Image!


Find the flag in this zip file.

ということでzipファイルが渡されます。
ではいつも通りfileコマンドを。

OpenDocumentはどう見てもzipファイルではなさそうですね。
調べるとワープロソフトなどのファイル形式のようです。
拡張子は.odtのようなのでそのように変更すればフラグが得られます。

Block Cipher


与えられたC言語のソースコードを読み解いて復号してフラグを手にれましょう。
暗号文:cpaw{ruoYced_ehpigniriks_i_llrg_stae}

今度はc言語のソースが渡されます。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[]){
  int i;
  int j;
  int key = atoi(argv[2]);
  const char* flag = argv[1];
  printf("cpaw{");
  for(i = key - 1; i <= strlen(flag); i+=key) for(j = i; j>= i - key + 1; j--) printf("%c", flag[j]);
  printf("}");
  return 0;
}

私はc言語は触れてこなかったのですが、ひとつひとつ検索していけば解けました。
7行目で2つ目の引数にkeyとなる整数を取得していること
8行目で3つ目の引数にflagを取得していることがわかります。
そして10行目で暗号化を行っています。
多重ループで取得したflagの先頭からkey文字分ずつ反対にして繋げているようです。ここで与えられた暗号文を見ると先頭4文字を反転するとYourになることがわかるのでkeyは4だと推測できます。
コンパイルして引数に暗号化後のflagとkeyに4を与えてやればflagが取得できます。

reversing easy!


フラグを出す実行ファイルがあるのだが、プログラム(elfファイル)作成者が出力する関数を書き忘れてしまったらしい…

なんてうっかりさんな製作者でしょう。これは許せません。
念のためfileコマンドをしましたがちゃんとELFです。
この問題はデコンパイルの問題です。
頻出問題の基礎となるのでしっかり解きましょう。
私はデコンパイルツールはIDAとghidraを使っています。
今回はIDAで行きます。
導入の方法などについては他記事が多くあるのでそちらをどうぞ。
とりあえずデコンパイルしてみましょう。

もうすでに怪しげな文字列が真ん中に表示されています。
そうです。flagです。

Can you login?


古くから存在するネットワークプロトコルを使った通信では、セキュリティを意識していなかったこともあり、様々な情報が暗号化されていないことが多い。そのため、パケットキャプチャをすることでその情報が簡単に見られてしまう可能性がある。
次のパケットを読んで、FLAGを探せ!

pcapファイルの問題です。Wiresharkで読んでみましょう。

見た感じFTP通信の問題のようです。
TCPストリームを追跡してみます。

暗号化されてないので思いっきりユーザーネームとパスワードが出てます。
FTP通信で接続し、このIDとPASSで入ってみます。
IDとPASSで侵入後、とりあえずlsしたのがこれですが、特に怪しいのはありません。

なので今度はls -aで見てみます。

当たりのようです。
getコマンドでlocalにダウンロードして開けばflag取得です。


以上でLevel2は終了です。
ここまでくればCTFの基礎技術は身についてくるかと思います。
次回からは1問ずつ分けて解説します。

前回

次回

この記事が気に入ったらサポートをしてみませんか?