TDU CTF 2014 Satellite in ConoHaに参加してきました。
今日は、TDU CTFに参加してきました。
ちょっと所要で、関東の方に来る予定があったため、うまいこと時間が合い参加できるようになったため参加しました。
前回ctf4bに参加して、楽しかったので、参加させていただきました。
で!今回は初心者がメイン!ということで、ある程度とけるかなぁー?wktkと思って参加したのですが、真の初心者にとっては、本当に難しくて大変でした。
とりあえず、ミニクイズの2問は解けたのですが、ほかで解けたのがSQLiの最初の問題とWireSharkを用いて、パケットを解析するものでした。
他は解けてないと思います。
問題を解いていて思ったのが、バイナリの問題で、ファイルの種類を判定するコマンドを持ってきたPCに入れていなかったということがきつくて、何も解けずにいました。
IDE demoも使い方忘れていたりと、まだまだだなぁと感じました。
解けなかったのですが、一番楽しいというかこのやろ!!って思った問題が、「起きてますか?」という問題で、パケットの内容をのんびり1つずつ見ていて、いつかflagがあるのかと思ってたら、そんなわけないでしょうというコメントがあったり、途中でyoutubeのURLで修造が出てきたりと遊び心が見えました。(笑)
まぁ最終的に270点しか取れませんでしたけど、周りがすごかったので、そういう人がいるということを実感することが出来てよかったです。
またこういう機会があれば参加してみたいです。
次は、予習して、ツールをある程度使えるようになってから頑張りたいと思います^-^v
Laravel4でのDataBaseの操作(INSERT,SELECT)とrouteの違う書き方
今回は、index.phpを違う方法で表示させました。
前回は、以下のように表示させましたが、
Route::get('/', function(){
return View::make('main.index');
});
今回は、このような感じです。
Route::get('/', 'HomeController@showWelcome');
意味としては、ルートは、HomeController.phpのshowWelcome関数を呼び出すことでindex.phpを表示させています。
---------------------------HomeController.php---------------------------------
class HomeController extends BaseController {
function showWelcome(){
return View::make('main.index');
}
}
--------------------------------------------------------------------------------------
HomeController.phpは、/app/controllersに配置します。
次に、DB接続ですが、/app/config/database.phpで設定します。
ここでは、MySQLのところだけを表示させています。
-------------------------database.php---------------------------------
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'hoge',
'username' => '',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
---------------------------------------------------------------------------
ここに、databaseには、DB名など。。。。まぁみたら分かりますよね。
こんな感じに、接続の設定は出来たらしいです。
次に、INSERTとSELECTで表示ですが、その関数をまとめた/app/controllers/PostController.phpを下に示します。
--------------------------------------PostController.php------------------------------------------
class PostController extends BaseController{
function store(){
DB::table('hoge')->insert([
'subject'=>Input::get('subject'),
'grade'=>Input::get('grade'),
'category'=>Input::get('category'),
'title'=>Input::get('title'),
'content'=>Input::get('content')
]);
return Redirect::to('/');
}
function index(){
$posts = DB::table('hoge')->get();
return View::make('main.index')->with('data',$posts);
}
}
-------------------------------------------------------------------------------------------------------
insertがstore関数に当たり、selectに当たるのがindex関数です。
insertの書き方は、insert([//ここには配列]);
'カラム名'=>Input::get('htmlでのname属性')
って感じです。
insertした後は、ルートディレクトリに戻りたいので、リダイレクトでルートに飛ばします。
index関数では、DB::table('DBでのテーブルの名前')->get(); でテーブルのデータを貰って、
return View::make('main.index')->with('data',$posts);
でmainフォルダのindex.phpファイルに、dataという変数で値$postsを渡すという意味になります。
そんな感じに、index.phpでは、$dataには、SQLのクエリの結果が入っています。
最後にroute.phpに
// 実際にDBにデータを入れる
Route::post('/', 'PostController@store');
// すべてのPostを表示する
Route::get('/', 'PostController@index');
と書くと、ルートで出力できると思います。
index.phpで変数dataをどのようにするかというと、
<?php foreach($data as $post){ ?>
<?php echo $post->subject." , " ?>
<?php echo $post->grade." , " ?>
<?php echo $post->category." , " ?>
<?php echo $post->title." , " ?>
<?php echo $post->content ?>
<?php } ?>
という感じで出力しました。
Laravel4の導入&route.phpについて
http://dim5.net/laravel/windows-install.html
とりあえずこのサイトを見ながらやりました。
バージョンを指定して展開を行わないとLaravel5に勝手になってしまうので、Laravel4がいい人は、バージョン指定をして
composer create-project laravel/laravel=4.2.* laravel --prefer-dist
のようにしなければならないみたいです。(4.2のところがバージョンかな?)
そして、jsやcss,imgなどのファイルは、laravel/publicフォルダに入れ、
phpファイルは、laravel/app/views/mainの中に入れました。
laravel/app/routes.phpにルートの設定があるのですが、そこでは、
Route::get('/', function()
{
return View::make('main.index');
});
こんな感じに書きます。
Route::get('/',funvtion() の '/' はルートディレクトリで
return View::make('main.index'); はmainというフォルダの中にあるindex.phpを指し
今回VirtualHostでいろいろいじってたので、http://laravel.local でアクセスできます(index.phpの内容が表示される)
先ほどの
Route::get('/', function()
{
return View::make('main.index');
});
の後に、
Route::get('/hoge', function()
{
return View::make('main.test');
});
を追加すると、'/hoge'というパス、すなわち http://laravel.local/hoge でmainフォルダにあるtest.phpにアクセスできるという感じです。
ここで、index.phpとかで重要なのが、JavaScriptファイルなどを読み込んだり、他のphpファイルにhrefで飛ばす際に絶対パスで指定するのが重要らしいです。
<script type="text/javascript" src="<?php echo url('/');?>/js/custom.js"></script>
のように、<?php echo url('/');?>などを用いてルートのパスを付け加えるみたいです。
url('/')の中身は、Route::get('/',function())の'/'に当たります。
まぁそんな感じで、HTMLでView作ってたところをLaravel4で実装出来ました。これからcontroler,modelの作成です。
CTF for Beginner in Hiroshima
今日は、CTF for Beginner(以下:ctf4b)が広島でありました。
ctf自体は、今回ctf4bすることを知ってから、ctfについて知りました。
ksnctfをすこし頑張ってみたのですが、1問も解けませんでした^;
で今回参加して「バイナリ」、「パケット」、「Web系」についての講義を受けました。
- バイナリ
バイナリについては、fileコマンドで、jpeg,png,docxなどのどのデータなのかを判断して、どうのこうのするということを学びました。
- パケット
パケットでは、WireSharkというパケットを見るソフトを用いてFilterや、HTTPで取り扱っているファイルの抽出、統計を調べたりするということを学びました。
- Web系
ここでは、XSSとSQL injectionについてで、主に攻撃方法を説明してくださいました。XSSでは、辞書登録によく使うスクリプトを登録していたりと面白かったですね。SQL injectionでは、カラム数の特定や、UNION SELECTなどを紹介していました。とりあえず、エラーから予測を付けていくということがとても難しそうでした。
- 最後には、CTFを実際に
最後は実際にCTFを行ったのですが、100,200,300,400点問題があり、100点問題は講義資料を見れば解ける問題でした。
結構頭を久しぶりに使って考えてたんですが、楽しく出来たと思います。
やってる最中に作業妨害を運営がやってたんですが、関西のCM(広島の人分からんだろとか思ってたり)や中村屋のネタの動画など思わず笑ったりしながらしてました(笑)
結果としては、700点で14位/43人?でした。
終わった後に3問答えが分かって、なんだかなぁ・・・と後悔がw
でもツールとかを上手いこと使えるようになったら、もうちょいうまいこと行けるのかもしれないと思いました。あと予測を上手いことすることですかね・・・・
今度CTFがあればまた参加したいと思いました。
textareaで取得した改行を含むデータ(php側)をJavaScriptでそのデータを扱う。
textareaで取得したphpのデータをJavaScriptで取得しようと思ったら改行されてしまいうまいこといかない!
やりたいことは、JavaScriptで改行付きデータを表示させるって感じです。
ということで、今回、いろいろと調べてみると、
textareaのデータが以下のようである場合、
-------------------------データ---------------------------
test
-------------------------------------------------------------
改行が邪魔をして、htmlのソースを見ると、JSには
--------------------------ソース--------------------------
var text = 'test
hoge';
-------------------------------------------------------------
となっていて、Errorとなる。
これを解消するために、まずphp側で、改行(\n)を<br>に置き換えてあげる。
textareのデータがphpの変数dataに入っているとすると、
$data = str_replace('\n','<br>',$data);
str_replace関数を使用することで、置き換えることが出来る。
これで、普通にソース見るだけだと改行は入ってない。
しかし、F12キーでソースを見ると、なぜかまだ改行が反映されており、以下のようになっている。
---------------------------ソース(F12キーでの)---------------------------
var text = 'test
<br>hoge';
---------------------------------------------------------------------------------
ここで、json_encode関数を使うことで、解決することが出来た。
var text = <?php echo json_encode(str_replace("\n","<br>",$post->content)) ?>;
このような感じである。
本当は ' か " で<?php ?>を囲むのだが、str_replaceで勝手に " で囲んでくれるので、外を " でくくるとダメと言われるので注意。
こんな感じで、json_encode関数を使うことで、F12キーでソースみても改行は入らずうまいこと行けた。
参照: