• moonshell官网 > 渗透防火墙的Shellcode技术
  • 渗透防火墙的Shellcode技术

    免费下载 下载该文档 文档格式:PDF   更新时间:2004-09-02   下载次数:0   点击次数:1
    文档基本属性
    文档语言:
    文档格式:pdf
    文档作者:Regione Lombardia
    关键词:
    主题:
    备注:
    点击这里显示更多文档属性
    渗透防火墙的Shellcode技术
    作者:san@xfocus.org
    内容摘要
    – – – – – – – 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.1.2.1 端口复用 1.1.2.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(Win32) 1.3.5 使用OOB特性 1.3.6 Hook系统的recv调用 第3页
    复用当前连接技术介绍
    2. 复用当前连接技术的一些问题及优势
    – 2.1 绑定shell
    Unix下可以直接把SOCKET作为"/bin/sh"的输入输出句柄. 在Win32下,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 优势
    复用当前连接的技术相对较隐蔽,而且对于Win32的用管道绑 定cmd.exe后,和服务器交互的数据可以用xor的办法进行编 码,进一步躲避IDS的检测. 单单查找SOCKET的shellcode可以写的相对比较短,在找到 SOCKET后,可以再继续接收一段功能更复杂的shellcode到 缓冲区,然后跳入执行.对于该后续shellcode就没有任何字 符和长度的限制. 甚至接收一个dll文件,实现更复杂的功能.
    第6页
    Win32平台的具体实现
    3. Win32平台的具体实现
    – 3.1 端口复用具体实现
    端口复用shellcode要求服务重新绑定在0.0.0.0地址,而且不 能使用SO_EXCLUSIVEADDRUSE选项. 客户端攻击的时候需要把服务端的具体IP和端口写入shellcode 里面. Shellcode里执行: setsockopt(s, 0xFFFF, 4, &d, 4); bind(s, &sockaddr, 0x10); 用netstat -na在服务端查看可以看到同一个端口有0.0.0.0和具 体IP两个绑定着. 如果服务端在NAT环境里,可能会存在问题.
    第7页
    Win32平台的具体实现
    – 3.2 重新绑定原端口的实现
    CreateProcess()创建一个suspend模式的进程. GetThreadContext()来获得该线程的上下文结构和寄存器信 息. 用VirtualAllocEx()在该进程里分配内存. 把shellcode指令用WriteProcessMemory()来写入该进程刚才 分配的空间. SetThreadContext()把GetThreadContext()获得的EIP修改指 向VirtualAllocEx()分配的内存地址. ResumeThread()恢复suspend模式的进程. TerminateProcess(-1, 0)终止当前进程. 循环绑定原来端口.

    下一页

  • 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
  • 免费下载 PDF格式下载
  • 您可能感兴趣的
  • moonshell2.1下载  moonshell2.0  moonshell下载  moonshell2  moonshell怎么用  moonshell1.7b1  moonshell汉化版下载  moonshell2.10中文版  3ds用moonshell全屏