ひとこと

― 今日のひとこと ―
気付けば前回更新してから2年以上経ってた
(2023.10.25)

2013年8月17日土曜日

Oracle PL/SQL開発 No.3 -SQL Developerによるデバッグ-

現場ではSQL DeveloperとA5:SQL Mk-2を使って製造と単体試験を行っています。

SQL Developerでデバッグする方法をメモ。
ちなみに今回はプロシージャをステップ実行しています。


1.ユーザにデバッグ権限を付与する。
プロシージャのデバッグに必要な権限は以下の2つ。

・Debug Connect Session
・Debug Any Procedure

  GRANT DEBUG CONNECT SESSION ,DEBUG ANY PROCEDURE TO <ユーザ名>;




2.デバッグしたいプロシージャを、デバッグ用にコンパイルする。
「接続」のツリーからプロシージャ名を右クリックし、コンテキストメニューから「デバッグ用にコンパイル」を選択する。




3.デバッグ画面に移る
プロシージャ名をクリックすると、微妙にコードが整形されたデバッグ画面に遷移する。




4.ブレークポイントを設定し、デバッグを開始する。
ブレークポイントを設定したい行の行番号をクリックするか、その行でF5キーを押してブレークポイントを設定する。
ブレークポイントを解除する時も同様。
※処理が行われない行(コメント行など)にブレークポイントを設定しても意味がありません

その後、画面上方のデバッグボタンをクリックする。

赤い丸印がブレークポイント。てんとう虫がデバッグボタン。



5.引数がある場合は入力する。
デバッグボタンを押すとダイアログが表示される。
そのダイアログ中のコード部分に、引数の値を入力できる。
入力後、「OK」ボタンをクリックする。






6.ステップ実行する。
F8キーを1回押すと、処理が1行実行される。

ここで変数の値を監視することもできる。
監視したい変数をコード中で選択し、右クリックしてコンテキストメニューの「監視」をクリックする。

「監視」ツリーに選択した変数の現在の値が表示される。


監視機能はすごく便利だけど、カーソル属性は監視できない様子




こんなところかな
暇があったらいつかユニットテストの方法も書いておこう
レンジが僕を呼んでいる。炒飯食べてきます。

2013年7月10日水曜日

情報処理技術者試験について

情報処理技術者試験。

学生だった2011年秋から、新人SEとして忙しく憂鬱に過ごしている今春まで4回受験。



2011年秋 基本情報技術者 合格
2012年春 応用情報技術者 合格
2012年秋 情報セキュリティスペシャリスト 合格
2013年春 データベーススペシャリスト 合格

そんな僕が、IT業界での情報処理技術者試験の評価を軽くメモしておく。



ITパスポート
専門知識としては低レベルすぎてIT業界ではまったく評価されない。
新人ならまだしも、普通は受験するのも憚られるレベル。

難易度 :低
就活評価:低
社内評価:低


基本情報技術者
情報系の学生なら持ってて欲しい。
2年かけても合格できない学生はITの適性がかなり低い。
就活ではそこそこアピールできるが、
「基本的な知識はあるんだな」「そこそこ勉強したんだな」と思われる程度。
現場では持ってても特に評価にはならない。

難易度 :低
就活評価:中
社内評価:低


応用情報技術者
情報系の学生でもこれを持っている人は少ない。
就活では良いアピールになる。「真面目に勉強してきたんだな」と思われる。
地頭が悪いか不真面目だと合格できない。そこそこ難関。

難易度 :中
就活評価:高
社内評価:中


スペシャリスト
情報セキュリティ:「四天王最弱」と言われる事もあるが問われる内容はかなり高度。開発職では非実用的。
ネットワーク:最難関の一角。合格には膨大な専門知識が必要。しかしその分かなり実用的らしい。
データベース:最難関の一角。必要な知識はネットワークほど多くないが深い理解とセンスが必要。かなり実用的。
エンベデッド:異色。組込み系に縁がないと学習にとんでもなく時間がかかるらしい。持ってる人を見た事がない

各分野とも国内最難関。
ひとつでも持っていると普通の学生の間では崇められる。
新人で2つ持ってると先輩が近寄ってこなくなる。
現場では「その分野は詳しいんだな」って感じ。
しかし中堅以上は資格より実務経験優先。

難易度 :高
就活評価:高
社内評価:高


論文系は知りません。




今ちょうどデータベース関係の案件に携わっているんだけれども
データベーススペシャリストを取って良かったと心底思っています。

現場ではテーブル数100弱、属性数1000以上のデータベースを扱ってるからね。。
難解なER図をすらすら読めるのはかなり楽。
それなりにSQL知ってるから効率的なクエリを作るのに時間がかからない。
業務知識を持ってるのも大きい。

応用情報技術者もなかなかの難関資格ではあるけど、実務ではあまり通用しないな。
スペシャリスト試験と比べると各分野の内容もかなり低レベルに感じる。
(H23特別の応用DB,SCを解いてみたら計15分程度で両方満点とれた・・・)


というわけで、技術者を目指すなら早いうちにスペシャリストを取りましょう。


追記:情報処理技術者試験について No.2

2013年6月1日土曜日

Oracle PL/SQL開発 No.2-指定したテーブルの主キーを表示-

普段は社用PCのローカルにインストールしたOracle DBでプログラムを書いていて、
テストテーブルや変更履歴を自動保存するトリガなんかを色々と作って使っている。

面倒なので自宅PCのOracle DBではデフォルトのサンプルを使ってなんやかんやしているわけだが
サンプルのテーブルは僕が作ったわけではないのでテーブル構造がわからない。

型とNot Null制約の有無くらいならdescribeで分かるけどね・・・
主キーが知りたいんだよ!っていう場合が多々ある。

主キーを判別する方法はいくつかあるようだが
user_cons_columnsテーブルを使ってユーザが指定したテーブルの主キーを列挙するPL/SQLプログラムを作ってみた。


declare
  -- レコード型コレクション(結合配列)変数
  type column_data is table of user_cons_columns%rowtype index by pls_integer;
  col column_data;
  -- カーソル変数
  type refcs is ref cursor;
  cs refcs;
  -- ループカウンタ
  lc number default 1;
begin
  -- カーソルにSQL文を設定してオープン
  open cs for
   'select * from user_cons_columns
    where constraint_name = (
      select constraint_name from user_constraints
      where table_name = :table_name_input
      and constraint_type = ''P''
    )' using upper('&table_name_input');  -- ユーザ入力値を大文字に変換してバインド

    -- Fetchループ
    loop
      fetch cs into col(lc);
        exit when cs%notfound;
        -- 所有者と対象テーブル名は一度だけ出力
        if 1 = cs%rowcount then
          dbms_output.put_line('所有者:'||col(lc).owner||' / '||
                               'テーブル:'||col(lc).table_name);
        end if;
        dbms_output.put_line('主キー:'||col(lc).column_name);
        lc := lc + 1;
    end loop;
  
    -- 結果セットが0行だった場合はエラーメッセージを表示する
    if 0 = cs%rowcount then   -- !カーソルをcloseした後はカーソル属性を使用できない!
      raise_application_error(
        -20999,
        '指定した表またはビューが存在しないか、データが空です。'
      );
    else
      dbms_output.put_line(CHR(13)||CHR(10)||'正常に処理が終了しました。');
    end if;
  close cs;
exception
  -- テーブルに主キーが無い場合はエラーメッセージを出力
  when no_data_found then
    dbms_output.put_line('主キーがありません。');
  -- その他のエラーが発生した場合は対応するエラーメッセージを出力
  when others then
    dbms_output.put_line(sqlerrm);
end;
/


実行すると入力要求が出る


主キーを知りたいテーブルの名前を入力する。
たとえばサンプルのEMP表だと結果はこうなる。

EMPNO列が主キーだということがわかる。


複合主キーのテーブルを作ってみた。

このDOUBLE_PRIME表の主キーは

COMP_ID列とEMP_ID列。複合主キーにも対応していることがわかる。



大したこと無いプログラムだけど、作りたい物が作れた時の達成感は味わえた。






データがinsertされてない表には使えないのはご愛嬌!
(もう疲れ果てました)

Oracle PL/SQL開発 No.1-SQL Developerインストール-

こうして投稿するのは4ヶ月ぶりくらいか
2~4月はDBスペシャリストの勉強と社内研修、4~5月は社内研修とPL/SQL研修で死ぬほど忙しかった。

PL/SQL研修といっても「現場出る前にこれやっとけ」って上長から言われて
『プロとしてのOracle PL/SQL入門』をやってただけなんだけどね(僕だけしかも社内研修と並行してたった3週間で)
昼休みは昼食を摂る暇もなくすべて勉強に費やし、毎日終業後は定時で帰る同僚たちを背に居残り。
土日も課題が出るからストレスたまりまくり。合間にはネットワークスペシャリストの勉強もしてるわけで
他の新人と比べて学習の量も難度も高すぎやしないか・・・特に平日なんか気の休まる時がまるで無いんだが。。
今日もバルク処理やら何やらのプログラム作らないといけないんだよ月曜提出だよ



まぁ愚痴はこの辺にして、SQL版Eclipseのような開発環境SQL Developerのインストール方法をメモ。
※事前にJavaとOracle SQL環境の用意が必要です。

1.ここからファイルをダウンロードする



2.ダウンロードしたファイルを解凍し、『sqldeveloper.exe』を起動

初回起動時はjava.exeのパスを尋ねられるので入力する。
Javaをデフォルトの位置にインストールしたならProgram Files内にJavaフォルダがあるはずなので、
その中にあるjdkのbinフォルダにjava.exeがあります


3.画面左側の「接続」を右クリックし、「接続の作成」をクリックする



4.Oracleデータベースへの接続情報を登録する

接続情報を入力したら、「テスト」ボタンをクリックして接続確認をする。
正しくDBに接続できたらステータス欄に「成功」と表示される。



ここまでやれば開発できる状態になる。
sqlスクリプトはメニューの「ファイル」->「新規」から作成する。



Terapadとかメモ帳で作ったsqlファイルって、SQL*Plusで実行するとコメント内外問わず日本語が文字化けして
プログラムによってはちゃんと動かないんよね。
その点SQL Developerで作ったsqlファイルはしっかり動くからいいよね
入力補完機能もあるしF5かF9押せば実行できるし開発作業も楽



ちなみに、DBMS_OUTPUTの出力内容を確認する方法は以下の通りだ

1.メニューの「表示」->「DBMS出力」をクリック



2.緑色十字マークの「接続のDBMS_OUTPUTを有効化」ボタンをクリック


これだけ。


複数の上司から聞いた話では、JavaとPL/SQLとShellプログラミングができるとかなり重宝されるとのこと。
特にPL/SQLは若い人はやりたがらないから人材が全然足りないんだと。
だから早いうちにPL/SQLを覚えておくと今後大きな武器になるらしい





関係ないけど、さっき京急蒲田駅の6番ホームでリーアム・ニーソンに激似の日本人男性を見かけた。

2013年2月3日日曜日

Amazon Web Serviceで仮想サーバ構築 No.9 -MySQLインストール-

後々使う可能性が高いので、AWS-EC2で作成した仮想サーバにMySQLをインストールしておく。




1.No.2にメモした方法でインスタンスに接続する。


2.MySQLをインストールする。
$ sudo apt-get install mysql-server
↓の画面でrootアカウントのパスワードを設定



3.デフォルトだと日本語が文字化けするので、文字コードを変更する。
# /etc/mysql/conf.d に.confファイルを作成する。ファイル名は任意(ここではcharset.cnf)
$ sudo nano /etc/mysql/conf.d/charset.cnf

# charset.cnfに以下の内容を記述

[client]
default-character-set=utf8

[mysqld]
character_set_server=utf8
skip-character-set-client-handshake



4.MySQLを再起動
sudo /etc/init.d/mysqld restart



これでおしまい。確認する時は以下のコマンドを実行する。
# MySQLにログイン
$ mysql -u root -p
Enter the password: パスワード入力

# MySQLの設定を確認
$ status

文字コードが正しく変更されていれば↓のようにutf-8が並ぶ!





ついでにinsertとselectだけできるユーザをひとつ作成しておく。
--grant <与える権限> on *.* to <ユーザ名> identified by '<パスワード>' [with grant option];
grant insert,select on *.* to user identified by 'user';

2013年2月2日土曜日

Amazon Web Serviceで仮想サーバ構築 No.8 -TomcatでBASIC認証-

Tomcatサーバのサーブレットプログラムに対するアクセスにBASIC認証を適応する方法。

プログラムの利用者を限定したい場合、No.7で利用可能になったHTTPS通信と併用する事でより安全に通信を行えるようになる。
っていうかBASIC認証で使用する秘密情報は素でネットワークを流れるから暗号通信と併用しないと危険

今回はデフォルトで用意されている「UserDatabaseRealm」を利用する。




1.No.2にメモした方法でインスタンスに接続する。


2.tomcatのtomcat-users.xmlを編集する。
roleに関する部分のコメントを解除し、必要に応じてロールやユーザを追加する。

ここを


こうする


今回はTomcatにアクセスを許可するユーザには「tomcat」というroleを割り当てる。


3.サーブレットのweb.xmlを編集する。

web-appタグにsecurity-constraintタグとlogin-configタグとsecurity-roleタグを追加する。
↓はJava ServletとAWS-SESでメール送信 No.3 で作成したプログラムにBASIC認証を導入した場合の例





    
    
        SendMail
        send.SendMail
      
    
        SendMail
        /SendMail
     

    

    
     
      html
      /*
     
     
      tomcat
     
    
    
    
     BASIC
     UserDatabaseRealm
    
    
  tomcat
    
    



4.Tomcatを再起動する。



これで設定はおしまい。BASIC認証を設定したプログラムにアクセスしてみると・・・


このように認証ウィンドウが開く。



ただ、いまいちよくわかんないんだけど
web-resource-nameタグで指定したhtmlフォルダ以外のプログラムにアクセスしても認証ウィンドウが出てくるんだよね。
まぁ自分の場合はメール送信プログラムの実行前に認証できてればよかったから別にいいけど。
この辺はきっと未来の自分がなんとかしてくれるだろう。。


追記(2013/02/03_17:22):web-resource-collectionタグ内の記述について
web-resource-nameタグに記述するのは「リソース名」ではなく、
「アクセス制限ルールを適用するリソースに対する任意の名称」です。つまり何でもいいようです。
また、url-patternタグに記述するのは「web-resource-nameで指定したリソースからのパス」ではなく、
単純に「アクセスを制限するリソースのURL」でした。servlet-mappingタグでのurl-patternの指定と同じ記法です。

たとえば、「http://xxx.xxx.xxx.xxx/SendMail/html/」以下のプログラムに対するアクセスに認証を設ける場合は、
     
      まろ最高
      /html/*
     
 
とするのが正解です。


貴重なアドバイスを下さった越冬老師様に、大変感謝いたします。


2013年2月1日金曜日

Amazon Web Serviceで仮想サーバ構築 No.7 -TomcatでHTTPS通信-

TomcatサーバとHTTPS通信できるようにする方法をメモする。

今回もこれまでにAWS-EC2で作成した仮想サーバを使用している(Ubuntu12/Tomcat7)




1.No.2にメモした方法でインスタンスに接続する。

2.No.4で設定したTomcatの所有ユーザ(自分の場合はmaro)のホームディレクトリへ移動する
cd /home/maro

3.SSL/TLS通信で必要となるキーストアを作成する。
keytool -genkey -alias tomcat -keyalg RSA

#以下の質問に答えていく(全てアルファベット)

Enter keystore password: キーストアのパスワードを入力

What is your first and last name?
  [Unknown]:  ①TomcatサーバのFQDNを入力

What is the name of your organizational unit?
  [Unknown]: ②組織単位名を入力

What is the name of your organization?
  [Unknown]:  ③組織名を入力

What is the name of your City or Locality?
  [Unknown]:  ④都市名または地域名を入力

What is the name of your State or Province?
  [Unknown]:  ⑤都道府県を入力

What is the two-letter country code for this unit?
  [Unknown]:  ⑥国番号を入力(日本ならJP)

  ちなみに、僕の場合は⑥以外は全てmaroだかmaro.comだか、とにかくてきとーに入力した。
  Elastic IPのサービスを受けていないからドメイン名など持ってない!とにかく暗号化できればいい。


4.server.xmlを編集する。

  No.6でポート番号の設定を変更したConnecterタグの少し下に、コメント化されたSSL/TLSに関するConnecterタグがある。
  そのコメントを解除して、以下の2行を追加する。
keystoreFile="キーストアの指定"
keystorePass="キーストアのパスワード"
  ついでにHTTPSのポート番号(Tomcatデフォルト値8443)をウェルノウンポートに合わせる場合は、
  「port="8443"」を「port="443"」に変更する。



5.Tomcatを再起動して変更を反映させる。




これでおわり。
実際にアクセスしてみると・・・

警告が表示される。まぁてきとーにドメイン指定された自前の証明書を使ってるわけだから当然よね。

例外として承認すれば接続できるわけだけど

散々な言われ様だな・・・


結果

URIスキームに注目。「https://」になってるのが確認できる。





次回はBASIC認証の導入。

Amazon Web Serviceで仮想サーバ構築 No.6 -Tomcatポート変更-

Tomcatのポート番号は8080がデフォルトだから、そのままだとサーバにアクセスする度にいちいち指定しないといけないから面倒。

というわけで、ポート番号をウェルノウンポートに合わせる方法をメモする。


1.tomcatの conf/server.xml を開く。

2.Connecterタグのportの値を変更する。

  これを


  こう


  redirectPortは別に変えなくてもいい。

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を押すというのが一番簡単ですね