Kioptrix: Level1.2 SQL Injectionについて

SQL Injectionについて出てきたのでまとめる

※筆者は理解しようとしてこの記事書いてるので、思考回路まんま記載してます

解説記事ではないのでご了承ください

 

内容について

もともとはこっちから

syachineko.hatenablog.com

 

 

phpにおけるSQL Injectionの脆弱性の例

?id=1'を挿入することで、SQL構文エラーとなった

また、?id=''を挿入することで、SQL構文エラーが回避された

この時のphp側の形は・・・・?

XXX['$VARIABLE']

 => XXX['1''] => ERROR!

 => XXX[''''] => OK

ということか?

SQL Injectionの参考文献をいくつか確認する必要あり

 

 

その後、union select columns_sequenceを1, 2, 3, x-1に置き換えて発行

これって、カラムが6列あることは試してみないとわからないってことですよね??

?id=-1 union select XXXで、

(aaa, bbb, ccc, ddd, eee, fff)

(qqq, www, eee, rrr, ttt, yyy)

(1   , 2   , 3   , 4   , 5   , 6    )

こうすることで初めてエラーなく出力が可能になる

それ以外の場合の出力についても確認すること

※id=-1としているのは、union以下の行が確実に読まれるように存在しないidを指定している、であってるかな

 

 

さらに、脆弱な出力が2の部分であることが判明したので、

この部分にいろいろな組み込み関数を入れて出力を試している

version()やdetabase()、user()などがあるが、どのようなものが他にあるか・・・?

=>情報関数として、いろいろあるようだ

dev.mysql.com

といっても、これくらいしか有用なのなかった

 

 

 

で、次のSQL

?id=-1 union select 1,group_concat (table_name),3,4,5,6 from information_schema.tables where table_schema=database()--

 

group_concatは連結された文字列を返却する

 

上記の内容の意味は、

information_schemaスキーマにあるtablesテーブルのtable_nameカラムを引っ張っている

tablesテーブルには少なくとも2つのカラムがあり、table_nameおよびtable_schemaを持っている

tablesテーブルの構成は以下

dev.mysql.com

 

確かに、teble_nameとtable_schemaカラムが存在していることが確認できる

で、テーブル名を列挙して、それっぽいテーブルdev_accountsを確認

 

 

次のSQL Injectionでは以下の構文

?id=-1 union select 1,group_concat (column_name),3,4,5,6 from information_schema.columns where table_name=CHAR(100, 101, 118, 95, 97, 99, 99, 111, 117, 110, 116, 115)--

 

columnsテーブルは以下の感じ

dev.mysql.com

とあるtable_schemaのとあるtable_nameにあるcolumn_nameってことで特定できる、と

これで検索かけて、id, username, passwordというカラム構成になっていることがわかるそう

 

 

ちょっと疑問だったのが、table_nameの部分をCHARであらわさなければいけないという部分

少し調べても出てこなかったので、どうしよう

ちなみにCHARとの変換は以下を使いました

http://www.waraxe.us/sql-char-encoder.html

 

 

で、3段目

?id=-1 union select 1,group_concat (username, 0x3a, password),3,4,5,6 from dev_accounts--

これでようやくユーザ名とパスワードハッシュが抜けましたとさ

 

 

Information_schemaについて

Information_schemaとは、特定のDBに対するテーブル名、カラム名といった読み取り専用情報のこと

 

 

おわりに

mysqlを題材としたphpSQL Injectionについて理解が深まりましたー! 

 

 以上!