一、目录扫描的定义
话说目录扫描,指的是对一个web服务器的目录结构进行扫描和搜索,从而获得服务器上的敏感文件、目录和数据。目录扫描是一种简单常用的信息收集技术,通常用于攻击性的目的,也可用于对自己服务器的漏洞测试和安全状态检查。通过目录扫描,黑客可以了解服务器上所安装的Web应用、获得需要的文件资源,或者发现文件上传漏洞等。
目录扫描的攻击步骤一般如下:
1、确定目标的ip地址
2、获得web应用的指纹
3、搜集网站的目录名
4、测试目录的可访问性
5、尝试找到web应用的漏洞
6、攻破应用突破检查
二、目录攻击的类型
1、基于URL扫描的攻击
这种扫描的原理主要是通过对页面进行枚举扫描获得信息。例如我们对www.baidu.com这样的主流网站进行url扫描,通常会发现一些隐藏目录和文件,如果您想要做更深入的渗透测试,您可以仔细探索这些目录和文件中所包含的内容,从中寻找网站漏洞。
//使用python,如下:
import urllib2
def openurl(xfile):
global opener
url = xfile
status = str(urllib2.urlopen(url, timeout=10).getcode())
print status+"|"+url
dsize = open("dicc.txt","rb")
baseurl = raw_input('Enter the base URL: ')
urllist = []
while True:
try:
x = dsize.next().replace("\n",'')
x = baseurl+'/'+x
urllist.append(x)
if len(urllist) == 30:
threads = []
for xfile in urllist:
t = Thread(target=openurl, args=(xfile,))
threads.append(t)
t.start()
for x in threads:
x.join()
urllist = []
except StopIteration:
break
2、基于文件名/目录名扫描的攻击
对于那些应用负责人经常使用的文件夹或文件名,例如“www”或“admin”,攻击者可能会尝试扫描这些常用的目录。此外,他们还会尝试使用系统默认的目录名称,例如“/usr”和“/etc”。
“弱目录”通常是指可以由公共工具轻松发现的目录,这些工具可以扫描延伸到互联网上的数千个网站,以如下形式列出:
/admin/
/bak/
/data/
/datas/
/db/
/include/
/inc/
/install/
/lib/
/log/
/model/
/pay/
/source/
/template/
/tmp/
/upload/
/web/editor/
/admin/adm/
/admin00/
/admincp/
/administ/
/Administrator/
/backup/
/config/
/css/
/data/
/editor/
/file/
/manage/
/manager/
/models/
/news/
/pic/
/plugins/
/public/
/skin/
/static/
/swf/
/User/
/UserCenter/
/UserData/
/yhk/
/a/adminc/
/a/admincp/
/a/manage/
/a/system/
/admin/
/adminlogin/
/cgi-bin/
/data/
/include/
/manage/
/manage1/
/template/
/sys/
/test/
/w3ctech/
/xmlrpc/
/xmlrpc.php/
//使用bash shell,如下:
file=config.txt
url=http://www.baidu.com
while read line
do
urlfin=$url/$line/
status=$(curl -I -m 10 -o /dev/null -s -w %{http_code} $urlfin)
echo $status "-" $urlfin
done < $file
三、目录扫描的常用工具
1、dirbuster
Dirbuster是一款Java程序,它对通过强制类型转换和暴力枚举两种方式来检测和识别用于攻击的Web服务器中的目录和文件。Dirbuster已经成为Kali Linux的标配之一。
它支持指纹识别、定制报告、与代理的通信等众多高级选项。你还可以定义一些黑名单,目录暴力枚举时将不访问这些目录。
在本机上安装好Java,然后在命令行输入java -jar dirbuster.jar,你会看到以下窗口:
2、Wfuzz
Wfuzz也是一款强大的Web应用程序扫描器,它使用Python编写,可以自定义Payload以及绕过它们的方法。
例如以下命令行代码将扫描http://www.example.com/URL的页面,并且使用Payload字典apple.txt中的字典:
wfuzz -w /path/to/payload/dict -u http://www.example.com/%FUZZ --hw 0 –hc 404,403
3、OWASP ZAP(Zed Attack Proxy)
ZAP是另一个来自OWASP的开源项目,是一款用于安全测试的集成式开发工具,它提供自动和手动的漏洞扫描方式。与很多工具不同的是,它还可以与Burp代码上交叉引用。此外,它还具有易于使用的点-and-click界面。
四、目录扫描的防御方法
1、目录权限的控制
可以使用is_dir()函数进行检查。当文件夹的访问控制仅限于知道该文件夹绝对路径、文件夹名称和访问凭据的人员时,可减少目录扫描攻击!因此,内部人员可以通过其他方式获得这些详细信息。
使用Apache Web服务器的情况下,您可以在配置文件的<Directory>段中设置访问权限。
2、使用隐藏文件夹来降低风险
尝试隐藏重要的文件和目录是一种受保护的安全技术。 将目录的名称更改为点(.)开头的名称,则可以隐藏它们以使其不可见
3、使用Web防火墙
使用Web防火墙可以阻止未经授权的访问,如SQL注入、XSS和CSRF等攻击向量。有几个重要的工具,如Web Application Firewall ModSecurity和Open Web Application Security Project(OWASP)。
4、保持Web应用程序安全更新
如果服务器上存在可利用目录扫描漏洞的应用程序,则可以利用该漏洞执行进一步的攻击。使用漏洞扫描器可以检测出存在漏洞的应用程序以便及时更新。
附:目录扫描代码示例
Python实现(使用 requests 库)
#!/usr/bin/env python
# coding=utf-8
import requests
ext_names = ['.php', '.asp', '.aspx', '.jsp', '.html', '.zip', '.rar']
def dir_scan(url):
try:
for ext_name in ext_names:
if not url.endswith("/"):
url += "/"
vuln_url = url + "xx" + ext_name
res = requests.get(vuln_url, timeout=10)
if res.status_code == 200 and "index of /" not in res.content.lower():
print "[+] Vulnerable dir found:", vuln_url
except Exception, e:
print "[-]", e
if __name__ == '__main__':
url = raw_input("Please input url:")
dir_scan(url)
Bash实现:
#!/usr/bin/env bash
ext_names=".php .asp .aspx .jsp .html .zip .rar"
read -p "Please input url:" url
for ext_name in $ext_names; do
if [[ $url != *\/* ]]; then url=$url/; fi
vuln_url=$url"xx"$ext_name
if curl $vuln_url --connect-timeout 10 &>/dev/null; then
if ! curl -I $vuln_url --connect-timeout 10 | grep 'HTTP/1.1 404 Not Found' &>/dev/null; then
echo "[+] Vulnerable dir found:$vuln_url"
fi
fi
done