背景
许多的HTTP\HTTPS站点提供的文件下载服务并不允许wget访问,或者大文件之类的禁止wget访问,例如限制iso之类的格式,或者特定路径。或者有一些资源并不允许空ref访问,例如下载某些页面的图片。限制wget下载iso估计是总有无聊的人浪费带宽下载测速吧。
方法
以清华大学开源软件镜像站为例,此站点就禁止iso后缀通过包含wget字样的UA下载访问。
wget https://mirrors.tuna.tsinghua.edu.cn/centos/test.iso
--2023-08-05 12:10:58-- https://mirrors.tuna.tsinghua.edu.cn/centos/test.iso
Resolving mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 2402:f000:1:400::2, 101.6.15.130
Connecting to mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|2402:f000:1:400::2|:443... connected.
HTTP request sent, awaiting response... 403 Forbidden
2023-08-05 12:10:58 ERROR 403: Forbidden.
wget https://mirrors.tuna.tsinghua.edu.cn/centos/test.iso2
--2023-08-05 12:13:01-- https://mirrors.tuna.tsinghua.edu.cn/centos/test.iso2
Resolving mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 2402:f000:1:400::2, 101.6.15.130
Connecting to mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|2402:f000:1:400::2|:443... connected.
HTTP request sent, awaiting response... 404 Not Found
2023-08-05 12:13:01 ERROR 404: Not Found.
任意构造了一个test.iso,一个test.iso2的路径,前者返回403,后者返回404。说明http配置上,前者iso后缀,不假思索,没有访问硬盘,就直接返回了403,而后者文件后缀不在判断列表,找不到文件返回404。
wget https://mirrors.tuna.tsinghua.edu.cn/centos/filelist.gz -O file
--2023-08-05 12:15:19-- https://mirrors.tuna.tsinghua.edu.cn/centos/filelist.gz
Resolving mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 2402:f000:1:400::2, 101.6.15.130
Connecting to mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|2402:f000:1:400::2|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7657131 (7.3M) [application/octet-stream]
Saving to: ‘file’
100%[======================================>] 7,657,131 7.55MB/s in 1.0s
2023-08-05 12:15:20 (7.55 MB/s) - ‘file’ saved [7657131/7657131]
下载其他真实的文件,确定可用下载。
wget https://mirrors.tuna.tsinghua.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso -U 'firefox' -O c7mini.iso
以这个方式,就能够正常的从清华大学开源软件镜像站下载到镜像文件。其实添加-U ‘’,发送空的UA信息,不输出wget字样就不会被拦截。
从这里也能想到,虽然访问静态资源,客户端表面上没有提供任何信息,实际上还是发送了UA之类的信息的,而http服务器也会以设定的方式去处理这些信息,例如仅仅是保存,或者特定的匹配处理。因此某漏洞只需要构造特定的UA,就可以让哪怕是看起来完全安全的静态http服务器nginx被通过网络远程提权root。
wget --user-agnet="UA" --referer="refuri" 路径 -O 保存文件名
通过上面的例子,就可以自定义UA与ref信息,下载具有ref访问限制的资源。
如果某些网址还需要特定的cookies,例如你通过电脑登录后可以下载,但是希望直接通过服务器下载?
--load-cookies=cookie文件
从电脑浏览器导出当前下载的cookies,服务器就可以通过wget直接下载,不需要本地下载再上传了。