/* * @brief Get the UID of the current process/thread. * @param pRequest Pointer to the \c Request packet. * @returns Indication of success or failure. * @remark This is a helper function that does the grunt work * for getting the user details which is used in a few * other locations. */ DWORD populate_uid(Packet* pResponse) { DWORD dwResult; CHAR cbUsername[1024], cbUserOnly[512], cbDomainOnly[512]; BYTE tokenUserInfo[4096]; DWORD dwUserSize = sizeof(cbUserOnly), dwDomainSize = sizeof(cbDomainOnly); DWORD dwSidType = 0; memset(cbUsername, 0, sizeof(cbUsername)); memset(cbUserOnly, 0, sizeof(cbUserOnly)); memset(cbDomainOnly, 0, sizeof(cbDomainOnly)); do { if ((dwResult = get_user_token(tokenUserInfo, sizeof(tokenUserInfo))) != ERROR_SUCCESS) { break; } if (!LookupAccountSidA(NULL, ((TOKEN_USER*)tokenUserInfo)->User.Sid, cbUserOnly, &dwUserSize, cbDomainOnly, &dwDomainSize, (PSID_NAME_USE)&dwSidType)) { BREAK_ON_ERROR("[GETUID] Failed to lookup the account SID data"); } // Make full name in DOMAIN\USERNAME format _snprintf(cbUsername, 512, "%s\\%s", cbDomainOnly, cbUserOnly); cbUsername[511] = '\0'; packet_add_tlv_string(pResponse, TLV_TYPE_USER_NAME, cbUsername); dwResult = EXIT_SUCCESS; } while (0); return dwResult; }
void get_user_header(){ FILE *user_token_txt, *user_header_txt; char user_token[MAX_LEN]; char user_header[MAX_LEN]; user_token_txt = fopen("./user_token.txt", "r"); if (user_token_txt == NULL) { char username[50], password[50]; printf("Cannot find user_token.txt.\n"); printf("Getting user token now...\n"); printf("Enter username: "******"%s", username); printf("Enter password: "******"%s", password); get_user_token(username, password); user_token_txt = fopen("./user_token.txt", "r"); } fscanf(user_token_txt, "%s", user_token); fclose(user_token_txt); //format mutiple headers //first line: Authorization header //second line: Content-type header user_header_txt = fopen("./user_header.txt", "w"); fprintf(user_header_txt, "Authorization: Bearer %s\nContent-Type:application/json", user_token); fclose(user_header_txt); }
/* * @brief Get the SID of the current process/thread. * @param pRemote Pointer to the \c Remote instance. * @param pRequest Pointer to the \c Request packet. * @returns Indication of success or failure. */ DWORD request_sys_config_getsid(Remote* pRemote, Packet* pRequest) { DWORD dwResult; BYTE tokenUserInfo[4096]; LPSTR pSid = NULL; Packet *pResponse = packet_create_response(pRequest); do { dwResult = get_user_token(tokenUserInfo, sizeof(tokenUserInfo)); if (dwResult != ERROR_SUCCESS) { break; } if (!ConvertSidToStringSidA(((TOKEN_USER*)tokenUserInfo)->User.Sid, &pSid)) { BREAK_ON_ERROR("[GETSID] Unable to convert current SID to string"); } } while (0); if (pSid != NULL) { packet_add_tlv_string(pResponse, TLV_TYPE_SID, pSid); LocalFree(pSid); } packet_transmit_response(dwResult, pRemote, pResponse); return dwResult; }