文件上傳和文件包含的各種姿勢
文件上傳
前端
JS 防護,通過抓包修改,或插件js禁用來繞過。
后端
黑名單上傳陌生后綴 .php3 php5上傳配置文件 .htaccess通過 雙寫 ,大小寫,基于windows 特性 ::$DATE .php空格 .php. .php:.jpg
白名單
%00截斷 版本小于5.3.4 char(0) 空字符, c語言將空字符作為結束的標志,在字符串 中添加%00 解析時會將空字符之后的字符做丟棄處理配合文件包含 上傳圖片碼 條件競爭(通過上傳后 后端處理是 先存放在刪除) 修改 conten-type image/jpeg 修改MIME 類型
IIs 服務器 解析漏洞
6.0 文件解析漏洞 .asp: . jpg 分號后面的不會被解析
目錄解析漏洞 .asp/1.jpg .asp目錄下的文件都會被解析成asp文件
7.0 CGI 解析漏洞 .jpg/.php
Apache
2.4.0-2.4.29 換行解析漏洞 換行
1.x 2.x 多后綴解析漏洞 .php.qwe
nginx
1.5.0-1.5.7 0.8.4-1.4.3 文件名邏輯解析漏洞 webshell.jpg空格 .訪問 webshell/jpg%00.php 原因是錯誤地解析了請求的URI,錯誤地獲取到用戶請求的文件名,導致出現權限繞過、代碼執行的連帶影響。
0.5 0.6 0.7 %00截斷
0.5.6 - 1.13.2 nginx整數溢出漏洞 在nginx作為反向代理服務器,且開啟了緩存時,攻擊者可以構造惡意的range域,來獲取相應的服務器中的緩存文件頭部信息,導致敏感的服務器信息泄露。

文件包含
包含函數 include_once include require require_once include 只會拋出錯誤,不會終止 require 到包含文件不存在時 直接終止程序
本地文件包含
遠程文件包含 前提是 allow_url_fopen allow_url_include
php 偽協議
flie:// 訪問 本地文件系統 不受 allow_url_fopen allow_url_include 影響
allow_url_include = on
php://input 讀取post 請求中的數據
php://filter 讀取源碼
zip:// 協議
可以訪問 壓縮文件中分子文件, 不需要指定后綴名
?fi=zip://E:\phpStudy\PHPTutorial\WWW\phpinfo.jpg%23phpinfo.txt
data:// 協議
allow_url_fopen allow_url_include 0n
用法:include.php?filename=data:text/plain,
直接插入php代碼的話,有些特殊符號容易出問題 抓包修改
http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt
防御繞過
00截斷超長字符串目錄穿越 (后端代碼 包含對象中 追加 目錄名) 問號截斷井號后綴猜測
文件包含 碼傳不上去
中間件日志文件
一句話木馬插入 url 中, 中間件解析報錯 報存在 日志文件中
ssh 登錄日志文件保存路徑 /var/log/auth
去包含這個文件
最好是在24.00 8.00 日志重制時
木馬寫在seesion中
session保存路徑/var/lib/php/sess_phpsessid
防御繞過
將需要 包含的地方 寫死過濾接收到的參數禁止遠程文件包含限制訪問范圍使用白名單

