Web 语言
PHP:许多函数都可能造成
file_get_contents()
file()
fopen()
fread()
fgets()
include()
require()
include_once()
require_once()
system()
exec()
highlight_file()
readfile()
fgetss()
parse_ini_file()
show_source()
file://
或 http://
)\x00
截断,对应 URL 编码是 %00
file://
或 http://
)../
相对路径来取上层档案file://
或 http://
)\x00
截断,对应 URL 编码是 %00
Python
os.path.join
的参数若有根目录,会直接将前面的路径覆盖,例如 join("/var/www/html", "/etc")
会得到 /etc
Java
file://
协定,若可以控制读取路径,便可能造成任意文件读取漏洞。Ruby
CVE-2018-3760
CVE-2019-5418
Node
CVE-2017-14849
Server 端
Nginx 错误配置
现代网页框架时常会将网页的进入点限缩在一个 static 或是 public 资料夹,因此部署时需要将网页服务器的根目录设置为此资料夹,而主要的程序码都在该资料夹之外,藉此降低泄漏原始码的可能性。
然而,设置网页服务器时,若未能正确设定,也可能导致攻击者能逃出该资料夹的限制。
例如:
location /public {
alias /var/www/html/laravel/;
}
若攻击者连上 /public../
,便相当於存取 /var/www/html/laravel/../
参考资料: https://www.acunetix.com/vulnerabilities/web/path-traversal-via-misconfigured-nginx-alias/
Database
MySQL 可以用 LOAD_FILE
函数读取档案内容,转为字串;又或者 LOAD DATA LOCAL INFILE
语法读取档案,将资料存於 Table。
参考资料:
软连结
软连结就如同 Windows 上的捷径,会纪录连结指向的真实路径,攻击者若有机会上传软连结,并可以存取该档案,便能够使软连结指向任意路径,达成任意文件读取。
FFmpeg
ffmpeg 是强大的开源影音转档工具,许多线上转档网页背後可能便是使用 ffmpeg,经由 ffmpeg 的漏洞可以达成任意文件读取。
Docker-API
Docker 使用者一般来说会使用指令 docker
来进行操作,但实际上他是 client-server 架构的应用程序,通常是使用 unix domain socket 沟通,但 docker server 也支援使用 http 的 API 进行操控。
当我们能够 SSRF 时,可以尝试使用 docker API,将 docker 外的文件复制到 container 中。
Client 端
浏览器/Flash XSS
MarkDown 语法解析器 XSS
MarkDown 的渲染引擎有机会支援 JavaScript,但又没有浏览器那麽健全的保护机制,从而能利用类似 XSS 的方式,将恶意 JS 植入,并藉此读取文件。
参考资料:https://www.bilibili.com/read/cv10661099
Linux
/etc
:Unix 及 Unix-like 作业系统中,用来存放各种设定档的目录,包括系统设定与应用程序设定,因此是文件漏洞读取的首要目标
/etc/passwd
:储存 user 资讯与 user工作目录的文件,可以得知系统有哪些 user、属於哪一个 group,此文件所有 user 皆可读,一般被用作是否有文件读取漏洞存在的基准
/etc/shadow
:Linux 系统保存 user 资讯 及 密码 hash 的文件(可能存在),只有 root 可读写、shadow group 可读,一般情况下,网页服务器无法读取此文件
/etc/apache2/*
:Apache 的配置文件,可以知道 Web 目录,服务 port 等
/etc/nginx/*
:是 Nginx 配置文件(nginx 功能与 apache 相似),可以知道 Web 目录,服务 port 等
/etc/apparmor(.d)/*
: Apparmor 配置文件,可以知道各种应用系统调用的白名单、黑名单。例如可以透过文件得知 MySQL 是否禁止系统调用、是否可以使用 user 自定义的 function 来执行系统命令
/etc/cron.d/*
或 /etc/crontab
: 里面放定时任务文件
/etc/environment
:是环境变量配置文件之一,可能存在大量目录资讯的泄漏,甚至出现 secret key 泄漏的情况
/etc/hostname
:表示主机名
/etc/hosts
:是主机名查询静态表,包含指定域名解析 IP 的成对资讯,通过这个文件可以探测网卡资讯和内网 IP 或域名
/etc/issue
:指明系统版本
/etc/mysql/*
:是 MySQL 配置文件
/etc/php/*
:是 PHP 配置文件
/proc
:通常储存着 process 动态运行的各种资讯,本质是一种虚拟目录,如果查看当前 process 的资讯,只需 /proc/self/
其他目录
/usr/local/nginx/conf
/var/log/*
: 放置系统日志的地方,也可尝试读取 /var/log/apache2/access.log
/var/www/html/
: Apache 默认的网页根目录/var/lib/php/sessions/
: user 的 session[已知家目录]/.bash_history
:可以看到历史执行命令[已知家目录]/.bashrc
:部分环境变数[已知家目录]/.ssh/*
/authorized_keys
/id_rsa(.pub|keystore)
:ssh 的公私钥/known_hosts
[已知家目录]/.viminfo
:vim 使用纪录Windows
C:\boot.ini
(查看系统版本)C:\Program Files\mysql\my.ini
(Mysql配置)C:\Program Files\mysql\data\mysql\user.MYD
(Mysql root)C:\Windows\System32\inetsrv\MetaBase.xml
(iis配置文件)C:\Windows\repair\sam
(储存系统初次安装的密码)C:\Windows\php.ini
(php配置信息)C:\Windows\my.ini
(Mysql配置信息)C:\Windows\win.ini
(Windows的基本系统配置文件)参考文章:https://www.bilibili.com/read/cv10661099
>>: 【在厨房想30天的演算法】Day 16 演算法 : 排序 sort III 希尔、摇晃、基数
有了建置 Image 的流程,和前後端分离的机制,接着我们就可以设定 CICD 的流水线来进行服务自...
编辑单一资料 如果用 Route::resource 建立 API 的话,编辑单一资料的路由会是 请...
Abstract 大家每天都是新的开始,都有24H小时给你规划,系统跟人类一样都是有自己的周期性计画...
第二个范例将以心血管疾病的Dataset进行说明如何执行training、tracking与serv...
前言 在 上一篇文章 中讲完了 Zettelkasten 笔记法,这篇文章来讲它的优化版本 - An...