第七章-漏洞利用

第七章-漏洞利用

7.1渗透前的准备

需要确认的信息:

  • 目标环境
    譬如CMS是否开源(开源意味着可以使用白盒测试,否则只能黑盒测试)、
    Web服务类型,SNS、blog、电商、微博,及B/S架构的譬如Wiki、Trac、办公系统、安全平台等。
    还需考虑Web服务是否部署了WAF、如何绕过等。

  • 目标用户
    譬如CMS管理员、客服、普通用户、黑客/安全人员等,可综合利用社工等。

  • 预期效果
    明确每一阶段的效果,如获取Cookies、添加一篇文章、传播网马、盗取密码、破坏数据等。

7.2 偷取隐私数据

7.2.1. XSS探针

XSSprobe:https://github.com/evilcos/xssprobe

通过此工具可以获取目标页面的通用数据。
如:browser、ua(user-agent)、lang(language)、referer、location、toplocation(父类location)、Cookie、domain(目标页面域名)、title、screen(屏幕分辨率)、flash(flash插件版本信息).

7.2.2.Referer威胁

1.可能泄露token
2.可能邪路sid

保护措施:

  • 若当前页面不存在任何第三方域的链接,可以不用担心Referer泄露隐私的风险。否则,改进网站的一些安全性架构,不在URL中直接带上隐私数据;要么,点击第三方链接进行中间跳转,跳转至可信第三方域。

  • rel = "noreferrer"属性,可以让请求不带Referer。目前仅chrome支持(WebKit内核)。趋势

<a href="http://www.foo.com/" rel="noreferrer">noreferrer!</a>

7.2.3.浏览器记住的明文密码

可以通过dom操作获取。

问了一下做java ee的实验室老哥他们的记住密码机制是用token发到服务端从nosql里读取。
有价值

7.2.4.键盘记录

用处不大,不如劫持表单方便,如onchange、onblur、onclick等。
且仅能在全英文输入(ASCII)情况下使用,存在中文输入框时,记录不了击键事件。
若想做完美,需融入表单项等事件的监听机制。

7.2.5.偷取黑客、安全人员隐私

绕过noscript插件,可通过网站“私信模块”。

7.3 内网浅渗透

主要是Web层面(主要是JavaScript)内网渗透。

7.3.1.获取内网IP

内网IP 有一比较好方式---Java Applet,但需要JRE支持。

MyAddress.class是Java Applet文件,功能就是通过Java获取内网地址,然后调用上层的JavaScript函数MyAddress,将获得的IP显示出来。

7.3.2.获取内网IP端口

可通过跨域AJAX技巧或Web Socket方法实现IP端口获取。
Image对象请求时,得到资源(非法)就onerror,否则timeout.

var m=new Image();
m.onerror = function(){
    if(!m)return;
    m = undefined; alter("open");};
m.onload = m.onerror;
m.src='http://'+host+':'+port;
setTimeout(function(){
    if(!m)return;
    m = undefined; alert("close");
},900);
}

7.3.3.获取内网主机存活状态

原理:

  • IE下XDomainRequest跨域请求
    onerror-fail
    ontimeout-ok

  • 其他浏览器XMLHttpRequest跨域请求
    onreadystatechange - 根据时间差来判断,timeout则fail

  • 资源:
    http://ha.ckers.prg/weird/xhr-ping-sweep.html
    http://securethoughts.com/security/ie8xdr/ie8xdr-ping-sweep.html

  • 相较nmap

7.3.4.路由Web控制台操作

  • <img>简单CSRF修改各种配置,如:迅捷FW300R
    • 前提:目标的浏览器保存了Web控制台会话
    • 配置可远程访问
      • <img src =http://192.168.10.1/userRpm/ManageControlRpn.htm?port=80$ip=255.255.255.255&Save=%C8%B7+%B6%A8
      • 这是一段CSRF。将远程Web管理IP地址设置为255.255.255.255,即可攻击成功,可举一反三。
    • 修改无线密码、恢复出厂设置、修改转发规则等

7.3.5.内网脆弱Web应用控制

  • 主动:fuzzing内网可能存在的Web应用
    • window.onerror=function(){return true;};
    • inject
      ```html
      <script>
      <script src=http://intra/trac/chrome/tracwysiwyg/wysiwyg.js>
      <script>
      window.onload = function(){
      if(typeof(TracWysiwyg)=='funcion')alert('trac exist.');
      }</script></li>
      </ul></li>
      </ul>

      <pre class="line-numbers prism-highlight" data-start="1"><code class="language-null"><br /><br />- 被动:通过referer泄露内网Web应用信息

      - 这些内网应用可能有:
      - bbs/blog/trac/wiki/oa/mail/project/webim/web_vuls_vm
      - 有开源有闭源
      - 这些Web应用有不同种类的漏洞,如果是xss+sql:
      - xss inject攻击脚本
      - 攻击脚本AJAX请求SQL注入,得到想要的数据,返回。

      # 7.4 基于CSRF的攻击
      - 基于CSRF的SQL注入
      - 基于CSRF的命令执行
      - 基于CSRF的XSS攻击

      - 基于CSRF的攻击类似于“借刀杀人”。

      # 7.5 浏览器劫持
      劫持用户点击链接操作,打开新窗口的时候注入攻击者的JavaScript脚本,以达到将XSS威胁延续到同域内的其他页面。

      # 7.6 跨域操作
      浏览器相关缺陷导致的跨域,即使已修补,可举一反三。
      ### 7.6.1.IE res:协议跨域
      探测本地域是否存在目的软件
      P232 POC

      7.6.2. CSS String Injection跨域
      www.a.con/test.html代码:
      ```html
      <body>
      {}body{font-family:
      aaaaaaaaaaaa
      bbbbbbbbbbbbbb
      </body>

      攻击者页面:www.b.com/test2.html:

      <style>
      @import url("http://www.a.com/test.html");
      </style>
      <script>
      setTimeout(function(){
          var t = document.body.currentStyle.fontFamily;
          alert(t);
      },2000);
      </script>
      

      @import 导入外域CSS文件,本身正常行为。IE通过document.body.currenStyle.fontFamily方式访问目标样式的font-family属性,其值恰为font-family之后的所有内容。
      为CSS高容错性导致。

      7.6.3.浏览器特权区域风险

      浏览器为了支持更多方便的功能,往往需要一些特权区域存在,这些特权是相对浏览器的Internet域来说的,比如扩展、插件能够和本地系统打交道,一些功能页面也有和本地系统打交道的能力。
      - 如果我们的XSS能够跨到特权区域里,即可做更多更大权限的操作。
      此过程称之为Cross Zone Scripting或Cross Context Scripting(XCS)

      7.6.4.浏览器扩展风险

      浏览器为了丰富自身功能,允许第三方提供各类插件或扩展,但扩展权限如果没有控制好,就会带来很严重的后果。
      如chrome插件speed dial2 存在DOM XSS,通过这个XSS可以越权操作,导致各种严重的信息泄露问题。
      speed dial2 会将用户访问的链接信息储存在localstorage中,其中有一个关键字是_closed_tabs,这个关键字的值储存了最近关闭的链接信息,如url、title,其中title如果存在恶意脚本,就会触发DOM XSS。

      7.6.5.跨子域:document.domain技巧

      很多网站会把不同的子业务方放到不同的子域下,如:
      www.foo.com
      app.foo.com
      blog.foo.com
      message.foo.com
      但在这些子域下总会存在一个类似proxy.html的文件,文件内有如下代码:
      <script>document.domain="foo.com";</script>

      有一个合法的性质是,这个页面可以设置document.domain为当前子域或比当前子域更高级的域。一般顶级就到了根域,如果设置为其他域,浏览器就会报权限错误。

      可利用WebKit内核浏览器的一个缺陷(由sog 1发现),导致顶级域为域名后缀,如foo.com的域名后缀是com。

      • 此类问题在web2.0网站上几乎是常态,有的网站设置不通过proxy.html,而是在任意页面都嵌入公共的js文件,在这个js文件里设置document.domain为顶级域,这样的做法给XSS带来巨大便利,只要在任意子域下找到XSS漏洞,都能危害到目标页面。

      7.6.6.跨域索引

      1.利用UNC“跨域”

      通过Internet域(http协议)的代码,比如<iframe>标签利用file协议调用本地的XSS漏洞页面,并通过这个本地XSS执行任意的JavaScript代码,由于是file协议,所以权限会更大。
      IE可以通过UNC方式(“统一命名约定”地址用于确定保存在网络服务器上的文件位置)访问本地文件,如:
      file:////127.0.0.1
      由于是UNC方式,浏览器以为是Internet域,就允许访问,如此便触发了跨协议。如本地文件存在xss漏洞,则可以别调用触发。

      2.mhtml:协议跨域

      已修补,可自行搜索研究。

      7.7 XSS proxy技术

      用到了基于浏览器的远程控制。

      要实现远程控制,必须具备两个条件:
      - 远程指令要可以在目标浏览器上“实时执行”。
      - 执行结果要能够让控制端看到。

      7.7.1.浏览器script>请求

      <script>内容可跨域,合法,请求到的数据必须是合法的JavaScript语法格式。
      请求回来的是JSON+CallBack函数这样的数据内容(这种跨域数据通信被称为JSONP)

      结合JavaScript的setInterval函数,间隔几秒向远控服务端指令接口请求数据,而服务端可以根据控制者的需求生成指令到中间存储文件中(如数据库、内存、文件系统等)由这个指令接口统一调度这些生成的指令。

      注入的脚本文件是一个服务端动态文件,也就是服务端指令接口,每次都会返回控制着生成的指令内容,如果没有指令,则返回空内容。

      缺陷:这个XSS Proxy模型大多数时间,被控浏览器发起的服务端指令接口请求都是无用功,因为很可能并没有指令内容,控制者不会每隔3秒发出一个指令。

      7.7.2.浏览器跨域AJAX请求

      也需要setInterval主动发起服务端指令接口请求。
      唯一的好处是,异步发起,更加安静。

      7.7.3.服务端WebSocket推送指令

      持久性的socket连接,在浏览器客户端通过JavaScript进行初始化连接后,就可以监听相关的事件和调用socket方法来对服务端的消息进行读写操作。

      这种连接可跨域,至少可以拿来做远控,客户端监听onmessage事件,就能及时响应来自服务端发送过来的指令。

      7.7.4. postMessage方式推送指令

      是客户端最直接的跨文档传输方法。一般用在iframe中父页与子页之间的客户端通信。

harmoc

发表评论

电子邮件地址不会被公开。 必填项已用*标注