ksnctf: #6 login

  • ctf
問題 http://ctfq.sweetduet.info:10080/~q6/ 解法 開くとLoginページ。adminで入れとのこと。 まあSQLインジェクションだろう。 ID: admin Pass: ' OR 1=1 -- であっさり入れた。 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' AND pass='$pass'"); $login = $r && $r->fetch(); if (!

ksnctf: #5 onion

  • ctf
問題 Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSV01WbDNXa1JTV0ZKdGVGWlZNakExVmpBeFYySkVU… 解法 英数字のみなのでbase64ぽい。 デコードすると Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSWFJteFZVMjA1VjAxV2JETlhhMk0xVmpGYWMySkVU\nbGhoTVVwVVZtcEdTMlJIVmtW... あれ? でも文字数は減っている。onionという名前からして繰り返すのだろう。 繰り返すと次の文字列が手に入る。 b'begin 666 <data>\n51DQ!1U]&94QG4#-3:4%797I74$AU\n \nend\n' uuencodeなので、ファイルに書き出したあとデコードする。 ❯ ./onion.py > inner ~/Projects/CodeSite/CTF/ksnctf/05_onion ❯ uudecode inner ~/Projects/CodeSite/CTF/ksnctf/05_onion ❯ ls '<data>' __pycache__/ inner onion.py onion.txt ~/Projects/CodeSite/CTF/ksnctf/05_onion ❯ cat '<data>' FLAG_FeLgP3SiAWezWPHu スクリプト flag FLAG_FeLgP3SiAWezWPHu point 221 参考 https://ja.wikipedia.org/wiki/Uuencode http://docs.python.jp/3/library/base64.html http://docs.python.jp/3.5/library/uu.html

ksnctf: #3 crawling_chaos

  • ctf
問題 http://ksnctf.sweetduet.info/q/3/unya.html 解法 開くとformが一つだけ、最初はsqlインジェクションかと思ったけど、htmlを見るとjsスクリプトだった。 (ᒧᆞωᆞ)=(/ᆞωᆞ/),(ᒧᆞωᆞ).ᒧうー=-!!(/ᆞωᆞ/).にゃー,(〳ᆞωᆞ)=(ᒧᆞωᆞ),(〳ᆞωᆞ).〳にゃー=- -!(ᒧᆞωᆞ).ᒧうー,(ᒧᆞωᆞ).ᒧうーー=(〳ᆞωᆞ).〳にゃー- -!(ᒧᆞωᆞ).ᒧうー,(〳ᆞωᆞ).〳にゃーー=(ᒧᆞωᆞ).ᒧうーー- -(〳ᆞωᆞ).〳にゃー,(ᒧᆞωᆞ) ... 某某時的な存在が這い寄ってくるのを感じる… htmlでエラーが出ないことから、なぜかjavascriptとして動くらしい。 ❯ node chaos.js undefined:2 $(function(){$("form").submit(function(){var t=$('input[type="text"]').val();var p=Array(70,152,195,284,475,612,791,896,810,850,737,1332,1469,1120,1470,832,1785,2196,1520,1480,1449);var f=false;if(p.length==t.length){f=true;for(var i=0;i<p.length;i++)if(t.charCodeAt(i)*(i+1)!=p[i])f=false;if(f)alert("(」・ω・)」うー!(/・ω・)/にゃー!");}if(!f)alert("No");return false;});}); ^ ReferenceError: $ is not defined at eval (eval at <anonymous> (/Users/vinter/Projects/CodeSite/CTF/ksnctf/03_crawling_chaos/chaos.js:1:17299), <anonymous>:2:1) at Object.<anonymous> (/Users/vinter/Projects/CodeSite/CTF/ksnctf/03_crawling_chaos/chaos.js:1:17333) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) at Module.runMain (module.js:604:10) at run (bootstrap_node.js:394:7) at startup (bootstrap_node.js:149:9) これがflagぽい。 var p=Array(70,152,195,284,475,612,791,896,810,850,737,1332,1469,1120,1470,832,1785,2196,1520,1480,1449); decode flag FLAG_fqpZUCoqPb4izPJE point 151

ksnctf: #2 easy cipher

  • ctf
問題 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. 解法 シーザー暗号 flag FLAG_SwzgxBJSAMqwxxAU point 51 (1+50)

ksnctfことはじめ

  • ctf
ksnctf始めます。 去年一度やっていたけど最近CTF熱が高まってきたので(あとほとんど覚えていないので)もう一度ksnctfを始めようと思います。 一応以下のような方針でやっていこうと思います。 自力で解く 周辺知識は調べるけどwrite upなどは見ない。 pythonを使う 便利ツールが揃っているのに自分がpythonを書けないので。 ただし問題が他の言語で与えられていた場合などはこの限りではない。 方法を残す スクリプトをgistに上げるなり、write upを残すなりする。 解けたらwrit upを見る。 より良い方法があるもや。 Test Problem というわけで記念すべき第一のflagです。 FLAG_SRORGLnTh2Q5fTwu 現在point 1 point

Catch the SECCON2016 if You Can

TL;DR この記事はeeic Adevent Calendar 2016 その2の11日目です。 第一部: CTFについて 第二部: はじめてのバイナリ解析 第三部: SECCON2016 write up この記事は第三部です。(長くなったので分割しました。) SECCON2016 write up 一問も解けなかったのでなにも書けませ〜ん

Catch the Binary if You Can

TL;DR この記事はeeic Adevent Calendar 2016 その2の11日目です。 第一部: CTFについて 第二部: はじめてのバイナリ解析 第三部: SECCON2016 write up この記事は第二部です。(長くなったので分割しました。) はじめてのバイナリ解析 CTFの花形はバイナリ解析です。 セキュリティコンテストチャレンジブックで少し勉強したので、バイナリ解析の基礎を紹介したいと思います。 バイナリとは バイナリとは一般的に「コンピュータが扱えるように2進数で表されたデータ」です。なので画像ファイルなどもバイナリなのですが、バイナリ解析で扱うバイナリはコンピュータが実行可能なプログラムのファイルのことを指します。 表層解析と動的解析と静的解析 例えばCのプログラムをgccでコンパイルした時のa.outをそのまま渡されてなにが「分かることを豊かに述べよk」なんて言われたらどうしますか? 表層解析 まじファイルを実行する前に分かることを調べましょう。そのためにfileとstringsというコマンドを使います。 # $ file a.out a.out: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=643b4dc3720a4a5eefe53a385df75358698e2d65, not stripped fileコマンドでどのようなファイルかがわかります。 今回の場合、 ELF 32bit - 32bit Linuxの実行ファイル Intel 80386 - intel i386アーキテクチャ dynamically linked - 動的リンクを採用している not stripped - シンボル情報が残っている ということがわかります。

Catch the Flag if You Can

TL;DR この記事はeeic Adevent Calendar 2016 その2の11日目です。 これはCTF歴数ヶ月のトーシロがCTFを知らない人に対して説明をする(ことを試みた)記事です。 以下の構成となっています。 第一部: CTFについて 第二部: はじめてのバイナリ解析 第三部: SECCON2016 write up この記事は第一部です。(長くなったので分割しました。) CTFとは”Capture The Flag”の略で、隠されたフラッグと呼ばれるものを何かしらの方法で習得するゲームです。 IT技術を使った謎解き、プログラミング、ハッキングなどの言葉を聞いて興味を惹かれた人読んでみると良いかもしれません。 「ハッキングとか倫理に反する!」と思う方やウィザードの方はブラウザを閉じることをおすすめます。 また時間の無い方も踏み入れないほうがいいかもしれません… 気がつくと時間が解けていきます。 … .. . ....................................................................... :::: ##:::::'##:'########:'##::::::::'######:::'#######::'##::::'##:::: :::: ##:'##: ##: ##.....:: ##:::::::'##... ##:'##.... ##: ###::'###:::: :::: ##: ##: ##: ##::::::: ##::::::: ##:::..:: ##:::: ##: ####'####:::: :::: ##: ##: ##: ######::: ##::::::: ##::::::: ##:::: ##: ## ### ##:::: :::: ##: ##: ##: ##...:::: ##::::::: ##::::::: ##:::: ##: ##.

Catch the Flag if You Can

∧_∧ やあ (´・ω・`) / /∇y:::::::\ [ ̄ ̄] |:::⊃:|::::::| |────|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/| ∇ ∇ ∇ ∇ /./| ┴ ┴ ┴ ┴ / /.|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|/ |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | (⊆⊇) (⊆⊇) (⊆⊇) | || || .|| ./|\ /|\ /|\ ようこそ、アドベントカレンダーへ。 このテキーラはサービスだから、 まず飲んで落ち着いて欲しい。 うん、「また」なんだ。済まない。 仏の顔もって言うしね、 謝って許してもらおうとも思っていない。 でも、この記事を見たとき、君は、 きっと言葉では言い表せない 「ときめき」みたいなものを 感じてくれたと思う。殺伐とした世の中で、 そういう気持ちを忘れないで欲しい そう思って、この記事を投稿したんだ。 | じゃあ、注文を聞こうか。 明日には、明日には、書きます。 書きました

重ゲーのススメ

この記事はボドゲ紹介02 Advent Calendar 2016の5日めです。 はじめに みなさん普段どんなボドゲをしていますか? 対戦が好きな人、協力が好きな人、アブストが好きな人、トリテしかしない人などなど、様々だと思います。 そういうジャンルとは別に重ゲーと呼ばれる種類があります。見ての通り時間的に、ルール的に重いゲームです。 短時間でできるゲームと違い、あまりする機会がなく悲しいのでこの場で広めれたらなと思います。 電力会社 最初に紹介する重ゲーは「電力会社」とものです。2004年に発売された古いゲームですが、根強い人気があり今でも拡張や新板が出たりしています。 僕が持っているのは「新電力会社デラックス 完全日本語版」です。 なにが「新」で、どう「デラックス」なのが知りませんが… ゲームの目的 各プレイヤーは電力会社の経営者となり北米(もしくは欧州)に発電所を都市に立てていきます。 発電をして都市に給電するとお金がもらえ、お金を使って事業を発展させていきます。 最終的に一番多くの都市に給電出来たプレイヤーが勝者となります。 これだけ書くとよくある拡大再生産系のゲームです。 ルールの概要 (注:大体の流れが分かるように重要なところだけ説明しているので完全なルールではありません。) ステージ、ラウンド、フェーズ このゲームは3ステージからなり、各ステージは複数回のラウンドからなります。 各ラウンドは5つのフェーズがあり、各フェーズを全てのプレイヤーが順番に行います。 フェーズは以下の5つです。 順番決定 発電所オークション 資源購入 建設 管理 発電所オークション フェーズ 担当プレイヤーが上段の発電所のうち一つを選んでオークションを行います。 入札後新たに発電所の山札から一枚補充します。このとき順番は発電所の番号(価値)の順に並べ替えます。(なのでオークションでは見えている8枚のうち価値の低い4枚が入札できます) この発電所によって、発電に必要な資源の種類と量と発電したとき給電できる都市の数が違います。 資源購入 フェーズ 発電所に必要な資源を順番に購入します。このとき順番は以前の逆になります。 また、資源は発電所が消費出来る資源の2倍までしかストックできません。 資源の値段は市場によって決まります。資源が枯渇すると高くなり、余ると安くなります。 この写真の場合、石炭2、天然ガス3、石油3、ウラン1です。 建設 フェーズ 盤面の都市に発電機をお金を払って設置できます。この時以下のルールが適用されます。 自分の発電機がある都市と隣接していないといけない。 同じ都市には同じプレイヤーは2つおけない。 都市における発電機の数は上限がある。(3ないし6) 建設にかかるコストは都市に建てるコスト+電力網の接続コストです。盤面の都市と都市を繋いでいる管に書いてある数字が接続コストです。 管理 以下のことをします。 発電による収入 資源の補充 発電所の更新 発電は発電所から資源を取り除き、都市に給電します。もし給電できる都市がなければ、その電力は無駄になります。 重ゲーポイント ほぼ完全情報ゲーム 発電所の出現だけはランダムですが、プレイヤーが持つ全ての情報は公開情報です。考えれる情報があるということはそれだけ考える時間が延びるということです。 また、同じ状態というのが基本的にありません。プレイする順番によって資源の値段も建設コストもまるっきり変わってきます。