人生モラトリアム

死ぬまでの暇つぶし

bwapp A1 Injection

最近セキュリティに興味を持ち始めて

qiitaを色々見ていたところ、

OSCPという資格に

「セキュリティ未経験で受験して合格した!」

というのを見て

 

// OSCP!?、なにそれカッコイイ!

// 俺もハッカーになりたい!

 

と思いWEBのセキュリティについて勉強することにした。

(と言っても飽きたらすぐやめる可能性大)

 

とりあえず、

プログラミングに関してはJavaを2年ほど

実務経験積んだので

全然わからないってことはないだろう。

ネットワークに関しても

AWSでEC2インスタンス立てたり

実務でアプリのリリースとか

していたので、まぁいいかと。

 

とりあえずは

徳丸本を読みながら

それに対応する脆弱性

bWAPPというやられアプリで

とにかく試してみるのが良いんかなと思った。

 

ということで

bWAPPのA1 Injectionでやったことをここに記録する。

 

SQL Injection (GET/Search)



徳丸本でいうと

SQL インジェクションによる認証回避

のところに書いてある

‘ OR ‘a’=‘a

を使う。

 

実際に入力する文字列としては

' OR '1' = '1' --'

と入力する。

'「シングルクォーテーション」が

SQLの文字リテラルの終端になるため

SELECT * FROM テーブル名 WHERE title = '' OR '1' = '1' --'

というSQLが実行されるかと思う。

-- 以下はコメントとして無視される。

 

SQL Injection (GET/Select)

パラメータとして

movieを受け取っているようです。

 

movieというカラムがあるのか

調べてみます。

恐らくmoviesテーブルのidをパラメータとして

受け取っているみたいですね。

 

idは数値リテラルのようなので、

徳丸本の

数値項目に対するSQLインジェクション

をやってみます。

変数に型の制約がないスクリプト言語(PHPなど)で

数値を想定した変数に数値以外が入る場合があるらしいです。

 

全データを取ろうとしましたが、

取れないみたいですね...

 

 

order by で数値を入力すると

数値に対応したカラムで並び替えられるらしいです。

 

 

UNION SELECTもやってみました。

 

http://localhost/sqli_2.php?movie=1+UNION+SELECT+id%2Ctitle%2Crelease_year%2Cgenre%2Cmain_character%2Cimdb%2Ctickets_stock+FROM+movies%3B&action=go

 

実際にDBで実行すると

全データ取得できるのに、

パラメータで指定すると

取得できませんでした...

 

次に、

information_schemaを

使ってみます。

http://localhost/sqli_2.php?movie=1+UNION+SELECT+table_name%2Ccolumn_name%2Cdata_type%2Cnull%2Cnull%2Cnull%2Cnull+FROM++information_schema.columns%3B--&action=go

 

何も出ない...

 

http://localhost/sqli_2.php?movie=1+UNION+SELECT+gRoUp_cOncaT%280x7c%2Cschema_name%2C0x7c%29%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull+FROM++information_schema.schemata%3B--&action=go

 

これもダメでした...

 

最終的に

色々調べてバージョン、スキーマ名がわかりました。

AND 1=2 UNION SELECT ~の部分がいまいちよく分からない。