目录
4.7 使用Burp Sequencer 评估会话标识符的质量
4.1 用户名枚举
一、任务实现
几乎所有的应用程序都为用户提供了在忘记密码时恢复或重置密码的集道。当不存在用户名时,这些应用程序也能识别出来,这可以用来枚举出现有名称的列表:
1、从Kali Linux的浏览器打开WebGoan
( http://192.168.122.129/WebGoat/attack ),如果弹出登录对话框,则使用webgoat作为用户名和密码。
2、进入WebGoat后。转到Authentication Flaws | Forgot Password。如果提交任意用户名,而该用户在数据库中不存在,将收到一条消息,说该用户名无效:
3、然后可以假设,当提供了有效的用户名时,响应是不同的。要对此进行测试,请将请求发送Intruder模块。在 Bup的历史中,它应该是一个
http://192,168.56.11/WebGoatJattack?Screen=64&menu=500 的 POST请求。
4、进入Intruder模块,设置用户名作为唯一要破解的位置:
5、然后,转到 Payloads来设置将在攻击中使用的用户字典列表。保持默认类型为简单列表,然后单击Load按钮来加载
/ usrlsharc/wordlists/metasploit/htnp_dcfault_users.txn文件:
6、现在知道了用户不存在时的响应,可以使用 Burp告诉该消息何时出现在结果中。转到Options / Grep - Match 清除列表。
7、添加一个新的字符串来匹配 Not a valid uscrname:
8、现在,开始攻击。请注意,有一些名称(如admin),其中无效用户名的消息没有使用Burp Suite标记,这些名称在应用程序中是有效的;
二、原理剖析
如果我们正在测试一个需要用户名和密码才能执行操作的 web 应用程序我们需要寻找攻击者发现有效的用户名和密码的方法。在登录、注册和密码恢复页面中,对有效和无效用户的响应稍有不同,就会让我们找到一个有效信息。
分析对类似请求的响应差异是我们作为渗透测试人员需掌握的技能。我们可以使用 BurpSuite 等代理工具来记录原始请求,Intruder 块通过量(用户名)的的化多次重放该请求。Intruder 模块还允许我们自动搜索回包字符串并指示我们在哪个响应中找到该字符串。
4.2 使用Burp Suite对登录页面进行字典攻击
一、任务实现
将使用WackolPicko管理部分登录来测试此攻击:
1、首先,将 Burp Suite设置为浏览器的代理。
2、浏览到 http://192.168.122.129/WackoPicko/admin/index.php?page-login
3、将看到一个登录表单。尝试测试用户名和密码。
4、现在,在 Proxy的历史记录里查找刚刚通过登录尝试发出的POST请求,并将其发送给Intruder.
5、单击【Clear影】按钮,清除预先选择的插入位置
6、现在,通过突出显示参数的值并单击【Add6】按钮,将位置置于两个POST参数( adminname和 password)的值上-
7、由于密码列表针对所有用户,因此选择Cluster bomb作为攻击类型:
8、下一步是在Intruder中选择输入测试值。转到Payloads 选项卡。
9、在 Payloads Options [Simple list](选项[简单列表])部分的文本框中,添加以下名称:
User
john
admin
alice
bob
administrator
user
wackopicko
adam
sample
system
pass
password
10、现在。从 Payload Set框中选择列表2。此列表将是密码列表,将使用2017年最常用的25个密码进行此练习
11.开始攻击:可以看到所有响应似乎具有相同的长度,但是有一个admin /admin组合具有状态303(重定向)和次要长度。如果查它,可以看到它是重定向到管理员的主页:
二、原理剖析
至于结果,我们可以看到所有失败的登录尝试得到相同的响应,但是一个状态为 200(0K)在这种情况下长度为 813 个字节,因此我们假设成功的一个必须是不同的,在最小的长度(因为它必须重定向或将用户发送到他们的主页)。 如果发现成功和失败的请求长度相同,我们还可以检查状态代码或使用搜索框在响应中查找特定模式。
拓展
Kali Linux在/usr/share/wordlists 中包含一组非常有用的密码字典和单词列表。将在那里找到的一些文件如下:
rockyou.tar.gz:RockYou 网站于2010 年12月遭到黑客攻击,泄露了超过 1400万个密码此列表包含了这些密码。这些密码存档在此文件中,因此需要在使用之前将其解压缩:
tar -xzf rockyou.tar.gz
dnsmap.txt:包含常见的子域名,例如intranet、ftp或www,当暴力破坏DNS 服务器时它很有用。
/dirbuster/*:dirbuster 目录包含 Web 服务器中常见的文件名,使用 DirBuster或OWASPZAP的强制浏览时可以使用这些文件。
/wfuzz/:在这个目录中,我们可以找到一大堆用于网络攻和暴力破解文件的模糊字符
串。
/metasploit/*;此目录包含 Metasploit Framework 插件使用的所有默认词典。它包含带有多个服务、主机名、用户名、文件名等许多默认密码的字典。
4.3 Hydra强制进行暴力攻击
一、任务实现
在Kali Linuax VM存储用户名密码的字典目录中。执行以下操作:
1、打开终端运行 hydra。或者使用Kali Linux 应用程序中的 Applications 菜单━密码攻击在线攻击hydra.
2、不输入任何参数时将显示基本帮助信息:
在这里,可以看到一些有用的帮助信息。通过-L选项,可以使用用户名字典文件。-P允许使用密码字典。还需要在后面跟上://服务器,以及端口号和服务选项。
3、在终端中:写入以下命令发动攻击:
hydraL user_list.txt -P top25_passwords.txt u e ns http-got://192.1068.56. 11/wob0oat/
Hydra找到三个不同的用户名/密码组合,成功登陆到服务器。
Hydra 找到三个不同的用户名/密码组合,成功登陆到服务器。
二、原理剖析
与其身份验证方(例如身份,身在发送到容如何发送以及期望从服务器得到的响应方面是标准的。这允许攻击者和渗透测试人员节省宝贵的分析时间,这些工作涉及的参数包含用户名和密码、如何处理,发送这些参数以及如何区分成功响应和不成功响应。这是基本身份验证不被认为是安全机制的许多原因之一。
4.4 用Metasploit 爆破Tomcat密码
一、任务实现
也可以使用hydra或 burp来进行暴力破解攻击,但是使用不同的攻击可以防止出现非预期结果时不知所措,而且灵活的使用工具是每一个渗透测试人员都应该具有的素质。
1、靶机 VM_1有一个tomcan服务跑在8080 端口,浏览器访问http://192.168.122 .129: 8080/manager/html
2、可以看到弹出了一个认证界面要求输入账号密码。
3、打开终端,输入msfconsole 启动msf
4、容动后需要加载tomcan爆破模块,在 msf后输入
use auxiliary/seanner/h ttp/tomcat_mgr_login
5、可以用这个命令看看需要什么参数;
show options
6、现在可以设置目标主机 ip了!输入以下内容:
set rhosts 192.168.56.11
7、为了使运行速度快一点《不能太快! ),可以用这个命令设置线程;
set th re ads 5
8、为了不使服务器因为太大量请求而奔溃,破解速度降低一点;
set bruteforce_speed 3
9、其余参数使用默认值,设置完成后,输入run来启动攻击!
10、在一些失败结果后,发现了一个有效的密码!(绿色的结果)
二、原理剖析
默认情况下,tomcat服务会开启在8080端口,管理界面目录在/manager/html该应用使用基础http 认证。其中tomcat_mgr_login 模块有一些参需要了解:
BLANK PASSWORDS:为每一个账号提供一个空密码测试
PASSWORD:设置这个可以一密码多用户的方式进行测试
PASSFILE输入你想使用的密码字典路径
Proxies:为了避免被检测到源地址,可以使用这个代理功能
RHOSTS:填写要测试的主机(可以是多个,以空格分隔。也可以是一个清单文件)
RPORT:设置目标tomcat运行端口
STOPONSUCCESS:当破解成功后停止攻击
TARGERURI:管理界面的目录路径
USERNAME:定义要测试的用户名 (可以使单个,也可以是一个字典文件)
USERPASSFILE:使用“用户名/码”格式的字典文件
USERASPASS:尝试使用测试中的用户名作为密码
4.5 手动识别Cookie中的漏洞
一、任务实现
在学习之前建议先删除浏览器中所有存储的Cookie.
1、在浏苋器中,http://192.168.122.129/wackoPicko/
2、可以使用Cookies Manager来查看cookie中的值。只需要在浏览器右上角点击它的图标即可打开Cookie Manager
3、任选一个cookie,例如来自192.168.56.11的 PHPSESSID,双击它或者是选中后单击 Edit按钮。便可打开一个新的窗口用来编辑它内部存储的值。
PHPSESSID是所有基于PHP搭建的EB服务器的默认cookie名称。通过上面的实验可以发现,可以轻而易举地查看cookie的参数和值,因为Cookie是没有安全机制的,而且 Ht tp-Only并没有开启,所以这意味着该会话有很大的可能被劫持。
4.也可以使用浏览器的默认开发者工具来查看的修改 cookie的值
在图中选择了一个名为 sessioa 的cookie,通过Path可以看出它只对/wackoPicko/ admin/生效。与 PHPSESS1D一样,当关闭浏览器时它便会被销耍。它井没有开启 Ht tpOnly 级安全标志,所以它可以被任意编辑修改后发送恰服务器,造成会话劫持。
二、原理剖析
在这个小节中,我们仅仅检查了 Cookie 的配置,虽然这并不激动人心,但是在真实的渗透测试中 Cookie 的安全配置检查是必要的。就像我们之前所说,Cookie 的不正确配置会导致会话的劫持。
如果 Cookie 的 HttpOnly 并没有开启,那么使用脚本语言就可以查看它的值,也就是说如果此处存在 XSS 漏洞,那么攻击者可以使用该 Cokie 来充用户身份向服务器发起有害的请求。
4.6 会话固定攻击漏洞
一、任务实现
WebGost在会话固定方面的练习有些简单,但很有说明性。将用它来说明如何执行这一攻击:
1、在虚拟机Kali中,登录WebGoat从http://192.168.122.129/主页菜单登录或者http://192.168.122.129/WebGoat/attack 登录)。进入菜单中的Session Managcment FlawsSession Fixcat ion
2、正处于攻击的第一阶段。里面描述说是一个攻击者,试图发送钓鱼电子邮件给受害者,以强制使用选择的会话ID。用以下代码替换HTML代码中的href值(注意大写,因为康务暑区丹大小写):
/WebGoat/attack?Screen=56&menu=1800&SID=fixedsessionID这里最重要的部分是SID参数,它包含一个由攻击者控制的会话值
3、单击 Send Mail进入第二阶段
4、在第二阶段,从受害者阅读恶意电子邮件的角度出发。如果你将鼠标放在指向Goat Hils Fimancial"的链接上,你会注意到目标URL包含设置为攻击者的SID值
5、点击链按进入第三阶段-
6、现在受害者已经使用所提供的登录凭据。登录到了登录界面。注意地址栏中的SID 值仍然是设置的值:
7、现在是第4阶段。回到了攻击者的视角,有个链接指向Goat Hills Financial.点击它进入到登录页面。
8、注意地址栏现在有了不同的SID值。如果不经过验证就去登录页面会发生这样的事。使用浏览器的开发者工具,查找并更改登录表单的action参数,使其具有针对受害者建立的会话值:
9、当 SID值更改时,单击Login。没有必要设置任何用户名或密码,因为字段没有被验证
通过更改提交时登录表单使用的SID 参数,来歇骗服务器认为请求来自一个有效的、现有的会话。
二、原理剖析
在这个小节中,我们通过向受害者发送包含恶意链接的电子邮件,其中涉及了社会工程学。这个链接利用了一个会话固定攻击漏洞,攻击者已经提前就发现了这个漏洞,当受害用户登录到应用程序时,它保攻击者提供的会话 ID并将其链接到用户这使击者能够在应用程序中操作自己的参数来复制相同的ID,从而劫持有效用户的会话。
4.7 使用Burp Sequencer 评估会话标识符的质量
一、任务实现
将开始分析RailsGoat的会话cookic .可以使用任何PHPSESSID 或JSESSIONIDcoakie,但将利用这个作为自定义值来查看其他概念.将浏览器配置为使用 Burp Suite作为代理,然后按照以下步骤操作:
1、登录RailsGoat并查看代理的历史记录。以获取设置会话cookie的响应。你应该有标题Set-Cookie并且应该设置一个名为的cook ie_railsgoal_session
2、在这种情况下,这是对Irailsgoat/session的请求。”右键单击URL或请求或响应的正文。然后选择发送到 Sequencer :
3.在继续使用Sequencer之前,让看看会话cookie包含的内容。这个_r ailsgoat_session 的 cookie 值看起来像一个basec64编码的字符串,用两个连字符( - )连接到十六进制字符串。将在本文后面解释这个推论。选择 cookie的值,右键单击它,然后选择Send to Decoder .
4.进入"解码器(Decoder )"选项称,首先将其解码为URL,然后在第二行中将其解码为 base64 .
这个好像 base64代码包含三个字段:session_id。它是一个十六进制值,也许是一个哈希值,csrf_token,用于防止跨站请求伪造(CSRF)攻击的值,和user_id,似乎只是两个字符,可能是一个序号。cookic 的其余部分(。之后的部分)不是basc64编码的,并且看起来是随机哈希。现在。对会话ID有了更多的了解,并且已经学习了一些关于编码和Burp Suite 的解码器的知识。
5.让继续在Sequencer中的分析。转到 Burp Suite中的Sequencer选项卡,确保选择了正确的请求和cookiea
6.知道cookie是用base64 编码的,转到分析选项(Analysis options)""选项卡并在分析之前选择 Base64-dccode。这样,Burp Suite将分析cookie中的解码信息。
7.返回""实时捕获(Live capture)""选项卡,然后单击开始实时捕获。将出现一个新窗口。等持它完成。这需要一些时间.
8.完成后。单击""立即分析(Analyae now)""按钮。
可以看到cookic质量很好,这意味着攻击者不容易猜到。随意浏览所有结果选项卡。这是一个高质量的会话cookie的例子-
9.这次让来看一个不太好的会话cookic。登录WebGioat并进入会话管理缺陷。动持会话-
10.这个陈习是关于通过劫持有效的会话ID来烧过登录表单的。尝试使用任何随机的用户名和密码进行登录,只是为了将其记录在 Burp Suite中:
11.在这种情况下,设置会话cookie的请求是第一次加载练习的请求;在 Burp Suite 的历史中搜索Set-Cookie:WEAKID=响应头。这个ID仅仅是由连字符分隔的数字。
12.将请求发送到定序器
13.选择弱cookie 作为目标进行分析。
14.启动实时捕获并等待它完成并执行分析:
二、原理剖析
BurpSuite'sSequncer对大会(从我中供的信息)执不同的统计分析,以确定这些数据是否被随机生成,或者是否存在允许 att 的可测式Ass 生成有效ID并持会话
首先,我们分析了一个复杂的会话 cookie,该 cookie 由使用 base64 算法编码的数据结构和似乎是SHA-1哈希的数据结构组成。我们可以告第一部分是 base64 编的因为它含小写和大写字母数字,也可能包含加号(+)或斜杠 (/),它也以%3D 结尾,这是 URL转义 sequence==,base64中的字符审终止符。我们说cookie 的第二部分是 SHA-1哈,因为它是一个 40位的十六进制字符每个十六进制数字代表4位4位*40位= 160位SHA-1是的160列法然后,我们分析了一个弱生成的会话 ID。 很明显它是增量的,因为在十进制数字中,最右边位置的数字比最近的左手邻居更频繁地变化十倍。ID 的第二部分基于其长度和高有效数字表示 nix时间戳(https://en.wikipediaorg/wiki/Unix_time)。
4.8 不安全对象的直接引用
一、任务实现
对于本练习,我们最好知道两个用户的密码,尽管在真实场景中我们只知道攻击者的密码。配置浏览器,使用Burp Suite作为代理并执行以下操作:
1.以账户user登录并转到账户设置,点击个人资料图片(右上角)和账户设置:
请注意,在我们的示例中,URL表示users/?/account_settings。数字7有可能是用户ID吗?
⒉.注销并以账户attacker登录。
3、.再次转到账户设置,查看attacker的URL地址用户ID编号。4.在 Burp Suite中启用请求拦截。
4、然后返回浏览器中更改attacker的密码。设置新密码,确认,然后单击“提交”
5、让我们分析截获的请求:
我们看屏幕截图的下划线部分。首先,请求9.json文件,9是attacker账户设置的URL中的数字,因此作为用户ID。接下来,有一个user% 5Buser_id%5D参数(如果我们解码它,将得到
user[user_id])的值为9,然后是user%5Bemail%50参数(如果我们解码它,将得到user[email])的值是attacker的邮箱。最后两个参数是密码及其重复确认密码。(并不是一定是9)
6、那么,如果攻击者请求中对用户编号9的所有引用都未正确验证,该怎么办?让我们攻击受害者用户,其ID为7。(并不一定是7)
7、用户attacker进行密码更改并再次拦截请求。
8、更改请求,将URL和user_id参数中自己的ID更改为被攻击者的ID。
9、根据屏幕截图中带下划线的值(特别注意: user[user_id]的值要更改!),更改请求的剩余部分,或者根据自己的选择进行修改:
10、提交请求并验证它是否被接受( http响应代码200和正文中的消息成功)。12.注销并尝试使用原始密码作为被攻击者登录,登录将失败。
11、现在,尝试在attacker的请求中设置的密码,登录将成功。
12、转到账户设置并验证其他更改是否也发生了:
二、原理剖析
在本文中,我们首先检查了用户账户设置的 URL,并注意到 WEB 是通过数字D区分用户然后,我们执行了更改用户信息的请求并且验证了数字标识符。之后我们尝试替换用户的 ID,进行更改以影响其他用户,使用在同一求中提供的用户ID结发现 RasGoat 直接对象引用是包含用户信息的。这样作为攻击者,我们只需要知道被攻击者的 ID 就可以更改他们的信息,甚至是密码,这样我们就可以代表他们登录。
4.9 执行跨站请求伪造(CSRF)攻击
一、任务实现
准备
你们需要在Bodgelt中为此配置使用有效的用户帐户。我们将使用user@example.com作为受害者:
实战演练
我们首先需要分析我们想要强迫受害者提出的要求。为此,我们需要Burp Suite或浏览器中配置的其他代理:
1、以任何用户身份登录 Bodgelt,然后单击用户名转到配置文件
2、进行密码更改,让我们看看代理中的请求是什么样的:
所以,这是一个POST 请求http:/192.168.56.11/bodgeit/password.jsp 并且只有密码及其在正文中的确认。
3.让我们尝试创建一个非常简单的 HTML页面来复制这个请求。使用以下内容创建一个文件(我们将其命名为csrf-change-password.html) :
4、现在,在与登录会话相同的浏览器中加载此文件:
5、单击“提交”,将被重定向到用户的个人资料页面。密码已成功更新。
6、虽然这证明了这一点,但外部站点(或本例中的本地 HTML 页面)可以在应用程序上执行密码更改请求。用户仍然不太可能点击“提交”按钮。我们可以自动执行该操作并隐藏输入字段,以便隐藏恶意内容。让我们根据前一页创建一个新页面,我们称之为csrf-change-password-scripted.html:
7、如果我们在启动了Bodgelt 会话的同一浏览器中加载此页面,它将自动发送请求,之后将显示用户的个人资料页面。在下面的屏幕截图中,我们使用浏览器的调试器在请求发出之前设置断点
8、从攻击者的角度来看,这最后一次尝试看起来更好,我们只需要受害者加载页面,请求将自动发送,但受害者将看到密码已被更改消息,这肯定会引发警报。
9、我们可以通过在同一页面内的不可见框架中加载响应来进一步改进攻击页面。有很多方法可以做到这一点,快速而有效的是为框架设置尺寸0。我们的文件看起来像这样。
注意表单的target属性是如何在它下面定义的 iframe,并且这样的框架具有0%的高度和宽度。
10、在启动会话的浏览器中加载新页面。这个截图显示了使用浏览器的开发人员工具检查页面时的外观:
请注意,iframe对象在页面中只是一个黑线,在Inspector中,我们可以看到它包含Bodgelt用户的配置文件页面。
11、如果我们分析CSRF页面所进行的网络通信,我们可以看到它实际上要求更改BodgeIt密码:
二、原理剖析
当我们从浏览器发送请求并且已经存储了属于目标域的 cookie 时,浏览器会在发送之前将 cookie附加到请求中, 这就是使 cookie 像会话标符一样方便的原因,但这种 HTTP工作方式的特点也使它容易受到像我们在本文中看到的那样的攻击。
当我们在应用程序中有活动会话的同一浏览器中加载页面时,即使它是不同的选项卡或窗口,并且此页面向启动会话的域发出请求,浏览器将自动附加会话该请求的 cookie。 如果服务器没有验证它收到的请求实际上来自应用程序内部,通常是通过添加包含唯一的参数.对于每个请求或每次更改的令牌,它允许恶意站点代表访问此恶意站点的合法,活跃用户进行呼叫,同时对目标域进行身份验证。在 Web应用程序渗透测试中,我们使用的第一个代码,带有两个文本字段和提交按的代码可能足以证明存在安全漏洞。但是,如果应用程序的渗透测试是另一项参与的一部分,例如社会工程或红队练习,则需要做一些额外的努力来防止受害用户怀疑发生了某些事情。在本文中,我们使用JavaScript 通过在页面中设置onload 在中的 submit来自动发送请求。 我们还使用隐藏的 iframe 来加密码更改的响应,因此,受害者永远不会看到他/她的密码已更改的消息。