导语:本文将会为读者详细介绍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

1.png

创建密码文件。

现在,我们需要使用htpasswd命令来创建一个密码文件;Apache将使用该文件对用户进行身份验证,并使用/etc/apache2配置目录中的隐藏文件“.htpasswd”来存储密码。

sudo htpasswd -c /etc/apache2/.htpasswd raj
cat /etc/apache2/.htpasswd
gedit etc/apache2/sites-enabled/000-default.conf

1.png

在虚拟主机定义中完成访问控制的配置。

现在,我们需要将下面的配置保存在000-default.conf文件中。

<Directory "/var/www/html">
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Directory>

1.png

借助.htaccess文件进行访问控制。

打开Apache主配置文件,并通过.htaccess文件启用密码保护功能,然后,添加下面突出显示的各行内容。

sudo gedit /etc/apache2/apache2.conf
ServerName localhost

1.png

为了启用.htaccess规定的相应处理,我们需要将/var/www目录的配置块中AllowOverride指令行中的“None”改为“All”;然后,保存该文件,并重新启动apache服务。

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

1.png

接下来,需要将.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:已通过身份验证并获得访问权限的用户才能访问网站。

1.png

对密码身份验证功能进行确认。

尝试在Web浏览器中访问受限内容,以确认内容是否受到了相应的保护。实际上,这是系统将要求输入用户名和密码,具体如下所示:

1.png

如果您将尝试在不进行身份验证的情况下访问网站,则会返回401错误。

1.png

如果您是合法用户,并尝试使用有效凭据访问受密码保护的网站,例如,我们已经使用RAJ:123创建了一个帐户来访问Apache HTTP服务:

1.png

这样,就可以正常访问网站的内容了,具体如下所示。

 

1.png

HTTP身份验证的攻击方法

xHydra

这是一个通过FTP端口利用字典攻击来攻击系统的、带有图形用户界面的攻击工具,使用方法如下所示:

1.png

从kali中打开Xhydra程序,选择Single Target选项,并输入受害者机器的IP地址。为Protocol选项选择HTTP协议,并为Port选项指定80端口号。

现在,切换到“Passwords”选项卡,选择“Username List”,并在旁边的文本框中给出存放用户名的文本文件的路径。

1.png

然后,点选“Password List”,并在旁边的框中给出存放所有密码的文本文件的路径。

完成此操作后,转到“Start”选项卡,然后,单击左侧的“Start”按钮。

1.png

现在,字典攻击的过程将启动。这样,我们就可能得到受害者的用户名和密码。

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)。

1.png

Ncrack

Ncrack是一款高速网络身份验证破解工具。它可以通过主动测试所有主机和网络设备,来获取安全性不高的密码。

下面,请运行以下命令:

ncrack -U user.txt -P pass.txt http://192.168.0.105

其中:

-U:表示用户名列表的路径

-P:表示密码列表的路径

正如您可以看到那样,我们已成功获取HTTP用户名(raj)和密码(123)。

1.png

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)。

1.png

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

1.png

Burp Suite

现在,可以在这里直接输入一个随机值用于身份验证,以便通过burp suite获取相应的请求。为此,在向服务器发送请求之前,请打开burp suite,并点选proxy选项卡,然后,单击拦截选项,最后单击OK按钮,发送用户身份验证数据。

1.png

这样,发送的请求就会被Burp Suite捕获,具体如图所示。在该截图中,最后一行中的某些值进行了突出显示。从中可以看出,这里提供的身份验证的类型是基本身份验证,前面已经说过,它是经过base 64编码的。

下面,我们将利用Burp Suite来生成用于身份验证的编码值。单击action选项卡,选择send to intruder,以进行HTTP Fuzzing攻击。

1.png

现在,打开intruder框架并单击该位置。然后,配置payload的插入位置。其中,攻击类型决定了为该位置分配payload的方式。现在,为payload位置选择“the encoded value of authentication”,然后,单击框架左侧的“ADD”按钮。

1.png

其中,用于身份验证的base64编码值是用户名和密码的组合,就这里来说,就是借助用户密码字典生成相同的身份验证编码值。因此,我创建了一个字典,其中包含文本文件中的用户密码名称。

为了将字典用作payload,请单击intruder下的payload选项卡;现在,将加载包含payload选项中的用户密码名称的字典。

1.png

但我们希望在payload的编码值中发送请求。为了对payload进行编码,请单击payload processing下方的ADD按钮。

这时,将生成一个新对话框,我们可以在此选择编码选项;现在,我们选择用base 64对payload进行编码处理。

1.png

这将启动暴力攻击,并尝试匹配用于用户身份验证的字符串。在屏幕截图中,突出显示的status值“200 OK”和length值“11788”与相应列中其余值不同。这意味着,我们可以使用这个编码值绕过用户身份验证,这是从编号为5的请求开始的。现在,请检查字典第5行中的用户名和密码。利用这个字典,我发现可以利用raj:123通过身份验证。

此外,您也可以通过Burp Suite截获相关数据,使用这个编码处理后的Auth值来绕过Apache HTTP身份验证页面。

1.png

为此,请复制上面的auth值,通过粘贴替换掉截获的authorization,具体如下所示,然后转发访问受限内容的请求即可。

1.png

Booom!!! 如您所见,现在我们已经能够成功地访问该网站的内容了。

1.png

希望这篇文章对大家有所帮助。

源链接

Hacking more

...