本文由红日安全成员: Once 编写,如有不当,还望斧正。
大家好,我们是红日安全-Web安全攻防小组。此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名字叫 Web安全实战 ,希望对想要学习Web安全的朋友们有所帮助。每一篇文章都是于基于漏洞简介-漏洞原理-漏洞危害-测试方法(手工测试,工具测试)-靶场测试(分为PHP靶场、JAVA靶场、Python靶场基本上三种靶场全部涵盖)-实战演练(主要选择相应CMS或者是Vulnhub进行实战演练),如果对大家有帮助请Star鼓励我们创作更好文章。如果你愿意加入我们,一起完善这个项目,欢迎通过邮件形式(sec-redclub@qq.com)联系我们。
1.1 任意文件读取下载漏洞简介
一些网站由于业务需求,可能提供文件查看或下载功能。如果对用户查看或下载的文件不做限制,则恶意用户能够查看或下载任意文件,可以是源代码文件、敏感文件等。
1.2 任意文件读取下载漏洞危害
攻击者可以读取下载服务器中的配置文件、敏感文件等,会提供攻击者更多可用信息,提高被入侵的风险。
1.3 任意文件读取下载漏洞利用条件
存在读文件的函数
读取文件的路径用户可控且未校验或校验不严
输出了文件内容
任意文件读取下载漏洞测试
2.1测试思路
寻找读取或下载文件的功能点,跳跃目录获取敏感文件
有的限制目录不严格,只对部分目录限制,可以尝试用其他敏感文件路径,常见敏感文件路径如下: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: /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_history /proc/self/fd/fd[0-9]*(文件标识符) /proc/mounts /porc/config.gz
2.2 靶机测试
这里我们使用web for pentester进行测试
2.2.1 安装步骤
下载地址:https://download.vulnhub.com/pentesterlab/web_for_pentester_i386.iso
我们只需要VMware安装镜像文件即可使用
新建虚拟机
默认下一步
选择镜像文件
设置虚拟机名称和存放位置
磁盘大小默认即可
开启此虚拟机
查看ip地址
搭建成功,这里用Directory traversal做演示
2.2.2 Example 1
从代码里看出未作限制,直接读取文件
$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( p a t h ) . ′ " ; ′ ) ; h e a d e r ( ′ C o n t e n t − T r a n s f e r − E n c o d i n g : b i n a r y ′ ) ; h e a d e r ( ′ C o n t e n t − L e n g t h : ′ . f i l e s i z e ( path) . '";'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize( path).′";′);header(′Content−Transfer−Encoding:binary′);header