スキップしてメイン コンテンツに移動

投稿

ラベル(CTF)が付いた投稿を表示しています

ksnctf #7 Programming 解けなかった。

 ksnctfの7問目、Programmingを解こうとしたけど解けなかった話。 問題   http://ksnctf.sweetduet.info/q/7/program.cpp  問題ページにはc++のコードっぽいものが書いてありました。  空白やタブばかりでぐちゃぐちゃだったので綺麗にしてみた。(これが落とし穴...) #include <stdio.h> #include <string.h> int main(){ const char *s =" " "0123456789" " "" "" " "ABCDEFGHIJ" ; printf("%c",strlen(s)); int i = 020000000 + 001000000 + 000600000 + 000040000 + 000007000 + 000000500 + 000000020 + 000000002; printf("%s",&i); long long l = 2LL * 11LL * 229LL * 614741LL * 9576751LL + 5LL; printf("%s",&l); float f = 1.0962664770776731080774868826855754386638240000e-38f; printf("%s", &f); double d = 6.7386412564254706622868098890859398199406890000e-308; printf("%s",&d); }  これを実行してみると... FROG_This_is_wrong_...

ksnctf #6 Login を解く。

 ksnctfの6問目、"Login"を解いていきます。 問題   http://ksnctf.sweetduet.info/problem/6  問題ページには次のurlのみありました。   http://ctfq.sweetduet.info:10080/~q6/  このページにアクセスすると、  上のようなログイン画面が出てきます。  どうやら"admin"としてログインしろとのこと。  これはSQLインジェクションで解けそう。 解法  とりあえず定番の" ' OR 1=1 --"をID欄に入力して送信ボタンを押してみた。  ちなみに" ' OR 1=1 --"は1=1が常に真となり、'--'でそれ以降の文をコメント扱いにしてしまうので、SQL文全体が真となって必ずログインできるという優れもの。 Congratulations! It's too easy? Don't worry. The flag is admin's password. Hint: <?php function h($s){return htmlspecialchars($s,ENT_QUOTES,'UTF-8');} $id = isset($_POST['id']) ? $_POST['id'] : ''; $pass = isset($_POST['pass']) ? $_POST['pass'] : ''; $login = false; $err = ''; if ($id!=='') { $db = new PDO('sqlite:database.db'); $r = $db->query("SELECT * FROM user WHERE id='$id...

ksnctf #5 Onion

 ksnctfの5問目、"Onion"を解いていきます。 問題   http://ksnctf.sweetduet.info/problem/5  問題文は意味不明な文字列が並べられているだけ。  とりあえず暗号か何かを疑ってみたりしましたが、文字列には空白文字もなければ意味不明な場所で改行していたりと全く手がかりを見つけることができなかった。   一時間ほど粘ってみたが、自分の知識ではどうにかなるものではないと悟った。  ここで先人の知恵を拝借。 解法   ヒントが書かれたページ を見ると hint1:base64 hint2:fileコマンド便利だよね と書いてあった とりあえず問題文をファイルにしてfileコマンドに投げてみると $ file onion onion: ASCII text   ここで問題文はASCIIコードで表すことのできる文字のみで構成されていることが判明。  次にbase64について調べると、 7ビットで表されるASCII文字しかやり取りできない環境で、他のデータも送受信可能にする為に元データを6ビットずつに分割し、分割された値に対応するASCII文字を割り当てている。 '000000'~'111111'に対応するASCII文字(= 'A'~'Z' , 'a'~'z' , '0'~'9' , '+' , '/')と'='のみで構成される。 76文字ごとに改行が入る。  また、デコードはweb上でもコマンドでもできる模様。  base64には改行が含まれているようなので、web上で実行しました。  一回デコードするとまたbase64らしき文字列が出てくるので、デコードできなくなるまでデコードを繰り返すと、 begin 666 <data> 51DQ!1U]&94QG4#-3:4%797I74$AU end  こんなのが出てきた。  これも暗号っぽいのでgoogle先生に聞いてみると、"...

ksnctf #4 Villager A 初めての書式文字列攻撃。

 ksnctfの4問目、Villager A を解きました。 問題 https://ksnctf.sweetduet.info/problem/4  問題ページにはアドレス、ID、パスワードが書かれているのでSSHでログイン。  ログインしたら、とりあえずls。 $ ls flag.txt q4 readme.txt  readmeには大したこと書いてなかった。  flag.txtはもちろん開けない。  とりあえずq4を実行してみる。 $ ./q4 What's your name? Sugita Genpaku Hi, Sugita Genpaku Do you want the flag? はい Do you want the flag? yes Do you want the flag? نعم فعلا Do you want the flag? いいえ Do you want the flag? no I see. Good bye.  "no"と答えるまで煽られ続ける模様。  ユーザーが入力した値を出力しているあたり、この前本で読んだばかりの書式文字列攻撃を使うっぽい。  いきなりアセンブリ読むのもアレなのでstringsかけてみる。  stringsコマンドは、ファイルに含まれる文字列を出力してくれる。 strings q4 /lib/ld-linux.so.2 libstdc++.so.6 __gmon_start__ _Jv_RegisterClasses __gxx_personality_v0 libm.so.6 libgcc_s.so.1 libc.so.6 _IO_stdin_used fopen puts putchar stdin printf fgets strcmp __libc_start_main CXXABI_1.3 GLIBC_2.1 GLIBC_2.0 PTRh [^_] What's your name? Hi, Do you want the flag? I see. Good bye. flag.txt  どうにかすればfopenでflag.txtの中身を出力してくれると予想。  ここでもう一度...

ksnctf #3 Crawling Chaos解いた

 ksnctf3問目の、Crawling Chaosを解いていきます。 問題   http://ksnctf.sweetduet.info/q/3/unya.html  と書いてあるだけです。こんなの初心者にはわかる筈ありません。3分も考えずに答えを見てしまいました。  どうやら書かれているurlのページへ行きソースを見ると、怪しい文字列が書いてあるようです。 <!DOCTYPE> <html> <head> <meta charset="utf-8"> <title>Crawling Chaos</title> <style> form { text-align: center; margin-top: 4em; } input { font-size: x-large; } </style> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script> (ᒧᆞωᆞ)=(/ᆞωᆞ/),(ᒧᆞωᆞ).ᒧうー=-!!(/ᆞωᆞ/).にゃー,(〳ᆞωᆞ)=(ᒧᆞωᆞ),(〳ᆞωᆞ).〳にゃー=- -!(ᒧᆞωᆞ).ᒧうー,(ᒧᆞωᆞ).ᒧうーー=(〳ᆞωᆞ).〳にゃー- -!(ᒧᆞωᆞ).ᒧうー,(〳ᆞωᆞ).〳にゃーー=(ᒧᆞωᆞ).ᒧうーー- -(〳ᆞωᆞ).〳にゃー,(ᒧᆞωᆞ).ᒧうーー=(〳ᆞωᆞ).〳にゃーー- -!(ᒧᆞωᆞ).ᒧうー,(〳ᆞωᆞ).〳にゃーー=(ᒧᆞωᆞ).ᒧうーー- -(〳ᆞωᆞ).〳にゃー,(ᒧᆞωᆞ).ᒧうーーー=(〳ᆞωᆞ).〳にゃーー- -!(ᒧᆞωᆞ).ᒧうー,(〳ᆞωᆞ).〳にゃーーー=(ᒧᆞωᆞ).ᒧうーーー- -(〳ᆞωᆞ).〳にゃー,(ᒧᆞωᆞ).ᒧうーーー=(〳ᆞωᆞ).〳にゃーーー- -!(ᒧᆞωᆞ).ᒧうー,(〳ᆞωᆞ).〳にゃーーー=(ᒧᆞωᆞ)....

ksnctf #2 シーザー暗号を解くプログラムを作る

 CTFの練習のために、今回からksnctfの問題を解いていこうと思います。   http://ksnctf.sweetduet.info/  ksnctfの1問目はフラグをコピペするだけなので飛ばします。 問題   http://ksnctf.sweetduet.info/problem/2   EBG KVVV vf n fvzcyr yrggre fhofgvghgvba pvcure gung ercynprf n yrggre jvgu gur yrggre KVVV yrggref nsgre vg va gur nycunorg. EBG KVVV vf na rknzcyr bs gur Pnrfne pvcure, qrirybcrq va napvrag Ebzr. Synt vf SYNTFjmtkOWFNZdjkkNH. Vafreg na haqrefpber vzzrqvngryl nsgre SYNT.  問題ページには、この文字列だけ書かれています。  この暗号は、シーザー暗号と呼ばれるもので、アルファベットを同じだけずらしていくことで答えを得ることができるようです。  アルファベットを一つずつ自分でずらしていくのもアレなので、プログラムを書いてみました。C++です。 #include <iostream> #include <string> using namespace std; int main() { //暗号を入力 cout << "Code : "; string s; getline(cin, s); //フラグに必ず含まれるアルファベットを入力 cout << endl << "KeyWord : "; string key; getline(cin,key); for (int a = 0;a < 26;a++){ //一つずつずらす for (int i = 0;i < s.length();i++){ if (s[...

ページビューの合計

ラベル一覧を表示