一、回顾
通常,
入侵者通过Telnet登录被下了后门的
入侵者的系统,用文本命令交互达到目的;远程用
木马偷看屏幕等。这都是普遍的C/S模式(Client/Server,客户端/服务器)。
C/S模式要求
入侵者必须有一个客户端程序,例如系统自带的Telnet、
木马的Client端,这就意味着,
入侵者必须随时都有相应的客户端程序和辅助工具(例如NTLM),否则只能发愣了。
如果有种后门能用浏览器实现
入侵控制,我们将会轻松许多。
提起浏览器,每个人都不会陌生,Internet Explorer曾把我们带入网络世界,而现在,它把我们带入了后门控制的世界。
二、基于HTTP协议的控制
除了C/S模式,还有一种模式被称为B/S(Browser/Server,浏览器/服务器),由于浏览器无处不在,它无疑会成为后门控制的最佳应急选择。
实际上,B/S模式的核心依然是C/S模式,浏览器(Browser)充当一个客户端程序(Client)与服务器(Server)进行数据传输,基本上就是C/S模式,只是它提供了一种简便的交互界面,无需专用的Client连接。Server端在受害者的机器等待入侵者用Internet Explorer等浏览器来发送命令,并以HTML页面方式返回返回数据。
所以,要制作基于B/S模式的后门,前提是了解HTTP协议和基础的HTML制作,你不用学会制作复杂的表格,但是必须会最基本的表单提交,这是Browser与Server交互的方式。
可以用FrontPage、Dreamweaver等工具制作网页后提取相关HTML代码。
三、解析HTTP与页面交互
如果对HTTP和HTML一窍不通,制作B/S模式后门简直是天方夜谭。
§1.HTTP协议
HTTP协议(HyperText Transfer Protocol,超文本传输协议)使用TCP协议和明文字符传递数据,在这里我并不想详细介绍HTTP协议,大家可以自己看RFC文档。
一个完整的HTTP协议主要包括HTTP请求和HTTP回应。
§1.1 HTTP请求
一个基本的HTTP请求如下(<CR>代表换行符):
===================================================
GET /index.htm HTTP/1.0<CR>
Accept:*/*<CR>
User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)<CR>
Host:www.target.com<CR>
<CR>
<CR>
===================================================
HTTP请求可以粗略分为3个分段:
1.基本数据:GET /index.htm HTTP/1.0<CR>
表示用GET方法请求根目录的index.htm,使用 HTTP 1.0 的协议版本,用换行符表示结束。
用变量表达式可以看得仔细一些:
[提交方式] [目标文件+参数] [HTTP协议版本]<换行>
提交方式表示浏览器使用什么格式把数据传输给服务器,常见的有GET、POST、PUT等,GET是最普通的提交方式,它主要用于获取文件和传送简单的表单数据;POST主要用于表单提交,用POST提交的URL可以大于1024字节,这是GET做不到的;PUT一般只用于上传文件。
紧跟着提交方式的是目标文件名和参数,它是HTTP请求里重要的一部分,服务器通过读、写、执行指定的文件完成请求,这也是个容易惹事的部分,例如URL过长
攻击,就是在这部分内容使用了超过服务器处理的字符串使没有防护措施的程序出现异常。
HTTP协议版本在结尾处告诉服务器,客户端提交的HTTP版本。目前最通用的标准是HTTP/1.1。HTTP/1.1是在HTTP/1.0基础上的升级,增加了一些功能,全面兼容HTTP/1.0。其实我们只需知道,HTTP/1.0与HTTP/1.1相比最明显的差别是:HTTP/1.0不支持文件断点续传。
2.附加数据:Accept:*/*<CR>
User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)<CR>
Host:www.target.com<CR>
跟随在HTTP/1.0后一行开始的字符无论有多少,都只是一种附加数据,用于详细说明该次HTTP请求需要什么细节设置,一般比较重要的是Set-Cookie和Referer信息。
3.结束标志:<CR><CR>(两个换行符)
这是表示HTTP请求结尾的标志,服务器必须接收到至少2个换行符才会对这次的HTTP报文进行处理。
4.可用的部分
根据HTTP报文格式,按照理论我们可以从基本数据段和附加数据段去开发B/S,但是由于浏览器不能让我们自定义附加数据,所以实际上只有用基本数据来控制。
§1.2 HTTP回应
有请求必然会有回应,服务器不是人类,除非有防火墙封住嘴巴。
下面是一个基本的HTTP回应:
===================================================
HTTP/1.1 200 OK
Date: Sat, 21 Jun 2003 07:10:15 GMT
Server: Apache/1.3.27 (Unix) PHP/4.2.3
Last-Modified: Wed, 07 May 2003 09:40:56 GMT
Accept-Ranges: bytes
Content-Length: 1228
Connection: close
Content-Type: text/html
<HTML>
<HEAD>Hello World</HEAD>
………………
===================================================
同样套入变量表达式:
===================================================
[HTTP协议版本] [HTTP状态代码] [附加说明]
[附加数据]
[空白行]
[真正返回的数据]
===================================================
返回的数据用一个空行分离HTTP头部信息和数据段,头部信息用于客户端判断和控制,数据段就是我们获取的内容。
HTTP状态代码指出了此次HTTP传输的最终结果,通常用一个三位数表示。
表1.常见的HTTP状态代码含义
===================================================
200 成功返回数据
206 断点继传
400 错误请求
401 认证禁止
403 权限禁止
404 文件未找到
500 内部错误(例如CGI程序没有输出)
===================================================
附加说明大概是为了更保险一些吧,用英文把前面的特征代码表达出来,也许是为了兼容各种浏览器,这是RFC的定义,但是我们直接判断状态代码就可以。
附加数据主要提供了服务器类型、日期、返回的长度、Cookie设置信息、断点继传等,作用大着呢,例如国内某工具就用HTTP回应里的日期来决定是否继续让用户使用……不过这里并不是介绍制作下载工具,就此打住。
最后剩下的就是HTTP回应内容了,平时,我们看得最多的也就是这部分。回应内容可以是ASCII的,也可以是Binary的,浏览器主要通过HTTP头部的Content-Type段判断。