writeup① (nc biginner)
アラフォーのおっさんがITに興味をもち、CTFという物をしり、
そして、WaniCTF 2021 autumn? winter? に参加してみました。
得点は2000点台 順位は70番台後半でした。難しかったけど、意外と解けて楽しかったですね。
Writeupを書くまでがCTFらしいので、早速writeupを何回かに分けて書こうかと思います。いっぺんに書くのは無理があるので、ひとつづつ書きます。
CTFのざっくりとしたルールは以下の通り、
ルール
個人参加形式です。1 人 1 アカウントとなります。
以下の 6 つのカテゴリで出題されます。
- Crypto
- Forensics
- Misc
- Pwn
- Reversing
- Web
それぞれの問題に隠されたフラグを見つけ出してスコアサーバーに提出することで点数を獲得できます。
フラグの形式は各問題で指定がない限りFLAG{[0-9a-zA-Z_-.$@!?]+}です。
解けた順につづります。
早速 Pwn のnc (netcat ネットキャット)コマンドを使う問題のようです。
早速普通のパソコン(windows)しか触ってない私からすると強敵だ。
LinuxやUnix系のパソコンをインストールしてnc コマンドをうつとリプライが返ってくる。ヒントの通りlsコマンドをうつとflag.txtが出てくるので、これを開くとFLAG{}をゲットできる仕組みのようでした。
いやーよく考えますね。こんなにでかでかとヒントがあるのに、ヒントに気が付かなった哀れな私。
PowerAppsで電話番号からユーザ情報を引っ張るをやってみた。
PoweAppsでユーザ情報を引っ張れるらしいので、電話番号から人の情報を引っ張れる機能を作成してみました。素人が作ってますので、完全ではないので、この記事を見たいい人がもっといい方法を編み出してくれると嬉しいです。
なぜ完全じゃないか。
Office365ユーザー.SearchUser()というものがあるのですが、これが持ってこれるユーザ数は最大で999名と決まっておるようなのです。
ためしに、ギャラリーのItemに以下を追記してみます。
Search( ( Office365ユーザー.SearchUser() ),TextInput1_2.Text,"mobilePhone" )
上記は、TextInput1_2.Textの値とOffice365ユーザーの中から"mobilePhone"と同じ奴を引っ張ってきてねという意味になります。部分一致(0120ーxxxx-xxxxなら12でも引っ張ってくる。)です。
これをいったん限界(999件)までデータを引っ張ってくるようにします。
{top:999}といれると999件引っ張ってくるようです。
Search( ( Office365ユーザー.SearchUser( {top:999} ) ),TextInput1_2.Text,"mobilePhone" )
なぜOffice365ユーザー.SearchUserV2()を使わないのか。
Search( Office365ユーザー.SearchUserV2().value,TextInput1_2.Text,"mobilePhone" )
ある程度勉強するとユーザ情報を引っ張るときに、電話番号検索の場合はSearchUserV2を使う方がいいのでは?と思われるかもしれませんが。
これはある意味正しいですが、これにも999件の壁が存在するのです。
正確に言うと、SearchUserV2()というのは、Office365ユーザー(つまりazureだと思う)のなかの最初の999件を検索する事しかできません。
Office365ユーザー(つまりazureだと思う)が999人以上いた場合(うちの場合)は、999人目以降は絶対引っ掛かりません。
SearchUser()の方は、Office365ユーザー(つまりazureだと思う)を一通りなめて、条件に合致した人を最大で999件まで引っ張ってくれるようです。
個人的にこの違いは大きいです。
他のサイトでは999件以降を検索する方法がないので自分なりに以下の様に考えました。
この違いを利用して、SearchUser()で999件のユーザをいったんPowerAppsで呼び出して、その中から再度電話番号で検索するという荒業で約2万名からの電話番号を検索できるようにしました。
約26個(アルファベットa~zにマッチするユーザを999件)のギャラリーを作り、
Itemに以下を突っ込む。
Search ( ( Office365ユーザー.SearchUser(){searchTerm:Trim("a"),top:999} ) ) ,TextInput1_2.Text,"mobilePhone" )
→ユーザ名に”a”がある人を抽出するこれをa~zまで作る。
最後に検索結果表示用のギャラリーをつくり、Itemに以下をいれる。
If(!IsEmpty(Gallery_a.AllItems),Gallery_a.AllItems,!IsEmpty(Gallery_b.AllItems),・・・・・,!IsEmpty(Gallery_z.AllItems),Gallery_z.AllItems)
※すべてが空かどうかを確認して値があればそれを取得する形です。
突っ込みどころのおおい仕組みですが、
複数検知しても電話番号からユーザを知りたいだけなので、これで十分かなと思います。
PowerAppsのボタンを押したら、PowerAutomateでOutolookの予定表に書き込むというのをやってみた
PowerAppsのボタンを押したらそれをトリガーにPowerAutomateが起動。
PowerAppsで選択した日付を取得し、Outolookの予定表に書き込むというのをやってみた。
仕様はこれと同じ、
仕様:
①ビューで日付を選択する(デフォルトは本日[Today()])
②ボタンを押す
③①で選択した日付+9:00 - 18:00を 取得し、Outlookの予定表として登録する。
PowerAutomateの作成。フローの名前は適当(outlookwrite)に。
多分英語の方がいいと思う。日本語は文字化けの影響とかあって必ずいつかどこかで何かあって困るから。
PowerAppsをトリガーに変数を取得(初期化)して
イベントを作成(V4)に渡すだけ。
PowerAppsでフローを登録する。
アクション→Power Automate
作ったフローを選択すると追加できる。
ボタンを作成しonselectに以下を追記
outlookwrite.Run("1",Label21,Label21_1)
----------
Label21,21_1は日付を以下の様に編集したもの。
こうすることで、フローの変数に値が渡されるようです。
Label21.Text:datetime1
Concatenate(Text(DateValue(DataCardValue2,"ja-jp"),"yyyy-mm-dd"),"T09:00:00")
Label21_1.Text:datetime2
Concatenate(Text(DateValue(DataCardValue2,"ja-jp"),"yyyy-mm-dd"),"T18:00:00")
―――――
この方法は使えるのが自分だけで、例えば同僚がボタンを押しても権限がないみたいなエラーが出てきます。これを解決する方法はわかりませんでした。
なので、Power Automateを使わない方法(冒頭のリンク)の方がいいなと思いました。
PowerAppsでボタンを押したらOutolookの予定表に書き込む
PowerAPPSでボタンを押したらOutlookに予定を書き込むというのをやってみた。
のでつまずいた所を備忘のためまとめる。
仕様:
①ビューで日付を選択する(デフォルトは本日[Today()])
②ボタンを押す
③①で選択した日付+9:00 - 18:00を 取得し、Outlookの予定表として登録する。
これだけ、
まず①
選択できる日付のビューはPowerAppsの機能(デフォルトページ)で作成できる。
新しい画面 → カレンダーですね。
②,③
ボタンを作って onselect を編集以下を追記する。
ーーーーー
Office365Outlook.V2CalendarPostItem(LookUp(Office365Outlook.CalendarGetTables().value, DisplayName = "予定表", Name),"計画的有給日",Label21,Label21_1);
Notify("outlookにも計画的有給日(9:00-18:00)と登録しました。", Success);
ーーーーー
ーーーーーーー
Label21,Label21_1は日付を右の様にカレンダーの日付に時刻を追記し成型したものです。ここはあまり重要じゃないですね。
Label21.Text:
Concatenate(Text(DateValue(DataCardValue2,"ja-jp"),"yyyy-mm-dd"),"T09:00:00")
Label21_1.Text:
Concatenate(Text(DateValue(DataCardValue2,"ja-jp"),"yyyy-mm-dd"),"T18:00:00")
ーーーーーーーー
「LookUp(Office365Outlook.CalendarGetTables().value, DisplayName = "予定表", Name」は
Outlookの予定表に複数のカレンダーが入っている場合に一つに固定するために指定してます。カレンダーの名前が予定表でない場合は別の名前を入れる。デフォルトは「予定表」なんじゃないかと思います。
ーーーーーーーー
大切なのは、アウトプットだ
大切なのはインプットよりアウトプットですよ。
って事なので、今日から少しずつ初めていこうかと思う。少しずつ使い方を覚えていこう