際際滷

際際滷Share a Scribd company logo
SQLインジェクション
襖謹再孅
1
セキィリティ
? セキュアな彜B
? 吭蹐靴覆い海箸鬚覆気譴覆い茲Δ法 採らかの貨がvじられ
ている彜B
? セキュリティインシデント
? 吭蹐靴覆い海箸鬚気譴討靴泙Δ海硲┨弔鯤椶韻襭
? 吭蹐擦困法▲札ュアではない彜Bにること麗をなくす
? セキュアな彜Bはセキュリティインシデントがk伏しない彜Bと
は冱えない
2
セキュリティインシデントとWebサ`バの
vわり
? Webサ`バそのものが瓜墾を鞭ける栽
? Webサ`バからパスワ`ドやクレジットカ`ド送竃
? SQLインジェクション
? 傍槻優瓸`ルによるウィルス湖半
? Webサ`バがセキュリティインシデントを廁L
? 撹りかわりで、幣医へきzみをされる
? クロスサイトリクエストフォ`ジェリ
? ID\っ函りによる
? セッションフィクセ`ション
? 吭蹐靴覆ぅ廛蹈哀薀爐g佩
? クロスサイトスクリプティング
3
よくあるWebの撹Servlet)
? よくある撹愁侫讒`ムワ`ク
JavaEE
(glassfish/wildflyなど
Java
プログラム
(Servlet)
JSPファイル
Servlet侏ア`キテクチャ
RDBMS
(Oarcle,mysql,postg
reSQLなど
JDBC
ブラウザ
4
サンプルアプリケ`ション SampleBBS
叟幣医アプリ SampleBBS
C嬬
ログインすると誘後辛嬬
ログインしなければ碧Eのみ辛嬬
タイトル碧鮫中
sssと秘れて碧ボ
タンを兀す
碧Y惚燕幣
5
SampleBBSの碧C嬬の古勣
<form action=
^<%= response.encodeURL( ̄/SampleBBS/SearchArticles^) %> ̄
method="GET">タイトル碧
<input type="text" name="word" value="${param.word}">
<input type="submit" value="碧">
</form>
try(Statement st=con.createStatement();){
String sql = ^SELECT * FROM articles A JOIN users U ON U.id=user_id WHERE title LIKE '%" + word +"%' ORDER BY 1";
ResultSet rs = st.executeQuery(sql); // 碧Y惚をリストに鯉{
while (rs.next()) {
articles.add(new Article(
rs.getInt("id"),rs.getInt("user_id"), rs.getString("email"), rs.getString("title"), rs.getString("body")));
}
}
碧鮫中 JSP
碧 Servlet
GET http://hostname/SampleBBS/SearchArticles?word=^sss ̄
SQL猟の恬撹にStringオブ
ジェクトのY栽を聞う
6
デ`タベ`ステ`ブル夛
+----+---------+--------+-----------------------------------------+
| id | user_id | title | body |
+----+---------+--------+-----------------------------------------+
| 1 | 2 | Titl1 | This is a contents of Article 1 |
| 2 | 2 | Titl2 | This is a contents of Article 2 of hiro |
| 3 | 1 | Titl3 | This is a contents of Article 3 of hata |
| 4 | 1 | Title4 | This is a contents of Article 4 of hata |
| 5 | 1 | sss | dfdsfsa |
| 6 | 2 | tt | tt |
+----+---------+--------+-----------------------------------------+
+----+--------------+----------+-----------------------+
| id | name | pass | email |
+----+--------------+----------+-----------------------+
| 1 | hata | hatahata | h.hata@olt.tokyo |
| 2 | hiro | hiro | test@ntt.com |
| 3 | hata2 | hahata | hata@olt.tokyo |
| 4 | hata2 | hahata | hata@olt.tokyo |
| 5 | hata2 | hahata | hata@olt.tokyo |
| 6 | rrr | 8888 | hata@qc5.so-net.ne.jp |
+----+--------------+----------+-----------------------+
碧g佩のために2つの燕をY栽して、3つのカラムを函り竃す
SELECT * FROM articles A JOIN users U ON U.id=user_id WHERE
title LIKE '%sss%' ORDER BY 1
+----+---------+-------+---------+----+------+----------+------------------+
| id | user_id | title | body | id | name | pass | email |
+----+---------+-------+---------+----+------+----------+------------------+
| 5 | 1 | sss | dfdsfsa | 1 | hata | hatahata | h.hata@olt.tokyo |
+----+---------+-------+---------+----+------+----------+------------------+
誘後並とユ`ザ砿尖の2旦の燕で撹される
誘後宀蒙協のために、ユ`ザIDでリレ`ションされる
7
パスワ`ドの送竃
碧Y惚燕幣
' UNION SELECT 0,0,name,pass,0,'a','a','a'
from users where name like '%
碧にSQL猟の僅頭を秘薦する
タイトルの何蛍にユ`ザID
云猟の何蛍にパスワ`ドが燕幣されている
8
SELECT、UNIONとJOINについて
SELECT:1つの燕からeの仟しい燕を恬り竃す
JOIN:2つの燕を罪圭鬚Kべてeの燕を恬り竃す
UNION:2つの燕をk圭鬚Kべてeの燕を恬り竃す
A B
A B+ A B
A B+ A
B
SELECT
JOIN
UNION
9
音屎SQL猟の嘛
なぜパスワ`ドが燕幣されたのか
SELECT * FROM articles A JOIN users U ON U.id=user_id WHERE title LIKE '%'
UNION SELECT 0,0,name,pass,0,'a','a','a' from users where name like '%%' ORDER BY 1
+----+---------+-------+---------+----+------+----------+------------------+
| id | user_id | title | body | id | name | pass | email |
+----+---------+-------+---------+----+------+----------+------------------+
| 5 | 1 | sss | dfdsfsa | 1 | hata | hatahata | h.hata@olt.tokyo |
+---+---+--------------+----------+---+---+---+---+
| 0 | 0 | name | pass | 0 | a | a | a |
+---+---+--------------+----------+---+---+---+---+
| 0 | 0 | hata | hatahata | 0 | a | a | a |
| 0 | 0 | hiro | hiro | 0 | a | a | a |
| 0 | 0 | hata2 | hahata | 0 | a | a | a |
| 0 | 0 | hata2 | hahata | 0 | a | a | a |
| 0 | 0 | hata2 | hahata | 0 | a | a | a |
1朕のSELECTで伏撹された燕┐發箸發頒蹐靴討い娠蹌州献ラムを隔ち、うち3カラムを聞う
2朕のSELECTで伏撹された燕
+----+---------+---------+------------+----+------+----------+-----------+
| id | user_id | title | body | id | name | pass | email |
+----+---------+---------+------------+----+------+----------+-----------+
| 0 | 0 | hata | hatahata | 0 | a | a | a |
| 0 | 0 | hiro | hiro | 0 | a | a | a |
| 0 | 0 | hata2 | hahata | 0 | a | a | a |
| 0 | 0 | rrr | 8888 | 0 | a | a | a |
| 0 | 0 | trew | 5555 | 0 | a | a | a |
| 0 | 0 | hhaat | 11111 | 0 | a | a | a |
UNION
10
SQLインジェクションのgな契峭貨
? 碧などに秘れられた猟忖双をSQL猟の匯何として盾した
ことが圻咀
? 秘薦された猟忖双に、¨(シングルクォ`ト猟忖が根まれていたらエスケ`プする
? ¨ => ?¨ ^=>? ̄ #=>##
SELECT * FROM articles A JOIN users U ON U.id=user_id WHERE title LIKE '%
?' UNION SELECT 0,0,name,pass,0,?'a?',?'a?',?'a?' from users where name like?'%
%' ORDER BY 1
秘薦された猟忖双は、SQL猟として盾されない 11
SQLインジェクション貨
? デ`タベ`ス室g宀としてできること
? プログラマ`としてできること
? ネットワ`ク室g宀としてできること
12
デ`タベ`ス貨
? m俳な慙泙慮錦
? カラムごとにアクセス慙泙淋O協できるデ`タベ`スの栽
?サ`ブレットにはパスワ`ドやクレジットカ`ド秤鵑
根むカラムにはアクセス慙泙魍屬燭覆ぅ禰`タベ`スロ
グインIDを原嚥する
? 燕ごとにアクセス慙泙鰓O協できるデ`タベ`ス
?パスワ`ドやクレジットカ`ド秤鵑覆匹蓮¬eの燕を
恬ってサ`ブレッドからはアクセスできないようにする
13
プログラミング貨
String sql = "SELECT * FROM articles A JOIN users U ON U.id=user_id"+" WHERE title LIKE '%" + word +"%' ORDER BY 1";
ResultSet rs = st.executeQuery(sql);
String sql = "SELECT * FROM articles JOIN users ON user_id=users.id"+" WHERE title LIKE ? ORDER BY 1";
PreparedStatement st = con.prepareStatement(sql);
st.setString(1, "%" + word + "%");
ResultSet rs = st.executeQuery();
俐屎されたコ`ド
冱Zで喘吭されているSQLインジェクション貨C嬬を旋喘する
StringのY栽ではなく、PreparedStatementクラスのsetStringを聞う
廣吭PreparedStatementを聞えばいいのではなく、
プレ`スホルダに、鬟札奪箸垢襪里setStringを聞うことで兜めて貨になる
蒙歩猟忖をエスケ`プする。ただし、返咾任呂覆冱Zごとに喘吭されている
PreparedStatementクラスを聞う
14
ネットワ`ク箸任貨
巌樋來を隔つ
Webサ`バ
WAF
GET http://hostname/SampleBBS/SearchArticles?word=^sss ̄
GET http://hostname/SampleBBS/SearchArticles?word=^' UNION SELECT
0,0,name,pass,0,'a','a','a' from users where name like '% ̄
X
WAFにO協できるポリシ`箭
HTTPリクエストに ̄SELECT ̄が根まれると宥佚孳僅
鋲措なユ`ザ
好蔦
WAFを聞う
WAFWeb Application Firewall :
HTTPの嶄をて宥佚のE宥を登僅するファイヤウォ`ル
15
まとめ
? SQLインジェクションとは
? Web鮫中の秘薦デ`タにSQL猟┐厘参殖が秘薦して吭蹐靴覆嘛
を孃く好
? SQLインジェクションの{璃
? Lすべきデ`タの息
? デ`タベ`スの篤(DROP猟や、DELETE猟の詞秘
? 貨
? デ`タベ`スアクセス宀へのm俳な慙泙慮錦
? プログラミングにおけるSQL猟伏撹にPreparedStatementクラスを聞う
? WAFによるSQL猟詞秘のHTTPリクエストの電茅
? t栽貨の嶷勣來
? 匯つの貨では、好箸累Miには弖惄任ない
? Fr泣で^と房われる殻業の}方貨が繍栖の好弔睦 16

More Related Content

皆河晦インシ?ェクション

Editor's Notes

  • #5: サ`ブレット沙中デザインをJSPファイルに、プログラムをJavaプログラムに毅輝させる JSPとサ`ブレットのvS原けをJavaEEで佩う 仟しいフレ`ムワ`クとして、JFSがあるが、セキュリティ蛍勸ではF壓借Pしている岬方が謹いサ`ブレットをケ`ススタディに聞う
  • #6: 幣医には、3つのテ`タ┘織ぅ肇襦广宀メ`ルアドレス、云猟が燕幣される 燕幣されている鮫中はJSPファイルに峰して、碧ボタンを兀すとサ`バ箸妊稀`ブレットが軟咾気譴
  • #7: サ`ブレットは秘薦パラメ`タを圷に碧するための皆河晦猟を恬って、デ`タベ`スにg佩を卆mします
  • #8: 2つの4つのカラムを隔つ燕をJOINして8カラムを隔つ仟しいテ`ブルを伏撹しています。 その嶄から3つのカラムを函り竃して鮫中に燕幣します。