导语:本文将会为读者详细介绍HTTP身份验证的渗透测试方法。
在本文中,我们将为读者介绍如何给Apache Web服务器配置密码保护功能,从而限制没有经过身份验证的联机访问者的访问权限,可以向未经身份验证的用户隐藏某些关键的信息;与此同时,我们还会介绍如何对该配置存在薄弱环节的系统进行渗透测试。
HTTP基本身份验证(HTTP Basic Authentication)简介
在HTTP事务上下文中,基本的访问权限认证方式,就是HTTP用户代理在发出请求时提供用户名和密码这种方法。
HTTP基本身份验证(BA)是对Web资源实施访问控制时最简单的一种方法,因为它无需借助于cookie、会话标识符或登录页;相反,HTTP基本身份验证只需使用HTTP头部中的标准字段,从而无需进行“握手”。
不过,BA机制并没有为传输的凭据提供机密性保护:在传输中,它们只是进行了相应的Base64编码,而没有进行任何加密处理或使用其哈希值。因此,我们最好将HTTPS与基本身份验证搭配使用。
有关更多详细信息,请参阅wikipedia.org
实验设置要求
· Apache服务器(Ubuntu14.04)
· 渗透测试试验机(Kali Linux)
· 设置密码身份验证
· 安装Apache实用工具包
首先,让我们通过下面的命令来安装一个名为“htpasswd”的Apache2实用程序包。实际上,htpasswd的作用就是创建和更新用于存储HTTP用户基本身份验证的用户名和密码的flat-file。
sudo apt-get install apache2 apache2-utils
创建密码文件。
现在,我们需要使用htpasswd命令来创建一个密码文件;Apache将使用该文件对用户进行身份验证,并使用/etc/apache2配置目录中的隐藏文件“.htpasswd”来存储密码。
sudo htpasswd -c /etc/apache2/.htpasswd raj cat /etc/apache2/.htpasswd gedit etc/apache2/sites-enabled/000-default.conf
在虚拟主机定义中完成访问控制的配置。
现在,我们需要将下面的配置保存在000-default.conf文件中。
<Directory "/var/www/html"> AuthType Basic AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd Require valid-user </Directory>
借助.htaccess文件进行访问控制。
打开Apache主配置文件,并通过.htaccess文件启用密码保护功能,然后,添加下面突出显示的各行内容。
sudo gedit /etc/apache2/apache2.conf ServerName localhost
为了启用.htaccess规定的相应处理,我们需要将/var/www目录的配置块中AllowOverride指令行中的“None”改为“All”;然后,保存该文件,并重新启动apache服务。
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
接下来,需要将.htaccess文件添加到需要限制访问的目录中。就本文来说,我希望限制对于整个网站的访问,所以,可以通过限制访问/var/www/html来实现这一目的,不过,读者可以将该文件放在自己希望限制访问的任意目录中:
sudo nano /var/www/html/.htaccess AuthType Basic AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd Require valid-user sudo service apache2 restart
在配置.htaccess文件时,我们相应的目录添加了一些选项。下面,让我们看看这些配置的含义。
AuthType Basic:为我们的网站设置基本身份验证。
AuthName“Restricted Contents”:在命令行中显示身份验证的名称。
authuserfile/etc/apache2/.htpasswd:显示身份验证文件的位置。
Require valid-user:已通过身份验证并获得访问权限的用户才能访问网站。
对密码身份验证功能进行确认。
尝试在Web浏览器中访问受限内容,以确认内容是否受到了相应的保护。实际上,这是系统将要求输入用户名和密码,具体如下所示:
如果您将尝试在不进行身份验证的情况下访问网站,则会返回401错误。
如果您是合法用户,并尝试使用有效凭据访问受密码保护的网站,例如,我们已经使用RAJ:123创建了一个帐户来访问Apache HTTP服务:
这样,就可以正常访问网站的内容了,具体如下所示。
HTTP身份验证的攻击方法
xHydra
这是一个通过FTP端口利用字典攻击来攻击系统的、带有图形用户界面的攻击工具,使用方法如下所示:
从kali中打开Xhydra程序,选择Single Target选项,并输入受害者机器的IP地址。为Protocol选项选择HTTP协议,并为Port选项指定80端口号。
现在,切换到“Passwords”选项卡,选择“Username List”,并在旁边的文本框中给出存放用户名的文本文件的路径。
然后,点选“Password List”,并在旁边的框中给出存放所有密码的文本文件的路径。
完成此操作后,转到“Start”选项卡,然后,单击左侧的“Start”按钮。
现在,字典攻击的过程将启动。这样,我们就可能得到受害者的用户名和密码。
Hydra
Hydra通常是完成这类攻击的首选工具。该工具能够对50多种协议执行快速的字典攻击,其中包括telnet、ftp、http、https、smb,以及多种数据库,等等。
现在,我们需要选择一个wordlist。与所有字典攻击一样,wordlist是非常关键的。不过,Kali为我们提供了许多的wordlist。
现在,请运行以下命令:
hydra -L user.txt -P pass.txt 192.168.0.105 http-get
-L:表示用户名列表的路径
-P:表示密码列表的路径
一旦命令开始执行,它就会展开字典攻击,因此,我们很快就能得到相应的用户名和密码。正如您可以看到的那样,我们已成功获取HTTP用户名(raj)和密码(123)。
Ncrack
Ncrack是一款高速网络身份验证破解工具。它可以通过主动测试所有主机和网络设备,来获取安全性不高的密码。
下面,请运行以下命令:
ncrack -U user.txt -P pass.txt http://192.168.0.105
其中:
-U:表示用户名列表的路径
-P:表示密码列表的路径
正如您可以看到那样,我们已成功获取HTTP用户名(raj)和密码(123)。
Medusa
Medusa是一个高速、大规模并行、模块化的登录凭证暴力破解工具。它可以支持许多协议,例如AFP、CVS、FTP、HTTP、IMAP、rlogin、SSH、Subversion以及VNC,等等。
下面,请运行以下命令:
medusa -h 192.168.0.105 -U user.txt -P pass.txt -M http -f
其中:
-U:表示用户名列表的路径
-P:表示密码列表的路径
正如您可以看到那样,我们已成功获取HTTP用户名(raj)和密码(123)。
Metasploit
这个模块能够对HTTP服务身份验证进行暴力破解。使用时,请在Kali中打开msfconsole,然后键入下列命令:
use auxiliary/scanner/http/http_login msf auxiliary(scanner/http/http_login) > set user_file user.txt msf auxiliary(scanner/http/http_login) > set pass_file pass.txt msf auxiliary(scanner/http/http_login) > set rhosts 192.168.0.105 msf auxiliary(scanner/http/http_login) > set stop_on_success msf auxiliary(scanner/http/http_login) > exploit
Burp Suite
现在,可以在这里直接输入一个随机值用于身份验证,以便通过burp suite获取相应的请求。为此,在向服务器发送请求之前,请打开burp suite,并点选proxy选项卡,然后,单击拦截选项,最后单击OK按钮,发送用户身份验证数据。
这样,发送的请求就会被Burp Suite捕获,具体如图所示。在该截图中,最后一行中的某些值进行了突出显示。从中可以看出,这里提供的身份验证的类型是基本身份验证,前面已经说过,它是经过base 64编码的。
下面,我们将利用Burp Suite来生成用于身份验证的编码值。单击action选项卡,选择send to intruder,以进行HTTP Fuzzing攻击。
现在,打开intruder框架并单击该位置。然后,配置payload的插入位置。其中,攻击类型决定了为该位置分配payload的方式。现在,为payload位置选择“the encoded value of authentication”,然后,单击框架左侧的“ADD”按钮。
其中,用于身份验证的base64编码值是用户名和密码的组合,就这里来说,就是借助用户密码字典生成相同的身份验证编码值。因此,我创建了一个字典,其中包含文本文件中的用户密码名称。
为了将字典用作payload,请单击intruder下的payload选项卡;现在,将加载包含payload选项中的用户密码名称的字典。
但我们希望在payload的编码值中发送请求。为了对payload进行编码,请单击payload processing下方的ADD按钮。
这时,将生成一个新对话框,我们可以在此选择编码选项;现在,我们选择用base 64对payload进行编码处理。
这将启动暴力攻击,并尝试匹配用于用户身份验证的字符串。在屏幕截图中,突出显示的status值“200 OK”和length值“11788”与相应列中其余值不同。这意味着,我们可以使用这个编码值绕过用户身份验证,这是从编号为5的请求开始的。现在,请检查字典第5行中的用户名和密码。利用这个字典,我发现可以利用raj:123通过身份验证。
此外,您也可以通过Burp Suite截获相关数据,使用这个编码处理后的Auth值来绕过Apache HTTP身份验证页面。
为此,请复制上面的auth值,通过粘贴替换掉截获的authorization,具体如下所示,然后转发访问受限内容的请求即可。
Booom!!! 如您所见,现在我们已经能够成功地访问该网站的内容了。
希望这篇文章对大家有所帮助。