文件包含之LFI


0x00 含義&&類型

首先,PHP文件包含主要由這四個函數完成:

  • include()  //包含一些html模塊文件

  • require()  //包含一些數據庫,配置文件

  • include_once()  //只調用一次包含文件,多次調用就會報錯

  • require_once()

當使用這4個函數包含一個新的文件時,該文件將作為PHP代碼執行,PHP內核並不會在意該被包含文件是什么類型。所以如果被包含的是txt文件、圖片文件、遠程URL,也都將作為PHP代碼執行。

include與require的區別在於:

1.include是當代碼執行到它所在的行數是,它才會開始包含文件,並且如果文件加載錯誤,依然會向下執行代碼。

2.require是只要當前程序執行它就會立刻包含文件,並且在加載文件錯誤的時候會停止運行並發出警告。

文件包含漏洞的類型分為:

1.本地文件包含(LFI)

2.遠程文件包含(RFI)

當php.ini中,設置allow_url_include=On allow_url_fopen=On,即可執行遠程代碼。

 

0x01 包含本地目錄文件

簡單的漏洞代碼示例

1 <?php
2     if($_GET['file'])
3     { include '$_GET['file']';}
4     else
5      include 'hello.php';  
6 ?>

 正確頁面:

 

包含當前目錄中flag.php文件:

包含上級目錄中的某個文件:

 

 

既然這樣,我們就可以使用./(當前目錄)、../(上級目錄)對整個目錄進行遍歷,也就可以獲取敏感的文件

 

0x02 PHP偽協議以及其他封裝協議的利用

php各種偽協議參考:http://php.net/manual/zh/wrappers.php.php

1.php://input

 php://input可以讀取沒有處理過的POST數據,不依賴於特定的php.ini指令。當enctype=”multipart/form-data” 的時候 php://input 是無效的。

簡單舉例如下:

 

 2.php://filter

php://filter可以說是是最經常使用的一個偽協議,用它在沒有特殊情況下(我沒遇到過TnT)可以進行任意文件的讀取。

就拿最近SWPU CTF中學長出的一道題來舉例:

題目地址為:http://39.106.13.2/web2/file.php?file=index

在url中發現file=index,有此猜想可能有本地包含獲取網頁源碼,所以嘗試直接用php://filter讀取index源碼

這里用base64加密了index.php的源碼,直接解密就得到了源碼。

exp: ?key=php://filter/read=convert.base64-encode/resource=xxx.php

 

3.zip協議&&phar協議

zip協議:http://php.net/manual/zh/wrappers.compression.php

利用phar://協議特性可以在滲透過程中幫我們繞過一些waf檢測(此方法使用要php>5.3.0).

關於zip://

zip://test.jpg#dir/test.php

先新建一個test.php,里面寫個phpinfo,然后壓縮成.zip,然后把zip的名字改成test.jpg后把這個jpg文件上傳上去 然后使用zip協議包含.

 

 phar利用方法與zip協議類似。

0x03 一些簡單的繞過姿勢

有些程序員為了防止本地包含漏洞,通常會編寫一些這樣的代碼:

 

<?php
    include $_GET['page'].".php";
  
?>

 

1. 00截斷

(1) /etc/passwd%00,訪問文件

(2)%00目錄遍歷

2. 使用長目錄截斷

/etc/passwd/././././././.[…...]/./././././.
(php版本小於5.2.8(?)可以成功,linux需要文件名長於4096,windows需要長於256)

 

0x04 相關學習資料

1.文件包含漏洞小節

https://www.cnblogs.com/iamstudy/articles/include_file.html

2.論PHP常見的漏洞

http://www.anquan.us/static/drops/papers-4544.html

3.php偽協議

http://blog.csdn.net/Ni9htMar3/article/details/69812306?locationNum=2&fps=1

4.包含日志文件getshell

https://www.cnblogs.com/my1e3/p/5854897.html

 

 

個人的第一篇博客,希望自己在安全的路上越走越好,越走越遠

 

 

 

 

 

 

 

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM