| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3808 人关注过本帖
标题:一个汇编小程序暴露了微软一个小漏洞
取消只看楼主 加入收藏
tigerdown
Rank: 1
等 级:新手上路
帖 子:72
专家分:8
注 册:2017-8-21
结帖率:64.29%
收藏
已结贴  问题点数:20 回复次数:5 
一个汇编小程序暴露了微软一个小漏洞
这程序(源码会贴在后面)是对文件时间属性进行修改,用32位masm编辑后,分别在winxp和win8下运行测试。
1 在winxp下运行测试。
分别修改了三个文件(test, test2, test3)的时间,由于有些时间超出了系统展示时间的上下限,所以在文件夹中看不到,要打开文件属性查看,按常理文件的创建时间<访问和修改时间,其测试结果出乎意料之外,见图。

图片附件: 游客没有浏览图片的权限,请 登录注册


图片附件: 游客没有浏览图片的权限,请 登录注册



[此贴子已经被作者于2019-12-13 17:58编辑过]

搜索更多相关主题的帖子: 测试 汇编 时间 修改 文件 
2019-12-13 08:11
tigerdown
Rank: 1
等 级:新手上路
帖 子:72
专家分:8
注 册:2017-8-21
收藏
得分:0 
2.在win8下测试运行
想把文件的sample.txt创建修改为1981年,但其结果是28754年,系统没崩溃。

图片附件: 游客没有浏览图片的权限,请 登录注册
2019-12-13 08:25
tigerdown
Rank: 1
等 级:新手上路
帖 子:72
专家分:8
注 册:2017-8-21
收藏
得分:0 
3. 有兴趣的朋友可以用masm64对其编辑,看一看会有啥不同结果。

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;    File Property Change
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .386
        .model flat, stdcall
        option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include        windows.inc
include        user32.inc
includelib    user32.lib
include        kernel32.inc
includelib    kernel32.lib
include        comdlg32.inc
includelib    comdlg32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN    equ        1000
DLG_MAIN    equ        100
IDC_FILE    equ        101
IDC_BROWSE    equ        102
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IDC_ATTRIBUTE    equ        103
IDC_ATTRCHANGE    equ        104
IDC_FILETIME    equ        105
IDC_YEAR    equ        106
IDC_MONTH    equ        107
IDC_DAY        equ        108
IDC_HOUR    equ        109
IDC_MINUTE    equ        110
IDC_TIMECHANGE    equ        111
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .data?

hInstance    dd    ?
hWinMain    dd    ?
szFileName    db    MAX_PATH dup (?)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
FileAttr    dd    ?
FileTime    dd    ?
TimeSelection    dd    ?
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

        .const
szFileExt    db    'All File',0,'*.*',0,0
szErrOpenFile    db    'Cant open file!',0
szErrInfo    db    'Invalid Input!',0
szSuccees    db    'The Following File Properties has been changed:',0dh,0ah,'%s',0
szSucceesCap    db    'Note',0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;File Attributes selection
szText1        db    'Please make a selection',0
szText2        db    'FILE_ATTRIBUTE_NORMAL',0
szText3        db    'FILE_ATTRIBUTE_READONLY',0
szText4        db    'CreationTime',0
szText5        db    'LastAccessTime',0
szText6        db    'LastWriteTime',0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

        .code

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;********************************************************************
_AttributeChange    proc
            local    @hFile
            local    @szReadBufferAttr[512]:byte
        
;********************************************************************
; 打开文件
;********************************************************************

        .if    FileAttr==1
            invoke    SetFileAttributes, addr szFileName, FILE_ATTRIBUTE_NORMAL
        .elseif FileAttr==2
             invoke    SetFileAttributes, addr szFileName, FILE_ATTRIBUTE_READONLY
        .endif

;;;; 'GENERIC_WRITE' has to be set for writing file and change file time
;;;; 'GENERIC_READ' setting does not affect file to chnage attribute

        invoke    CreateFile,addr szFileName,GENERIC_READ,FILE_SHARE_WRITE,0,\
            OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
        .if    eax ==    INVALID_HANDLE_VALUE
            invoke    MessageBox,hWinMain,addr szErrOpenFile,NULL,MB_OK or MB_ICONEXCLAMATION
            ret
        .endif


        mov    @hFile,eax
        
        
        invoke    CloseHandle,@hFile
        invoke    wsprintf,addr @szReadBufferAttr,addr szSuccees,addr szFileName
        invoke    MessageBox,hWinMain,addr @szReadBufferAttr,addr szSucceesCap,MB_OK

        ret


_AttributeChange    endp

;********************************************************************
_TimeChange        proc
            local    @hFile
            local    @szReadBuffer[MAX_PATH]:byte
            local    @myFileTime
            local    @sysTime:SYSTEMTIME

;Set System Time
            invoke    GetDlgItemInt,hWinMain,IDC_YEAR,NULL,FALSE
            mov @sysTime.wYear, ax
            invoke    GetDlgItemInt,hWinMain,IDC_MONTH,NULL,FALSE
            mov @sysTime.wMonth, ax
            invoke    GetDlgItemInt,hWinMain,IDC_DAY,NULL,FALSE
            mov @sysTime.wDay, ax
            invoke    GetDlgItemInt,hWinMain,IDC_HOUR,NULL,FALSE
            mov @sysTime.wHour, ax
            invoke    GetDlgItemInt,hWinMain,IDC_MINUTE,NULL,FALSE
            mov @sysTime.wMinute, ax

            invoke SystemTimeToFileTime, addr @sysTime, addr @myFileTime
;check the error
            .if eax == 0
                invoke    MessageBox,hWinMain,addr szErrInfo,NULL,MB_OK or MB_ICONEXCLAMATION
                ret
            .endif

;********************************************************************
; 'GENERIC_WRITE' has to be set for writing file and changing file time
; 'GENERIC_READ' setting does not affect file to change its attributes
;********************************************************************
        invoke    CreateFile,addr szFileName,GENERIC_WRITE,FILE_SHARE_READ,0,\
            OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
        .if    eax ==    INVALID_HANDLE_VALUE
            invoke    MessageBox,hWinMain,addr szErrOpenFile,NULL,MB_OK or MB_ICONEXCLAMATION
            ret
        .endif
        mov    @hFile,eax
;-------------------------------------------------------------------------------------
        .if    FileTime==1
            invoke    SetFileTime, @hFile, addr @myFileTime, NULL, NULL
        .elseif    FileTime==2
            invoke    SetFileTime, @hFile, NULL, addr @myFileTime, NULL
        .elseif    FileTime==3
            invoke    SetFileTime, @hFile, NULL, NULL, addr @myFileTime
        .endif


        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;invoke    SetFileTime, @hFile, addr @myFileTime, NULL, NULL     
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        invoke    CloseHandle,@hFile
        invoke    wsprintf,addr @szReadBuffer,addr szSuccees,addr szFileName
        invoke    MessageBox,hWinMain,addr @szReadBuffer,addr szSucceesCap,MB_OK

        
        ret

_TimeChange        endp
;********************************************************************
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain    proc    uses ebx edi esi hWnd,wMsg,wParam,lParam
        local    @stOpenFileName:OPENFILENAME


        mov    eax,wMsg
        .if    eax ==    WM_CLOSE
            invoke    EndDialog,hWnd,NULL
;********************************************************************
        .elseif    eax ==    WM_INITDIALOG
            push    hWnd
            pop    hWinMain
            invoke    LoadIcon,hInstance,ICO_MAIN
            invoke    SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
            invoke    SendDlgItemMessage,hWnd,IDC_FILE,EM_SETLIMITTEXT,MAX_PATH,0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;********************************************************************
; 初始化组合框
;********************************************************************
;;;;File Attribute Selection
    invoke    SendDlgItemMessage,hWnd,IDC_ATTRIBUTE,CB_ADDSTRING,0,addr szText1
    invoke    SendDlgItemMessage,hWnd,IDC_ATTRIBUTE,CB_ADDSTRING,0,addr szText2
    invoke    SendDlgItemMessage,hWnd,IDC_ATTRIBUTE,CB_ADDSTRING,0,addr szText3
    invoke    SendDlgItemMessage,hWnd,IDC_ATTRIBUTE,CB_SETCURSEL,0,0

;;;;File Time Selection
    invoke    SendDlgItemMessage,hWnd,IDC_FILETIME,CB_ADDSTRING,0,addr szText1
    invoke    SendDlgItemMessage,hWnd,IDC_FILETIME,CB_ADDSTRING,0,addr szText4
    invoke    SendDlgItemMessage,hWnd,IDC_FILETIME,CB_ADDSTRING,0,addr szText5
    invoke    SendDlgItemMessage,hWnd,IDC_FILETIME,CB_ADDSTRING,0,addr szText6
    invoke    SendDlgItemMessage,hWnd,IDC_FILETIME,CB_SETCURSEL,0,0

;;;;Set Up Time Inputs Format
    invoke    SendDlgItemMessage,hWnd,IDC_YEAR,EM_LIMITTEXT,4,0
    invoke    SendDlgItemMessage,hWnd,IDC_MONTH,EM_LIMITTEXT,2,0
    invoke    SendDlgItemMessage,hWnd,IDC_DAY,EM_LIMITTEXT,2,0
    invoke    SendDlgItemMessage,hWnd,IDC_HOUR,EM_LIMITTEXT,2,0
    invoke    SendDlgItemMessage,hWnd,IDC_MINUTE,EM_LIMITTEXT,2,0

    mov FileAttr, 0        ;Set them to 0 if none is selected
    mov FileTime, 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;********************************************************************
        .elseif    eax ==    WM_COMMAND
            mov    eax,wParam
            .if    ax ==    IDC_BROWSE
;********************************************************************
                invoke    RtlZeroMemory,addr @stOpenFileName,sizeof OPENFILENAME
                mov    @stOpenFileName.lStructSize,SIZEOF @stOpenFileName
                mov    @stOpenFileName.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST
                push    hWinMain
                pop    @stOpenFileName.hwndOwner
                mov    @stOpenFileName.lpstrFilter,offset szFileExt
                mov    @stOpenFileName.lpstrFile,offset szFileName
                mov    @stOpenFileName.nMaxFile,MAX_PATH
                invoke    GetOpenFileName,addr @stOpenFileName
                .if    eax
                    invoke    SetDlgItemText,hWnd,IDC_FILE,addr szFileName
                .endif
;********************************************************************
            .elseif    ax ==    IDC_FILE
                invoke    GetDlgItemText,hWnd,IDC_FILE,addr szFileName,MAX_PATH
                mov    ebx,eax
                invoke    EnableWindow,eax,ebx
;********************************************************************
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;Set FileAttr=0 if none attribute is selected

            ;mov FileAttr, 0
            .elseif    ax ==    IDC_ATTRIBUTE
                shr    eax,16
               
               .if    ax ==    CBN_SELENDOK
                    invoke    SendDlgItemMessage,hWnd,IDC_ATTRIBUTE,CB_GETCURSEL,0,0
                ;;;;the return value is according to the selection
                .if    eax == 1
                    mov    ebx,eax
                    mov    FileAttr, 1
                .elseif    eax == 2   
                    mov    ebx,eax
                    mov    FileAttr, 2
                .else
                    mov FileAttr, 0
                .endif

              .endif
;--------------------------------------------------------------------
;;;;;;;;Set FileTime=0 if none time is selected

            ;mov FileTime, 0
            .elseif ax ==    IDC_FILETIME
                shr    eax, 16
               .if    ax ==    CBN_SELENDOK
                    invoke    SendDlgItemMessage,hWnd,IDC_FILETIME,CB_GETCURSEL,0,0
                    mov TimeSelection, 1
                .if    eax == 1
                    mov    ebx,eax
                    mov    FileTime, 1
                    
                .elseif    eax == 2   
                    mov    ebx,eax
                    mov    FileTime, 2
                    
                .elseif    eax == 3   
                    mov    ebx,eax
                    mov    FileTime, 3
                .else
                    mov FileTime, 0
                    
                .endif
               .endif
;*******************************************************************
            .elseif    ax ==    IDC_ATTRCHANGE
                shr    eax, 16
                .if FileAttr == 1 || FileAttr == 2
                    call    _AttributeChange
                .elseif FileAttr == 0
                    invoke    MessageBox,hWinMain,addr szErrInfo,NULL,MB_OK or MB_ICONEXCLAMATION
                .endif        
;********************************************************************
            .elseif    ax ==    IDC_TIMECHANGE
                shr    eax, 16
                .if FileTime == 1 || FileTime == 2 || FileTime == 3
                    call    _TimeChange
                .elseif FileTime == 0
                    invoke    MessageBox,hWinMain,addr szErrInfo,NULL,MB_OK or MB_ICONEXCLAMATION
                .endif   
;********************************************************************
            .elseif    ax ==    IDCANCEL
                invoke    EndDialog,hWnd,NULL
            .endif

;*********************************************************************
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;********************************************************************
        .else
            mov    eax,FALSE
            ret
        .endif
        mov    eax,TRUE
        ret

_ProcDlgMain    endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
        invoke    GetModuleHandle,NULL
        mov    hInstance,eax
        invoke    DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
        invoke    ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        end    start
2019-12-13 08:50
tigerdown
Rank: 1
等 级:新手上路
帖 子:72
专家分:8
注 册:2017-8-21
收藏
得分:0 
回复 4楼 Valenciax
Rc文件没贴出来,因为上面有个人logo,己懒得去改, Main.ico和mylogo请自己补一下

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include        <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define    ICO_MAIN        1000
#define IDB_1            1
#define    DLG_MAIN        100
#define IDC_FILE        101
#define IDC_BROWSE        102
#define IDC_ATTRIBUTE    103
#define IDC_ATTRCHANGE    104
#define IDC_FILETIME    105
#define IDC_YEAR        106
#define IDC_MONTH        107
#define IDC_DAY            108
#define IDC_HOUR        109
#define IDC_MINUTE        110
#define IDC_TIMECHANGE    111
#define IDC_BMP            112
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN    ICON        "Main.ico"
IDB_1        BITMAP        "MyLogo.bmp"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG 84, 79, 280, 300
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Changing File Properies"
FONT 10, "宋体"
{
;;;;;;;;;;;;;;;;;;;;;;;;;;;  x,  y,  w,  h
 GROUPBOX "Seach File", -1, 06, 14, 266, 50
 LTEXT "File Name", -1, 14, 24, 40, 12
 EDITTEXT IDC_FILE, 60, 24, 200, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
 PUSHBUTTON "Browse File", IDC_BROWSE, 180, 42, 70, 16
 GROUPBOX "Property Selection", -1, 06, 72, 266, 124
 LTEXT "File Attribute Set", -1, 14, 82, 80, 12
 COMBOBOX IDC_ATTRIBUTE, 100, 82, 160, 70, CBS_DROPDOWNLIST | WS_TABSTOP
 PUSHBUTTON "Change Attribute", IDC_ATTRCHANGE, 180, 100, 70, 16
 CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 12, 122, 254, 1
 LTEXT "File Time Set", -1, 14, 130, 80, 12
 COMBOBOX IDC_FILETIME, 100, 130, 160, 70, CBS_DROPDOWNLIST | WS_TABSTOP
 EDITTEXT IDC_YEAR, 14, 150, 56, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_NUMBER
// ES_NUMBER is for number input only
 LTEXT "Year:yyyy>1600", -1, 14, 160, 60, 12
 EDITTEXT IDC_MONTH, 80, 150, 36, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_NUMBER
 LTEXT "Month:mm", -1, 80, 160, 38, 12
 EDITTEXT IDC_DAY, 130, 150, 36, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_NUMBER
 LTEXT "Date:dd", -1, 130, 160, 40, 12
 EDITTEXT IDC_HOUR, 180, 150, 36, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_NUMBER
 LTEXT "Hour:hh", -1, 180, 160, 40, 12
 EDITTEXT IDC_MINUTE, 230, 150, 36, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_NUMBER
 LTEXT "Minute:mm", -1, 230, 160, 40, 12
 PUSHBUTTON "Change Time", IDC_TIMECHANGE, 180, 172, 70, 16
 CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 06, 204, 266, 1
 CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 06, 206, 266, 1
 PUSHBUTTON "Close Application", IDCANCEL, 70, 216, 140, 18
 CONTROL IDB_1, IDC_BMP, "Static", SS_BITMAP | WS_CHILD | WS_VISIBLE, 16, 250, 140, 15
}
2019-12-14 12:41
tigerdown
Rank: 1
等 级:新手上路
帖 子:72
专家分:8
注 册:2017-8-21
收藏
得分:0 
回复 6楼 Valenciax
版主的bat文件,我第一次看到,让我开眼了。
2019-12-14 19:52
tigerdown
Rank: 1
等 级:新手上路
帖 子:72
专家分:8
注 册:2017-8-21
收藏
得分:0 
如谁有测试过,烦请告诉一下结果,因为我想知道在不同系统,不同芯片,甚至不同指令集下,出来结果是啥样。
2019-12-16 13:14
快速回复:一个汇编小程序暴露了微软一个小漏洞
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020443 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved