CpawCTF Writeup Level 2 後半
こんばんは。
今回はLevel 2の後半です。
今回は手間を惜しまずもう少し詳しく書きたいと思います。
他の方の記事を見た感じ1問ずつでもいいかなと思いましたがそれはLevel3からにします。
SQLiの問題についてはLevel3にあるものと同記事で解説するのでここでは省略しています。
Image!
ということでzipファイルが渡されます。
ではいつも通りfileコマンドを。
OpenDocumentはどう見てもzipファイルではなさそうですね。
調べるとワープロソフトなどのファイル形式のようです。
拡張子は.odtのようなのでそのように変更すればフラグが得られます。
Block Cipher
今度は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!
なんてうっかりさんな製作者でしょう。これは許せません。
念のためfileコマンドをしましたがちゃんとELFです。
この問題はデコンパイルの問題です。
頻出問題の基礎となるのでしっかり解きましょう。
私はデコンパイルツールはIDAとghidraを使っています。
今回はIDAで行きます。
導入の方法などについては他記事が多くあるのでそちらをどうぞ。
とりあえずデコンパイルしてみましょう。
もうすでに怪しげな文字列が真ん中に表示されています。
そうです。flagです。
Can you login?
pcapファイルの問題です。Wiresharkで読んでみましょう。
見た感じFTP通信の問題のようです。
TCPストリームを追跡してみます。
暗号化されてないので思いっきりユーザーネームとパスワードが出てます。
FTP通信で接続し、このIDとPASSで入ってみます。
IDとPASSで侵入後、とりあえずlsしたのがこれですが、特に怪しいのはありません。
なので今度はls -aで見てみます。
当たりのようです。
getコマンドでlocalにダウンロードして開けばflag取得です。
以上でLevel2は終了です。
ここまでくればCTFの基礎技術は身についてくるかと思います。
次回からは1問ずつ分けて解説します。
前回
次回