渗透防火墙的Shellcode技术.pdf

渗透防火墙的Shellcode技术 作者:san@ 内容摘要 1. 远程shellcode 的几种实现方式 2. 复用当前连接技术的一些问题及优势 3. Win32平台的具体实现 4. Linux x86 平台的具体实现 5. AIX PowerPC平台的具体实现 6. 特别感谢 7. 参考文档 第2 页 实现方式简介 • 1. 远程shellcode 的几种实现方式 1.1 监听端口 • 1.1.1 监听新的端口 • 1.1.2 重新使用原端口 • 端口复用 • 重新绑定 1.2 反向连接 1.3 复用当前连接的SOCKET • 1.3.1 IIS 的ECB结构 • 1.3.2 getpeername • 1.3.3 fcntl设置socket状态 • 1.3.4 ioctl(Linux/Unix) 和ioctlsocket(W in32) • 1.3.5 使用OOB特性 • 1.3.6 Hook 系统的recv调用 第3 页 复用当前连接技术介绍 • 2. 复用当前连接技术的一些问题及优势 2.1 绑定shell • Unix下可以直接把SOCKET作为“/bin/sh”的输入输出句柄。 • 在W in32下,socket()函数隐式指定了重叠标志,它创建的 SOCKET 重叠套接字(overlapped socket) ,不能直接将 cmd.exe 的stdin、stdout 、stderr转向到套接字上,只能用管道 (pipe)来与cmd.exe 进程传输数据。winsock推荐使用重叠套接 字,所以实际使用尽可能用管道。 • WSASocket()创建的SOCKET默认是非重叠套接字,可以直接 将cmd.exe 的stdin、stdout 、stderr转向到套接字上。 第4 页 复用当前连接技术介绍 2.2 多线程环境搜索SOCKET -=-=-=-=-=- start sample code =-=-=-=-=-=-= s = WSASocket(2,1,...) bind(s,..) listen(s,...) s2 = accept(s,) -=-=-=-=-=- end sample code =-=-=-=-=-=- • 当s 处于accept状态时,任何对s操作的网络函数都会处于等待 状态,直到有连接建立。 • 先用WaitForSingleObjectEx处理句柄,当s 处于accept状态时 会返回WAIT_TIMEOUT,可用的句柄返回 WAIT_OBJECT_0 。然后再用ioctlsocket/recv处理判断是否当 前连接的socket。 第5 页 复用当前连接技术介绍 2.3 优势 • 复用当前连接的技术相对较隐蔽,而且对于W in32的用管道绑 定cmd.exe后,和服务器交互的数据可以用xor 的办法进行编 码,进一步躲避IDS的检测。 • 单单查找SOCKET 的shellcode可以写的相对比较短,在找到 SOCKET后,可以再继续接收一

文档评论(0)

1亿VIP精品文档

相关文档