Web漏洞-任意文件读取漏洞

这篇具有很好参考价值的文章主要介绍了Web漏洞-任意文件读取漏洞。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

任意文件读取漏洞

原理

任意文件读取是属于文件操作漏洞的一种,通过提交专门设计的输入,攻击者就可以在被访问的文件系统中读取或写入任意内容,往往能够使攻击者从服务器上获取敏感文件,正常读取的文件没有经过校验或者校验不严格,用户可以控制这个变量或者变量读取任意文件。 一般任意文件读取漏洞可以读取配置信息甚至系统重要文件。

危害

任意文件读取的危害往往大于目录遍历漏洞,任意文件读取不仅会泄露网站的结构目录,一些敏感文件还会被通过构造特殊的字符结构下载下来,比如说../或者~/导致服务器的重要文件信息泄露,比如说../etc/passwd,../etc/shodan,~/bash_history等文件,或者下载脚本配置文件,网站文件进一步审计,得到危害更大的漏洞进一步利用

漏洞产生的原因
  • 存在读取文件的函数

  • 读取文件的路径用户可控,且未校验或校验不严

  • 输出了文件内容

任意文件读取

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

文件读取函数

readfile()file_get_contents()fopen()中,$filename没有经过校验或者校验不合格,用户可控制变量读取任意文件,如/etc/passwd./index.php/config.ini

如何发现?
一般文件读取或者文件下载都会跟一个参数名在后面,比如说
http://127.0.0.1/file.php?filename=xxx.txt
上面的txt就会被下载下来,但是如果即将xxx.txt换成其他的参数呢?比如说../etc/passwd
http://127.0.0.1/file.php?filename=../../../../etc/passwd
如果存在回显,则代表该网站存在任意文件读取漏洞

代码示例:

以下代码均存在文件读取的危险

<?php
$file = $_GET['filename'];
readfile($file);
?>


<?php
$file = '1.txt';
print(file_get_contents($file));
?>

<?php
$file = '1.txt';
include $file;
?>

<?php
$file = '1.txt';
require $file;
?>
利用思路

1、一般拿到一个任意文件读取得先判断权限大不大,如果权限够大的话可以直接先把/etc/sadow读下来,权限不够就读/etc/passwd,先把用户确定下来,方便后续操作

2、读取各个用户的.bash_history能翻有用的信息,如编辑一些敏感文件

3、读取程序配置文件(如数据库连接文件,可以利用数据库写shell)

4、读取中间件配置文件(weblogic/tomcat/apache的密码文件、配置文件,确定绝对路径,方便后面读源码)

5、读取一些软件的运维配置文件(redis/rsync/ftp/ssh等等程序的数据、配置、文档记录)

6、读取程序源代码,方便后面做代码审计,找突破口

7、读取web应用日志文件,中间件的日志文件,其他程序的日志,系统日志等(可以网站后台地址、api接口、备份、等等敏感信息)

8、还有就是可以用字典先跑一波(字典之前有分享过),信息收集还是要全面点。

敏感信息
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 //如需登录到远程主机,需要到.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参数


中间件
/usr/local/apache/conf/httpd.conf
/var/www/html/apache/conf/httpd.conf
/home/httpd/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/local/httpd/conf/httpd.conf
/etc/apache/httpd.conf
/usr/local/lib/php.ini
/etc/httpd/conf/httpd.conf
/usr/local/app/apache2/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf
/usr/local/app/php5/lib/php.ini
/etc/httpd/conf.d/php.conf
/etc/httpd/conf.d/httpd.conf
/etc/httpd/logs/error_log
/etc/httpd/logs/error.log
/etc/httpd/logs/access_log
/etc/lighttpd/lighttpd.conf
/var/log/www/error.log
/usr/local/lighttpd-1.4.35/lighttpd.conf
/usr/local/services/apache-tomcat-8.0.23/logs/catalina.out
/usr/local/services/jetty-8.1.16/logs/stderrout.log
/usr/local/services/jetty-8.1.16/etc/jetty.xml
/etc/nginx/nginx.conf
/var/www/html
/usr/local/services/nginx-1.6.2/logs/access.log
/usr/local/services/nginx-1.6.2/logs/error.log
/usr/local/services/nginx-1.6.2/nginx.conf
/usr/local/services/nginx-1.6.2/conf/nginx.conf
/usr/local/services/nginx-1.6.2/conf/proxy.conf
/usr/local/services/nginx-1.6.2/conf/extra/haolaiyao.conf
注意
任意文件读取/etc/passwd
提取passwd第一列,即root等一系列用户名
读history:../../root/.bash_history
暴破所有用户的.bash_history:../../../home/§root§/.bash_history
历史命令重点关注出现的密码、路径、配置文件路径、其他关联IP、日志文件、war包、备份文件路径等等,可进一步读取或利用。

/root/.ssh/id_rsa 私钥
/root/.ssh/authorized_keys 公钥存储文件
/root/.ssh/id_rsa.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
私钥文件如果没有设定密码保护,便可直接获取到进行登录到服务器,或使用xshell等软件选择证书登录。
ssh -i id_rsa root@IP地址

/etc/passwd
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ......
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

/etc/shadow
root:$1$v2wT9rQF$XSpGgoB93STC4EFSlgpjg1:14181:0:99999:7:::
$id$salt$密文
id代表的是使用不同的加密算法,不同的系统使用的算法也不尽相同。salt是加密的时候需要用到盐。最后就是密文。
注意:如果密码字符串为*,表示系统用户不能被登入,为!表示用户名被禁用,如果密码字符串为空,表示没有密码。

$1

md5

$2a

blowfish

$2y

blowfish

$5

sha-256

$6

sha-512

绕过思路
1.编码绕过,有些网站也是会将文件名转成 base64或者其他编码格式再去读取,比如:
http://127.0.0.1/file.php?filename=aW5kZXgucGhw
// 对应index.php
通过编码后进行读取文件,如果要读取其他文件,同理,先编码,后传入

2.使用url编码代替.或者/
http://127.0.0.1/file.php?filename=.%2F.%2F.%2F.%2Fetc%2Fpasswd
使用%2F代替/
或者二次编码(%25)
http://127.0.0.1/file.php?filename=.%252F.%252F.%252F.%252Fetc%2Fpasswd
%25是%
%2F是/
%252F会先解开%25,解开后是%,然后在拼接2F就会变成%2F=/

3.如果对文件名有限制,可以试着用 %00截断
http://127.0.0.1/file.php?filename=../../../1.php%00.jpg
%00截断对PHP的版本有要求:PHP<5.3.4

4.加入+
?filename=.+./.+./bin/redacted.dll

5.\
?filename=..%5c..%5c/windows/win.ini

6.Java %c0%ae 安全模式绕过
?filename=%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd
防御
  1. 对传入的文件名进行判断限制过滤

  1. 合理控制目录读取的权限

  1. 采用白名单读取文件

  1. 打开php.ini文件找到open_basedir,然后去掉前面的分号(;),在等于号(open_basedir=)后面写入限制读取的范围

  1. 过滤./ ~/等字符文章来源地址https://www.toymoban.com/news/detail-648839.html

常见的URL格式和参数
download.php?file=
download.php?filename=
file.php?file=
filename.php?name=
readfile.php?filename=
file.php?url=
file.php?dirname=
file.php?f=
...

value:
&dir=
&name=
&dir_name=
&filename=
&path=
&filepath=
...

到了这里,关于Web漏洞-任意文件读取漏洞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 某赛通电子文档安全管理系统 DecryptApplication 任意文件读取漏洞复现

    某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能加

    2024年04月09日
    浏览(41)
  • 【web安全】文件包含漏洞

    目录 1.什么是文件包含漏洞 2.产生原因 3.文件包含的类型 3.1本地文件包含 3.2远程文件包含 4.攻击利用手法 4.1 file:协议 4.2 php://协议 ​4.3 zip://,bzip2://,zlib://协议  4.4 data://协议 4.5 PHP伪协议总结  5.如何防御? 6.常见系统的默认路径 7.文件包含漏洞的奇技淫巧 LFI+日志文件gets

    2024年02月07日
    浏览(31)
  • 【Web安全】文件上传漏洞

    目录 1. 文件上传漏洞概述 1.1 FCKEditor文件上传漏洞 1.2 绕过文件上传检查功能 2. 功能还是漏洞 2.1 Apache文件解析 2.2 IIS文件解析 2.3 PHP CGI路径解析 2.4 利用上传文件钓鱼  3. 设计安全的文件上传功能 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了

    2024年02月08日
    浏览(50)
  • 渗透测试漏洞原理之---【任意文件读取漏洞】

    1、概述 一些网站的需求,可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过,就可以查看或下载任意文件。这些文件可以是源代码文件,配置文件,敏感文件等等。 任意文件读取会造成(敏感)信息泄露; 任意文件读取大多数情况是由

    2024年02月10日
    浏览(37)
  • Web安全漏洞介绍及防御-文件上传漏洞

    🐳博客主页:举杯同庆 – 生命不息,折腾不止 🌐订阅专栏:『Web安全』 📰如觉得博主文章写的不错,或对你有所帮助的话,请多多支持呀! 👉关注✨、点赞👍、收藏📂、评论。 话题讨论 中国经济周刊-2022-07-08 新闻 万豪国际集团证实了近期一起数据泄露事件,一个月

    2024年02月02日
    浏览(29)
  • 任意文件读取及漏洞复现

    一些网站的需求,可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过,就可以查看或下载任意文件。这些文件可以是源代码文件,配置文件,敏感文件等等。 任意文件读取会造成(敏感)信息泄露: 任意文件读取很多情况是由于其他漏

    2024年02月09日
    浏览(37)
  • 任意文件读取漏洞

    任意文件读取漏洞(Arbitrary File Read Vulnerability)是指攻击者可以通过web应用程序读取任意文件而不受访问控制限制的漏洞。这种漏洞可能导致敏感信息泄露、系统崩溃等问题。 攻击者可以利用任意文件读取漏洞访问服务器上的任意文件,包括密码文件、配置文件等,从而获取

    2024年02月15日
    浏览(35)
  • 任意文件读取与下载漏洞

    任意文件读取是属于文件操作漏洞的一种,一般任意文件读取漏洞可以读取配置信息甚至系统重要文件。其中的目录遍历是由于web服务器或者web应用程序对用户输入的文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过利用一些特殊字符就可以绕过服务器的安

    2023年04月09日
    浏览(32)
  • 任意文件读取和漏洞复现

    一些网站的需求,可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过,就可以查看或下载任意文件。这些文件可以是漂代码文件,配置文件,敏感文件等等。 任意文件读取会造成(敏感)信息泄露: 任意文件读取大多数情况是由于其他

    2024年02月09日
    浏览(32)
  • Web安全之文件上传漏洞详解

    文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致

    2024年02月13日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包