首页
社区
课程
招聘
[讨论]从磁碟机里逆向出来的Debug权限提权代码……
发表于: 2008-8-17 17:05 8511

[讨论]从磁碟机里逆向出来的Debug权限提权代码……

2008-8-17 17:05
8511
signed int __cdecl GetDebugDroit(LPCSTR lpName, int a2)
{
   HANDLE hSelf; // eax@1
   HANDLE hObject; // [sp+1Ch] [bp-4h]@1
  struct _LUID Luid; // [sp+14h] [bp-Ch]@2
  struct _TOKEN_PRIVILEGES NewState; // [sp+4h] [bp-1Ch]@4

    hSelf = GetCurrentProcess();
  if ( OpenProcessToken(
          hSelf,
          STANDARD_RIGHTS_READ|TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES,
          &hObject) )
   {
    if ( !LookupPrivilegeValueA(
             0,
             lpName,
             &Luid) )
      return 1;
     NewState.Privileges[0].Luid.LowPart = Luid.LowPart;
     NewState.Privileges[0].Luid.HighPart = Luid.HighPart;
     NewState.Privileges[0].Attributes = -(a2 != 0) & 2;
     NewState.PrivilegeCount = 1;
     AdjustTokenPrivileges(
       hObject,
       0,
       &NewState,
       0,
       0,
       0);
     CloseHandle(hObject);
   }
  return 0;
}

经测试提权后克成功结束Winlogon.exe
效果如下图……:


顺便说一句……代码需要整理整理……至于怎么整理是你的问题……其实直接调用也可以……不过需要一个参数……至于这个参数是什么,自己搜索MSDN,免得有心人直接用上就不好了…… 不过这个参数在MSDN里是定死的。好像只有两个值……只不过把他变了变……让它以字符指针传递就是了……

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 63
活跃值: (17)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
貌似直接F5出来
这代码到处都是
没什么好保留的

BOOL EnableDebugPrivilge(LPCSTR lpName, BOOL fEnable)
{
        HANDLE                                hObject;
        LUID                                Luid;
        TOKEN_PRIVILEGES        NewStatus;

        if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hObject))
                return FALSE;

        if (LookupPrivilegeValue(NULL, lpName, &Luid))
        {
                NewStatus.Privileges[0].Luid = Luid;
                NewStatus.PrivilegeCount = 1;
                NewStatus.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;

                AdjustTokenPrivileges(hObject, FALSE, &NewStatus, 0, 0, 0);
               
                CloseHandle(hObject);
                return TRUE;
        }
       
        return FALSE;
}
2008-8-17 17:20
0
雪    币: 424
活跃值: (1829)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
眼花,没看出啥特别之处,这段代码貌似已经满天飞很久了吧~~~
2008-8-17 17:21
0
雪    币: 424
活跃值: (1829)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
汗……比nevergone慢了00:01
2008-8-17 17:22
0
雪    币: 609
活跃值: (237)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
5
起码是自己找到的……比较有成就感……
2008-8-17 17:24
0
雪    币: 63
活跃值: (17)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6


LZ 去看windows核心编程呀
2008-8-17 17:26
0
雪    币: 609
活跃值: (237)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
7
谢谢提示~~
2008-8-17 17:30
0
雪    币: 66
活跃值: (16)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
结束winlogon需要SE_DEBUG?    小吃惊.
2008-8-17 17:35
0
雪    币: 609
活跃值: (237)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
9
没有SE_DEBUG能结束winlogon?Ring3哦~~
2008-8-17 17:37
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
要不要SE_DEBUG? 还没试过,结束系统进程好像要的
2008-8-17 18:30
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
11
LZ,你是火星人吗?
2008-8-17 19:11
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
12
;===============调整权限=====================
privilege        db        "SeShutdownPrivilege",0
AdjustToken proc
        local        hdlProcessHandle
        local        hdlTokenHandle
        local        @tp:TOKEN_PRIVILEGES
        local        lBufferNeeded
        local        @os:OSVERSIONINFO
                mov        @os.dwOSVersionInfoSize,sizeof OSVERSIONINFO
                invoke        GetVersionExA,addr @os
                cmp        @os.dwPlatformId,VER_PLATFORM_WIN32_NT
                jne        @F
                invoke        GetCurrentProcess
                mov        hdlProcessHandle,eax
                invoke        OpenProcessToken,hdlProcessHandle,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,addr hdlTokenHandle
                invoke        LookupPrivilegeValue,0,addr privilege,addr @tp.Privileges.Luid
                mov        @tp.PrivilegeCount,1
                mov        @tp.Privileges.Attributes,SE_PRIVILEGE_ENABLED
                invoke        AdjustTokenPrivileges,hdlTokenHandle,FALSE,addr @tp,sizeof TOKEN_PRIVILEGES,addr @tp,addr lBufferNeeded
@@:                ret
AdjustToken endp

// ps.也不知道哪里的了
2008-8-17 19:59
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
好科普的代码!!
2008-8-17 22:03
0
雪    币: 609
活跃值: (237)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
14
看来我真的需要去长长见识了……
2008-8-17 22:05
0
雪    币: 303
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
支持LZ.....
有好代码一起分享........
老鸟不在忽的东西但对我们这些菜鸟很有意...谢谢......
2008-8-17 22:45
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
16
来膜拜火星LZ的
2008-8-17 22:46
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
17
所以病毒的"技术含量"才会被吹到天上去

你说我当年做病毒分析的时候,天天看类似的代码,能不说病毒没技术含量吗?
2008-8-18 00:13
0
雪    币: 471
活跃值: (3988)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
18
AdjustTokenPrivileges真的很普遍了
2008-8-18 12:40
0
雪    币: 296
活跃值: (89)
能力值: ( LV15,RANK:340 )
在线值:
发帖
回帖
粉丝
19
这代码还真是有点年头了,至少也换个RtlAdjustPrivilege()。RtlAdjustPrivilege用起来方便,省事,比如这样
var
  RtnInt: Integer;
begin
  if (RtlAdjustPrivilege(SE_DEBUG_PRIVILEGE, TRUE, FALSE, @RtnInt) <> STATUS_SUCCESS) then
  begin
    MessageBoxW(0, 'RtlAdjustPrivilege() Error!', '', MB_OK);
  end;

实际也就 RtlAdjustPrivilege(SE_DEBUG_PRIVILEGE, TRUE, FALSE, @RtnInt) 一句搞定!
2008-8-18 21:18
0
游客
登录 | 注册 方可回帖
返回
//