Linux提权
总体流程
- whoami判断权限,直接root则不用提权(weblogic、tomcat、jboss)
- 根据系统版本查找漏洞,并利用对应漏洞的exp
- 翻目录,根据Linux敏感目录和第三方软件,查找对应的敏感文件
一、内核提权
1.使用流程
(1). 信息收集
命令 | 说明 |
---|---|
uname -a | 打印所有可用的系统信息 |
uname -r | 内核版本 |
uname -m | 查看系统内核架构 |
cat /proc/version | 内核信息 |
cat /etc/issue | 发行版本信息 |
whoami | 当前用户名 |
id | 当前用户信息 |
(2). 搜索相应exp
(3). 使用exp
2. 脏牛提权
- Linux Kernel >=2.6.22则可以使用脏牛提权
(1). 原理
(2). 流程
a. 手工上传
-
通过webshell连接目标服务器
-
查看服务器内核版本
内核版本大于2.6.22,可以使用脏牛提权
-
查找对应exp
-
上传exp
-
编译exp并进行使用
gcc -pthread dirty.c -o dirty -lcrypt
-
查看是否创建成功
-
登录该用户
-
使用完成后,销毁firefart密码文件,恢复root
成功消除firefart账户,恢复原样
b. msf模块
- 使用ubuntu靶机 https://download.vulnhub.com/lampiao/Lampiao.zip
- 前期准备:靶机、攻击机为kali
-
靶机、kali改为桥接模式之后,对该网段进行nmap扫描,进行主机发现,找到靶机ip
-
nmap扫描该ip,发现存在一端口,通过浏览器访问,到达一web页面
-
在该页面找寻线索,发现使用了Drupal的CMS,因为Drupal漏洞特别多,故考虑使用msf进行搜寻
-
在msf中,搜寻Drupal对应的漏洞
#在kali终端启动msf msfconsole #进入msf后,搜寻相应漏洞 search Drupal
-
这里使用编号=1的exp,设置需要监听的主机,并启动
use 1 set RHOSTS 192.168.243.55 #靶机ip set RPORT 1898 #靶机对应Drupal端口 run
-
查看系统内核版本
-
注意:需要在msf中使用
shell
指令提前进入交互模式,否则无法使用查看内核命令uname -r
-
-
退出shell,通过msf上传exp到靶机中
-
再次进入shell,对该exp进行编译(也可以提前在kali中编译好并上传)
g++ -Wall -pedantic -o2 -std=c++11 -pthread -o dcow dcow.cpp -lutil
-
获取交互式shell
- 先查看是否有python环境,如果没有,则使用其他获取交互式shell方法
whereis python
python -c 'import pty; pty.spawn("/bin/bash")'
-
执行编译的exp,显示成功
- 注意:通过该exp提权,无法恢复root用户密码!!!
./dcow
-
通过ssh,能够成功连接该服务器,并且权限为root
二、Suid提权
1. 原理
2. 权限设置
- suid作用于二进制可执行文件上,当执行这个程序时,会临时切换身份为文件所有者身份
(1). 字母法
chmod u+s [filename]
chmod u-s [filename]
- 在
root用户
权限的x
位置上,使用小写s
来代表suid权限,如果为大写S
,则代表属主没有x
权限,该suid权限无效
(2). 数字法
chmod 4755 [filename] #添加suid权限,在普通文件权限前添加数字‘4’
chmod 0755 [filename] #删除suid权限
3. 流程
(1). 常规
- 全程是以普通用户权限操作
-
通过命令查找具有suid权限的文件
find / -type f -perm /4000 -print 2>/dev/null
-
查看文件内容
-
通过反编译demo文件发现,该文件的 suid 操作通过 root 权限切换到其他用户。可通过伪造 su 命令,将恶意 su 文件或su文件所在目录添加到环境变量,篡改 su 的查找顺序,从而在执行 su 时运行自定义的 su 文件
r2 -A demo #启动Radare2,进入反编译模式 pdc @ main #生成类似于c语言的伪代码
-
-
上传一个su文件到/tmp目录,并赋予该文件可执行权限
echo "/bin/sh" > su chmod 777 su
-
将/tmp目录添加到环境变量中
-
尝试执行demo文件,成功提权
(2). find提权
-
查找find指令是否权限为suid
find /usr/bin -type f -name "find" -perm /4000
-
直接通过find指令,执行命令
find test -exec "whoami" \;
(3). 其他命令提权
- bash、less、more、man、Python、perl、ruby、lua、awk、tcpdump等
三、Mysql的UDF提权
- 只是与Windows所用的dll文件不同
1. 前提条件
- secure_file_priv=""
- 具有root权限,且myslq数据库以system权限运行
- 具有sql语句的执行权限
- 要导出到的目录具有可写权限
- 系统中的selinux处于关闭状态
2. 提权过程
- 查找插件库的路径 => 找到对应数据库操作系统的UDF库文件 => 将udf库文件转化为十六进制格式 => 在数据库中写入udf文件到mysql插件库目录 => 查看udf库所支持的函数 => 加载函数 => 执行