总体思路
当我们发现一个Web应用的时候,我们可以从Web的各个层面发起信息搜集。比如Web目录,了解Web页面的后端语言,揭露后端文件的参数,揭露后端文件参数的可选值,爆破子域名、获取私有域名等。这些信息将帮助我们进一步渗透,有时候会起到关键作用。其实其核心点就是尽可能的发现多的Web应用程序,以及尽可能猜测出Web应用的功能。
Fuzzing Web目录
爆破网站的目录结构,这些目录结构当中可能包含一些我们意想不到的敏感信息。建议发现了就点进去看看。通常使用ffuf工具可以完成这项工作
Fuzzing 文件后缀名
爆破网站的后端文件类型。通常使用ffuf工具可以完成这项工作
识别隐藏的host
有时候,我们会发现有些域名是私有的,在公开的互联网我们无法直接访问到私有域名。这个时候我们需要探测私有域名背后的IP是什么。这迫使我们需要找到私有DNS服务器的IP地址。而私有DNS的服务器域名是有迹可循的,例如一个ydx.com,其通常会含有ns.ydx.com,dns.ydx.com等域名,这些域名在有可能是公开于互联网的。通常使用ffuf工具可以爆破到这些域名。然后我们可以借助dig或者nslookup等工具向DNS服务器提问,看是否能够返回隐藏域名的IP地址。或者对host参数进行爆破,以获取当前服务器端口所存在的其他域名。
Fuzzing 后端参数
扫描web的参数,可以帮助我们在没有API手册的情况下,攻击目标。参数是黑客可控的参数部分,也就是攻击的入口点,自然参数名则变得非常关键。
Fuzzing后端参数值
工具
fuff
fuff是非常好用的一款fuzzing工具
选项
参数 | 作用 |
-v | 详细输出fuzzing到地路径 |
-e | 指定fuzzing的文件后缀名 |
事例
目录爆破
ffuf -w /opt/useful/seclists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ
ffuf -w <字典目录> -u http://SERVER_IP:PORT/FUZZ
ffuf -w /opt/useful/seclists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ -u http://SERVER_IP:PORT/FUZZ
文件后缀爆破
ffuf -w /opt/useful/seclists/Discovery/Web-Content/web-extensions.txt:FUZZ -u http://SERVER_IP:PORT/blog/indexFUZZ
递归扫描
递归扫描是一种进阶的扫描方式,他会递归地进行扫描,我们可以指定递归深度。
ffuf -w /opt/useful/seclists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ -u http://SERVER_IP:PORT/FUZZ -recursion -recursion-depth 1 -e .php -v
扫描子域名
在很多情况下,许多网站实际上会有一些不公开的子域名,并不会将它们发布在公共 DNS 记录中。因此,如果我们在浏览器中访问这些子域名,将无法连接,因为公共 DNS 并不知道它们的 IP。同样地,如果使用子域名爆破的方法,我们只能识别出公开的子域名,而无法识别任何不公开的子域名。
ffuf -w /opt/useful/seclists/Discovery/DNS/subdomains-top1million-5000.txt:FUZZ -u https://FUZZ.inlanefreight.com/
扫描隐藏子域名
扫描隐藏子域名有两种选择:
1.为/etc/hosts添加私有DNS服务器的位置,并将域名下的解析都映射到私有DNS服务器的IP。例如:
*.ydx.com <私有DNS服务器IP>
2.对HTTP请求头的host参数进行爆破。
原理:我们无法访问到隐藏子域名是因为公共DNS服务器没有正确的IP域名映射关系导致我们找不到对应的IP服务端口导致的。所以如果我们保持使用正确的IP域名映射就可以确保找到服务端口。在找到服务端口的同时,我们修改HTTP报文中host参数为新的域名服务映射,则可以成功让服务端口处理新的域名服务映射。如果新的域名服务映射存在,则会出现不同的返回报文,如果没有则会如普通的回应一样。通过这种方式,在服务端口来爆破VHost的情况。
ffuf -w /opt/useful/seclists/Discovery/DNS/subdomains-top1million-5000.txt:FUZZ -u http://academy.htb:PORT/ -H 'Host: FUZZ.academy.htb'
扫描后端参数 -GET
ffuf -w /opt/useful/seclists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ -u http://admin.academy.htb:PORT/admin/admin.php?FUZZ=key -fs xxx
扫描后端参数-POST
ffuf -w /opt/useful/seclists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ -u http://admin.academy.htb:PORT/admin/admin.php -X POST -d 'FUZZ=key' -H 'Content-Type: application/x-www-form-urlencoded' -fs xxx
扫描后端参数值
这里ffuf可以完成这个功能,但burp可能会更为灵活便捷
ffuf -w ids.txt:FUZZ -u http://admin.academy.htb:PORT/admin/admin.php -X POST -d 'id=FUZZ' -H 'Content-Type: application/x-www-form-urlencoded' -fs xxx
默认密码库
该库搜集了市面上很多http应用的默认密码
遗留问题
rest风格无法爆破文件后缀
但是现在URL的rest风格居多,我们迫切需要这种场景的解决方法。