热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

中间人攻击之html注入

中间人攻击之html注入
0×00 序

很久之前写的文章,现在拿出来分享。事先声明本人是一枚爱捣鼓的小菜,所以对泄漏资料的分析难免会有疏忽或着错误,望各位围观的大侠手下留情。

今年7月5日晚,一家意大利软件厂商被攻击,其掌握的387.05GB漏洞(包括0day)数据泄露出来,由此可能引发的动荡,引起了业界一片哗然。因为所有文件加起来的大小整整有387.05GB,光下载就得好久好久。在这里我提供一个完整版的百度网盘下载地址,有兴趣的同学可以直接去下载:http://yun.baidu.com/s/1jG8fOxS 。据说之所以这么大是因为里面有很多的邮件。但你不用担心你的小水管,有好人整理了一个只有1.3G的精华版。在这里我也提供一个百度网盘下载地址:http://yun.baidu.com/s/1eQDFm18 。在下载完完整版之前,我们就先拿精华版解解馋吧。

0×01 前言

这里的IPA不是Apple程序应用文件iPhoneApplication的缩写,而是Injection Proxy Appliance的缩写,Injection Proxy Appliance是Galileo Remote Control System(伽利略远程控制系统,简称RCS)的一部分,其主要作用是:

IPA是Hacking Team RCS系统用于攻击的安全设备,并且其中使用中间人攻击技术和streamline injection机制,它可以在不同的网络情况下透明地进行操作,无论是在局域网还是内部交换机上。IPA还可从监控的网络流量中检测HTTP连接,对其进行中间人攻击,主要有三种攻击方式:注入HTML、注入EXE和替换攻击。当监控的HTTP连接命中预先设置的规则时,IPA 将执行注入攻击。IPA 可以设置需要注入的用户(如IP地址),资源(如可执行文件)等规则。

其vector-ipa的源代码在Hacked Team\rcs-dev\share\HOME\Fabio\archive\projects\pc\RCSRedirect文件夹中 ,其内容如图1。

图1 vector-ipa内容

通过源码发现,这是在Linux环境下使用Makefile文件对整个工程进行编译、连接等的C代码,并且还使用了openssl库。

0×02 攻击原理

基于HTTP/1.0协议的客户机和服务器信息交换的过程包括四个步骤:

(1)建立连接;(2)发送请求;(3)回送响应信息;(4)关闭连接。

IPA通过代理的模式监控的网络流量中检测HTTP连接,并劫持HTTP连接的Http Header,通过修改Http Header内容实现攻击,其攻击流程如图2。

图2 IPA进行http注入攻击流程

从图2中可知,其攻击的最主要的两个步骤就是 修改HTTP Request Header将木马写入HTTP Reply Header 。下面重点介绍一下这两步。

0×03 HTTP Request Header

1、将HTTP协议从1.1降到1.0以避免分块编码和其他问题

首先,HTTP/1.0和HTTP/1.1的其中一个区别就是:

(1)HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。如图3所示。

图3 HTTP/1.0连接

(2)HTTP 1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。如图4所示。

图4 HTTP/1.1连接

因为http注入不需要使用持久性连接,所以我们需要修改它为HTTP/1.0协议,这样做的话可以避免分块编码和其他一些问题。

2、强制使用纯编码,以避免任何类型的压缩

HTTP Header中Accept-Encoding是浏览器发给服务器,声明浏览器支持的编码类型的。

常见的有:

Accept-Encoding: compress, gzip //支持compress 和gzip类型Accept-Encoding:               //默认是identityAccept-Encoding: *             //支持所有类型 Accept-Encoding: compress;q=0.5, gzip;q=1.0//按顺序支持 gzip , compressAccept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0   //按顺序支持 gzip , identity

为了后面更好的修改HTTP Reply Header,需要将 Accept-Encoding 设置为 none ,这样可以避免任何类型的压缩,源码如图5所示。

图5 设置Accept-Encoding为none

3、不使用缓存(避免服务器返回304响应)

不使用缓存就是为了更好的得到新的文件,需要删除Cache 头域中的If-Modified-Since和If-None-Match,如图6所示。

图6 删除Cache头域中的If-Modified-Since和If-None-Match

If-Modified-Since

把客户端端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中。如图7所示。

图7 If-Modified-Since

If-None-Match

If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag。如图8所示。

图8 If-None-Match

4、关闭保持连接

我们都知道Connection: keep-alive和Connection: close的区别:

Connection: keep-alive

当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。

Connection: close

代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。

前面我们将HTTP协议从1.1降到1.0,为了HTTP Request Header中可能存在Connection: keep-alive而导致后面修改HTTP Reply Header时出问题。

这样我们就把HTTP Request Header修改完成了,接着就是向服务器发送请求啦~

0×04 木马文件

在前面我们把修改之后的HTTP Request Header发送到服务器,这样服务也返回了HTTP Reply Header响应。那接下来的这步也是最关键的一步,就是将木马写入HTTP Reply Header中。

1、读取木马文件内容

在这之前,我们需要对木马文件进行准备检测,如果不存在的话,则返回一个新的BIO。

图9 木马文件准备检测

从上面的木马文件准备检测可以发现,其中木马文件如图10所示。

图10 木马文件

注入的原理就是在HTTP Reply Header的标签中注入一段Javascript脚本。其Javascript脚本的内容如下:

    

从Javascript脚本中,发现脚本跳转到一个JwsUpdater.jnlp的文件。先普及一下什么是JNLP?

JNLP(Java Network Launching Protocol )是java提供的一种可以通过浏览器直接执行java应用程序的途径,它使你可以直接通过一个网页上的url连接打开一个java应用程序。Java桌面应用程序以JNLP 的方式发布,如果版本升级后,不需要再向所有用户发布版本,只需要更新服务器的版本,这就相当于让java应用程序有了web应用的优点。

使用jnlp文件就是为了能够通过浏览器打开一个网页上的URL连接来执行java木马应用程序。

       %SITE_HOSTNAME%                  %IPA_URL%/backdoor.exe 

其中,在标签中发现会把.jar文件下载到本地。而在application-desc设定参数的话,则会以安全的方式来执行jar文件中的com.sun.JwsInstaller.JwsUpdater类,自动加载服务器上的后门程序。

如果检测通过之后,就是将木马文件JwsUpdater.html的内容读取到html_to_inject中。

2、修改IPA_URL

在前面无论是JwsUpdater.html文件,还是JwsUpdater.jnlp文件都有一个“%IPA_URL%”。我需要把“%IPA_URL%”修改为工作服务器的地址。

3、设置搜索关键字和注入缓冲器

木马脚本、服务器网站都修改好,那么万事俱备只欠东风。对的,设置搜索关键字和注入缓冲器就是那阵东风。

先来了解一个结构体:

struct bio_inject_setup {   char *search;   char *inject;   size_t inject_len;};

其中,有三个成员,分别是搜索关键字(search)、注入木马脚本内容(inject)和注入木马脚本的长度(inject_len)。

前面也提到了,我们的木马内容是一段Javascript脚本,所以注入木马脚本之处就是html文件中标签内。

0×05 HTTP Reply Header

木马文件都准备好,那么接下来就是把木马文件写入到HTTP Reply Header中。分下面三个步骤:

1、将木马写入HTTP Reply Header

前面我们,设置搜索关键字和注入缓冲器。

在HTTP Reply Header搜索关键字,再把注入缓冲器的内容写入到HTTP Reply Header即可。如图11所示:

图11 将木马写入HTTP Reply Header

2、检查HTTP Reply Header是否gzip压缩

HTTP Reply Header必须采用纯编码,不能对其进行压缩。所以如果发现HTTP Reply Header有压缩的话,则停止攻击。

3、调整HTTP Reply Header的Content-Length属性

前面,在HTTP Reply Header中注入了木马脚本,所以HTTP Reply Header的长度肯定变化了,所以,我们需要调整HTTP Reply Header的Content-Length属性。

到这为止,就差最后一步,就是把HTTP Reply Header发送回客户端。这样就把木马程序种植到客户端。接下来就可以利用后门程序,做一系列的攻击。

*原创作者:LiukerTeam,本文属FreeBuf原创奖励计划文章,未经许可禁止转载

推荐阅读
  • gzip html php,Apache启用Gzip压缩的方法,压缩css、js、html等文件
    1、开启模块并添加配置项目a、linux服务器vietchttpdconfhttpd.conf本地服务器找到apacheconf文件夹下面httpd.confb、查找LoadMod ... [详细]
  • Splunk Enterprise 存在任意代码执行漏洞
    splunk,enterprise,存在,任 ... [详细]
  • HTML 5定稿了?背后还是那场闹剧
    HTML5虽然只是一个技术标准,但是眼下更多承载着颠覆苹果与谷歌移动生态的理想。我并不想单纯从技术角度谈论HTML5的现实处境,因为技术从来不会成为发展的绝对瓶颈,尤其是HTML5 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 利用ipv6技术,废旧笔记本变成server
    如果你家的路由器已经get到了ipv6地址,并且你家的电脑也获取了有效的ipv6地址,在广域网的设备可以访问到。那恭喜你,再配合我这个dd ... [详细]
  • 本篇内容主要讲解“JavaScript在网页设计中的嵌入应用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小 ... [详细]
  • linux json 写sql注入,sql注入之json注入(php代码)
    环境phpstudyphp服务端代码security数据库中的users表中的username,password字段用户名adminJSON服务端代码大家实际测试中注 ... [详细]
  • docker整体了解
    Docker是一个基于LXC技术构建的容器引擎,基于Go语言开发,遵循Apache2.0协议开源Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移 ... [详细]
  • Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理,现在在企业中的使用率也是很广的。git是一个分布式的版本控制系统,不像以前的svn,svn是 ... [详细]
  • 域名前缀和后缀html,为什么域名前要加www前缀,www是什么意思?立金哥
    为什么域名前要加www前缀?MichaelFLiu号召大家把域名前面的www去掉,我深以为然。好域名都被瓜分光了,大家手里的域名都老长老长 ... [详细]
  • 在网站中经常需要进行在线人数的统计。过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加1,然后当用户点击退出按钮退出系统的时候计数器减1。这种处理方式存在一些 ... [详细]
  • 导读:今天编程笔记来给各位分享关于php变量命名规范是什么的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: ... [详细]
  • 微信小程序发布引起轰动
    首页资讯人物态度新闻段子知识产品公司活动专题黑镜物是No!登录为什么微信深夜发布的“小程序”引动了开发者的大地震?盛威12小时前新闻传说中的微信“应用号”终于要来了& ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
author-avatar
咪咪的小天地计_395
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有