12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 371|回复: 0

从项目中看BypassUAC和BypassAMSI

[复制链接]

52

主题

52

帖子

114

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
114
发表于 2021-5-8 00:00:11 | 显示全部楼层 |阅读模式
一、概述
在一样平常渗透过程中,无论执行exe步调照旧执行ps1脚本,都可能会遇到UAC或AMSI的拦阻。本文将结合UACME和Dount项目介绍BypassUAC与BypassAMSI的方法。若有不足之处,请大家指出。


二、BypassUAC

BypassUAC自然绕不开UACME这个项目https://github.com/hfiref0x/UACME,项目里包含了很多不同种类的方法,其中Dll Hijack Registry key manipulationElevated COM interface这三种方法是项目中出现的较多且好用的对应23、33、41这三个方法号,下面就动态调试下UACME项目中的这几个方法,有坑的地方会加以阐明:
调试前要修改两步:
第一步:增加方法号参数:


第二步:global.h中解释掉KUMA_STUB



2.1调试Dll Hijack

可见23这个方法从Win7win10各版本都还没修复:

ucmInit()方法中得到方法号,背面也会获得第二个参数即需要执行的命令,默认是打开cmd:

然后进行进程伪装,就是根据PEB中的ProcessParameters来获取本身进程信息并修改为体系可信进程:

接着调用MethodsManagerCall()方法,该方法为重要功能调用的方法,参数为对应的方法号

经过一系列初始化后根据Method号在ucmMethodsDispatchTable结构体数组找到对应调用方法和所需资源:

元素结构体的定义,第一个为调用方法函数指针和第三个为所需资源号:

接着判断传入的方法号是否需要相应的资源,如果需要则加载并执行解密操作,我这里修改代码不要解密,直接加载,加密由于是为了让要加载的dll躲避查杀:

加载的dll内容:

这个dll是资源需要天生的,注意这里需要IDR_FUBUKI64dll,所以用Fububi项目天生,并存放在bin目次下,并修改名称:

接着根据UCM_API_DISPATCH_ENTRY结构体里的函数指针调用相应方法

23号调用的是MethodDism()

继续跟入ucmDismMethod(),先进行版本判断后,再跟入ucmxGenericAutoelevation()函数,在该方法中重要实现对FUBUKI64 dll的移动和改名

该函数内先调用supWriteBufferToFile()把读取到的资源开释到C:\Users\kent\AppData\Local\Temp\dismcore.dl! :

调用ucmMasqueradedMoveFileCOM()函数,该函数中用com接口{3AD05575-8857-4850-9277-11B85BDB8E09}提升权限提升后利用IFileOperation对象将其移动到C:\Windows\system32\

移动后用调用ucmMasqueradedRenameElementCOM()修改名字,该函数也是上移动的操作雷同:


上述对劫持的dll操作完后,开始执行相应的命令:

跟入ucmxDisemer(),函数中拼接好C:\Windows\system32\pkgmgr.exe要执行的步调和/ip /m:pe386 /quiet参数,传入supRunProcess2()调用:

构造SHELLEXECUTEINFO对象,传入ShellExecuteEx()调用:

背面会执行些清理方法,至此23号Dll Hijack方法分析结束。

2.2调试Registry key manipulation
可见33这个方法只支持win10,需要在win7利用可用用25方法号,方式是一样的。
  

该方法的原理就是:fodhelper.exe进程会启动时,会先查询HKCU\Classes\ms-settings\shell\open\command注册表中的数据,如果发现没数据,则查询HKCR\Classes\ms-settings\shell\open\command的数据 所以构造步调路径并写入注册表,那么fodhelper.exe启动时,相应的步调便启动。 修改调试的参数,运行,前面流程是一样的,直接跟入MethodsManagerCall()

33号方法没有相应的paylaod(DLL):

根据方法号进入到UCM_API_DISPATCH_ENTRY结构体中函数指针的具体方法:

构造完TargetApp(fodhelper.exe)payload (所要打开的步调C:\Windows\system32\cmd.exe) 传入并调用ucmShellRegModMethod (),先创建键{7E99FF98-7D66-40E8-A095-B6467768C28A}
再创建了command键:
然后设置SymbolicLinkValue 键值DATA便是要创建毗连的注册表名上面所创建的{7E99FF98-7D66-40E8-A095-B6467768C28A}




构造SHELLEXECUTEINFO结构体,传入ShellExecute()启动fodhelper.exe

背面清理相应的注册表键值。

2.3COM接口提升Elevated COM interface

41号方法基本覆盖全版本windows体系:

该漏洞的原理是利用COM接口提升对ICMLuaUtil接口进行提权,然后利用ShellExec()方法来执行命令。由于要通过CoCreateInstanceAsAdmin()创建COM类,体系会判断步调身份是否可信,若不可信则会触发弹窗,所以这里有两种方法去操作:
[size=10.5000pt]1、
做成DLL,利用rundll32去调用,或者注入到其他可信进程
[size=10.5000pt]2、 进程伪装,修改PEB中自身的进程信息为体系可信进程
UACME用了第二种方法,进程伪装在2.1中已提及,下面介绍COM接口的相关操作:由于该方法跟2.2一样是没有要加载的payload,所以直接运行后根据方法号进入到UCM_API_DISPATCH_ENTRY结构体中函数指针所对应的具体方法:

先初始化COM环境:

设置BIND_OPTS3,并以管理员权限{3E5FC7F9-9A51-4367-9063-A120244FBEC7}创建名称对象及获取COM对象

调用CMLuaUtil对象虚表中的ShellExec函数启动相应的进程:
  
对于COM接口提升这类BypassUAC,要满足两点条件
1、elevation属性TrueAuto ApprovalTrue先编译出UACME中自带的Yuubari步调,该步调能找出体系下可利用的步调及COM组件:

然后利用OleView .Net工具根据CLSID查看找到的接口信息:

2、COM组件中的接口存在可以命令执行的地方其中COM接口对应cmlua.dll的虚函数表就有ShellExec()

41号这个方法挺好使的,用来做C2launch来部署环境个人觉得很适合。  

三、BypassAMSI:
3.1AMSI简介
AMSIAntimalware Scan Interface), 即反恶意软件扫描接口Windows Server 2016和Win10上默认安装并启用,但安装有些杀软会被关掉,可通过接口来扫描文件,内存、数据,常用于检测ps脚本。
3.2BypassAMSI方式
网上看到如今能BypassAMSI重要有三种方法:
[size=10.5000pt]1、 修改相应的注册表。HKCU\Software\Microsoft\Windows Script\Settings\AmsiEnable的表项值置为0。关闭Windows Defender使体系自带的AMSI检测无效化。[size=10.5000pt]

[size=10.5000pt]2、 Dll劫持powershell步调powershell.exe执行目次放置一个伪造AMSI.dll从而实现DLL劫持
[size=10.5000pt]3、 InlineHook AMSI.dllDount是一个基于.Net的免杀混淆组件,
这里根据Dount项目介紹下三种方式来BypassAMSI,项目地址:https://github.com/TheWover/donut
[size=10.5000pt]1、 把原来amsi.dll中的AmsiScanString()AmsiScanBuffer()扫描函数替换,让其返回S_OK:替换成本身的函数AmsiScanStringStub()

AmsiScanStringStub()编码长度:

改变内存属性,把AmsiScanStringStub()覆盖到AmsiScanString():
  

2、修改其返回验证传递的AMSI上下文参数,使Signature值“AMSI”0x49534D41
  
但如今一旦出现AmsiScanBuffer()该字符串都有可能被Windows Defender查杀,所以就Egg Hunter这种方法,也是先加载别的不相关的函数,如DllCanUnloadNow()

然后再通过生存AmsiScanBuffer()24个字符:

最后调用FindAddress()从内存捞出AmsiScanBuffer()相应的地址:



完,谢谢大家观看。



参考链接:
https://modexp.wordpress.com/2019/06/03/disable-amsi-wldp-dotnet/
https://www.contextis.com/en/blog/amsi-bypass
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-4-17 03:15 , Processed in 0.093750 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表