Skip to content

Commit ebeda9a

Browse files
committed
Update dump-windows/ios/macos/androidapps, testing win32exe deployment
1 parent 45543b8 commit ebeda9a

File tree

1 file changed

+123
-9
lines changed

1 file changed

+123
-9
lines changed

graphpython.py

Lines changed: 123 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -158,10 +158,15 @@ def list_commands():
158158

159159
intune_exploit = [
160160
["Dump-DeviceManagementScripts", "Dump device management PowerShell scripts"],
161+
["Dump-WindowsApps", "Dump managed Windows OS applications (exe, msi, appx, msix, etc.)"],
162+
["Dump-iOSApps", "Dump managed iOS/iPadOS mobile applications"],
163+
["Dump-macOSApps", "Dump managed macOS applications"],
164+
["Dump-AndroidApps", "Dump managed Android mobile applications"],
161165
["Get-ScriptContent", "Get device management script content"],
162166
["Backdoor-Script", "Add malicious code to pre-existing device management script"],
163167
["Deploy-MaliciousScript", "Deploy new malicious device management PowerShell script (all devices)"],
164-
# Deploy-MaliciousWin32App - Deploy malicious exe/msi to managed devices
168+
# Deploy-MaliciousWin32Exe - Deploy malicious exe to managed devices
169+
# Deploy-MaliciousWin32MSI - Deploy malicious MSI to managed devices
165170
["Display-AVPolicyRules", "Display antivirus policy rules"],
166171
["Display-ASRPolicyRules", "Display Attack Surface Reduction (ASR) policy rules"],
167172
["Display-DiskEncryptionPolicyRules", "Display disk encryption policy rules"],
@@ -652,8 +657,8 @@ def main():
652657
"delete-user", "delete-group", "remove-groupmember", "delete-application", "delete-device", "wipe-device", "retire-device",
653658
"get-manageddevices", "get-userdevices", "get-caps", "get-devicecategories", "get-devicecompliancepolicies",
654659
"get-devicecompliancesummary", "get-deviceconfigurations", "get-deviceconfigurationpolicies", "get-deviceconfigurationpolicysettings",
655-
"get-deviceenrollmentconfigurations", "get-devicegrouppolicyconfigurations","update-userproperties",
656-
"get-devicegrouppolicydefinition", "dump-devicemanagementscripts", "get-scriptcontent", "find-privilegedapplications",
660+
"get-deviceenrollmentconfigurations", "get-devicegrouppolicyconfigurations","update-userproperties", "dump-windowsapps", "dump-iosapps", "dump-androidapps",
661+
"get-devicegrouppolicydefinition", "dump-devicemanagementscripts", "get-scriptcontent", "find-privilegedapplications", "dump-macosapps",
657662
"get-roledefinitions", "get-roleassignments", "display-avpolicyrules", "display-asrpolicyrules", "display-diskencryptionpolicyrules",
658663
"display-firewallrulepolicyrules", "display-lapsaccountprotectionpolicyrules", "display-usergroupaccountprotectionpolicyrules", "get-appserviceprincipal",
659664
"display-edrpolicyrules","add-exclusiongrouptopolicy", "deploy-maliciousscript", "reboot-device", "shutdown-device", "lock-device", "backdoor-script",
@@ -732,11 +737,11 @@ def main():
732737
"list-sharedonedrivefiles", "invoke-customquery", "invoke-search", "find-privilegedroleusers",
733738
"find-updatablegroups", "find-dynamicgroups","find-securitygroups", "locate-objectid", "update-userpassword", "add-applicationpassword",
734739
"add-usertap", "add-groupmember", "create-application", "create-newuser", "invite-guestuser",
735-
"assign-privilegedrole", "open-owamailboxinbrowser", "dump-owamailbox", "spoof-owaemailmessage",
740+
"assign-privilegedrole", "open-owamailboxinbrowser", "dump-owamailbox", "spoof-owaemailmessage", "dump-androidapps",
736741
"delete-user", "delete-group", "remove-groupmember", "delete-application", "delete-device", "wipe-device", "retire-device",
737-
"get-caps", "get-devicecategories", "display-devicecompliancepolicies", "get-devicecompliancesummary",
738-
"get-deviceconfigurations", "get-deviceconfigurationpolicies", "get-deviceconfigurationpolicysettings",
739-
"get-deviceenrollmentconfigurations", "get-devicegrouppolicyconfigurations", "grant-appadminconsent",
742+
"get-caps", "get-devicecategories", "display-devicecompliancepolicies", "get-devicecompliancesummary", "dump-macosapps",
743+
"get-deviceconfigurations", "get-deviceconfigurationpolicies", "get-deviceconfigurationpolicysettings", "dump-iosapps",
744+
"get-deviceenrollmentconfigurations", "get-devicegrouppolicyconfigurations", "grant-appadminconsent", "dump-windowsapps",
740745
"get-devicegrouppolicydefinition", "dump-devicemanagementscripts", "update-userproperties", "find-privilegedapplications",
741746
"get-scriptcontent", "get-roledefinitions", "get-roleassignments", "display-avpolicyrules","get-appserviceprincipal",
742747
"display-asrpolicyrules", "display-diskencryptionpolicyrules", "display-firewallrulepolicyrules", "backdoor-script",
@@ -4804,6 +4809,54 @@ def parse_permissionid(content):
48044809
graph_api_get(access_token, api_url, args)
48054810
print("=" * 80)
48064811

4812+
# dump-windowsapps
4813+
elif args.command and args.command.lower() == "dump-windowsapps":
4814+
print_yellow("\n[*] Dump-WindowsApps")
4815+
print("=" * 80)
4816+
api_url = "https://graph.microsoft.com/beta/deviceAppManagement/mobileApps?$filter=(isof(%27microsoft.graph.win32CatalogApp%27)%20or%20isof(%27microsoft.graph.windowsStoreApp%27)%20or%20isof(%27microsoft.graph.microsoftStoreForBusinessApp%27)%20or%20isof(%27microsoft.graph.officeSuiteApp%27)%20or%20(isof(%27microsoft.graph.win32LobApp%27)%20and%20not(isof(%27microsoft.graph.win32CatalogApp%27)))%20or%20isof(%27microsoft.graph.windowsMicrosoftEdgeApp%27)%20or%20isof(%27microsoft.graph.windowsPhone81AppX%27)%20or%20isof(%27microsoft.graph.windowsPhone81StoreApp%27)%20or%20isof(%27microsoft.graph.windowsPhoneXAP%27)%20or%20isof(%27microsoft.graph.windowsAppX%27)%20or%20isof(%27microsoft.graph.windowsMobileMSI%27)%20or%20isof(%27microsoft.graph.windowsUniversalAppX%27)%20or%20isof(%27microsoft.graph.webApp%27)%20or%20isof(%27microsoft.graph.windowsWebApp%27)%20or%20isof(%27microsoft.graph.winGetApp%27))%20and%20(microsoft.graph.managedApp/appAvailability%20eq%20null%20or%20microsoft.graph.managedApp/appAvailability%20eq%20%27lineOfBusiness%27%20or%20isAssigned%20eq%20true)&$orderby=displayName&"
4817+
4818+
if args.select:
4819+
api_url += "$select=" + args.select # some fields will 400 whole req
4820+
4821+
graph_api_get(access_token, api_url, args)
4822+
print("=" * 80)
4823+
4824+
# dump-iosapps
4825+
elif args.command and args.command.lower() == "dump-iosapps":
4826+
print_yellow("\n[*] Dump-iOSApps")
4827+
print("=" * 80)
4828+
api_url = "https://graph.microsoft.com/beta/deviceAppManagement/mobileApps?$filter=((isof(%27microsoft.graph.managedIOSStoreApp%27)%20and%20microsoft.graph.managedApp/appAvailability%20eq%20microsoft.graph.managedAppAvailability%27lineOfBusiness%27)%20or%20isof(%27microsoft.graph.iosLobApp%27)%20or%20isof(%27microsoft.graph.iosStoreApp%27)%20or%20isof(%27microsoft.graph.iosVppApp%27)%20or%20isof(%27microsoft.graph.managedIOSLobApp%27)%20or%20(isof(%27microsoft.graph.managedIOSStoreApp%27)%20and%20microsoft.graph.managedApp/appAvailability%20eq%20microsoft.graph.managedAppAvailability%27global%27)%20or%20isof(%27microsoft.graph.webApp%27)%20or%20isof(%27microsoft.graph.iOSiPadOSWebClip%27))%20and%20(microsoft.graph.managedApp/appAvailability%20eq%20null%20or%20microsoft.graph.managedApp/appAvailability%20eq%20%27lineOfBusiness%27%20or%20isAssigned%20eq%20true)&$orderby=displayName&"
4829+
4830+
if args.select:
4831+
api_url += "$select=" + args.select # some fields will 400 whole req
4832+
4833+
graph_api_get(access_token, api_url, args)
4834+
print("=" * 80)
4835+
4836+
# dump-macosapps
4837+
elif args.command and args.command.lower() == "dump-macosapps":
4838+
print_yellow("\n[*] Dump-macOSApps")
4839+
print("=" * 80)
4840+
api_url = "https://graph.microsoft.com/beta/deviceAppManagement/mobileApps?$filter=(isof(%27microsoft.graph.macOSDmgApp%27)%20or%20isof(%27microsoft.graph.macOSPkgApp%27)%20or%20isof(%27microsoft.graph.macOSLobApp%27)%20or%20isof(%27microsoft.graph.macOSMicrosoftEdgeApp%27)%20or%20isof(%27microsoft.graph.macOSMicrosoftDefenderApp%27)%20or%20isof(%27microsoft.graph.macOSOfficeSuiteApp%27)%20or%20isof(%27microsoft.graph.macOsVppApp%27)%20or%20isof(%27microsoft.graph.webApp%27)%20or%20isof(%27microsoft.graph.macOSWebClip%27))%20and%20(microsoft.graph.managedApp/appAvailability%20eq%20null%20or%20microsoft.graph.managedApp/appAvailability%20eq%20%27lineOfBusiness%27%20or%20isAssigned%20eq%20true)&$orderby=displayName&"
4841+
4842+
if args.select:
4843+
api_url += "$select=" + args.select # some fields will 400 whole req
4844+
4845+
graph_api_get(access_token, api_url, args)
4846+
print("=" * 80)
4847+
4848+
# dump-androidapps
4849+
elif args.command and args.command.lower() == "dump-androidapps":
4850+
print_yellow("\n[*] Dump-AndroidApps")
4851+
print("=" * 80)
4852+
api_url = "https://graph.microsoft.com/beta/deviceAppManagement/mobileApps?$filter=((isof(%27microsoft.graph.androidManagedStoreApp%27)%20and%20microsoft.graph.androidManagedStoreApp/isSystemApp%20eq%20true)%20or%20isof(%27microsoft.graph.androidLobApp%27)%20or%20isof(%27microsoft.graph.androidStoreApp%27)%20or%20(isof(%27microsoft.graph.managedAndroidStoreApp%27)%20and%20microsoft.graph.managedApp/appAvailability%20eq%20microsoft.graph.managedAppAvailability%27lineOfBusiness%27)%20or%20isof(%27microsoft.graph.managedAndroidLobApp%27)%20or%20(isof(%27microsoft.graph.managedAndroidStoreApp%27)%20and%20microsoft.graph.managedApp/appAvailability%20eq%20microsoft.graph.managedAppAvailability%27global%27)%20or%20(isof(%27microsoft.graph.androidManagedStoreApp%27)%20and%20microsoft.graph.androidManagedStoreApp/isSystemApp%20eq%20false)%20or%20isof(%27microsoft.graph.webApp%27))%20and%20(microsoft.graph.managedApp/appAvailability%20eq%20null%20or%20microsoft.graph.managedApp/appAvailability%20eq%20%27lineOfBusiness%27%20or%20isAssigned%20eq%20true)&$orderby=displayName&"
4853+
4854+
if args.select:
4855+
api_url += "$select=" + args.select # some fields will 400 whole req
4856+
4857+
graph_api_get(access_token, api_url, args)
4858+
print("=" * 80)
4859+
48074860
# get-scriptcontent
48084861
elif args.command and args.command.lower() == "get-scriptcontent":
48094862
if not args.id:
@@ -5836,7 +5889,7 @@ def parse_permissionid(content):
58365889
}
58375890

58385891
# 1. get current target script settings and encode new script content so we don't override anything
5839-
# ~> could add option to alter pre-existing settings...
5892+
# - could add option to alter pre-existing settings...
58405893
try:
58415894
script_content = read_file_content(args.script)
58425895
encoded_script_content = base64.b64encode(script_content.encode('utf-8')).decode('utf-8')
@@ -5882,8 +5935,69 @@ def parse_permissionid(content):
58825935
print("=" * 80)
58835936

58845937
# deploy-maliciouswin32app
5885-
# - todo, needs IntuneWinAppUtil.exe to package the EXE/MSI
58865938
# - user will have to packagae app prior
5939+
# https://cloudinfra.net/how-to-deploy-exe-applications-using-intune/
5940+
# https://www.systemcenterdudes.com/deploy-microsoft-intune-win32-apps/
5941+
#
5942+
# POST https://graph.microsoft.com/beta/deviceAppManagement/mobileApps/
5943+
# {"@odata.type":"#microsoft.graph.win32LobApp","applicableArchitectures":"x64,x86","allowAvailableUninstall":false,"categories":[],"description":"IntuneMessageBox","developer":"","displayName":"IntuneMessageBox","displayVersion":"","fileName":"IntuneMessageBox.intunewin","installCommandLine":"IntuneMessageBox.exe","installExperience":{"deviceRestartBehavior":"suppress","maxRunTimeInMinutes":30,"runAsAccount":"system"},"informationUrl":"","isFeatured":false,"roleScopeTagIds":[],"notes":"","minimumSupportedWindowsRelease":"1607","msiInformation":null,"owner":"","privacyInformationUrl":"","publisher":"ECorp","returnCodes":[{"returnCode":0,"type":"success"},{"returnCode":1707,"type":"success"},{"returnCode":3010,"type":"softReboot"},{"returnCode":1641,"type":"hardReboot"},{"returnCode":1618,"type":"retry"}],"rules":[{"@odata.type":"#microsoft.graph.win32LobAppFileSystemRule","ruleType":"detection","operator":"notConfigured","check32BitOn64System":false,"operationType":"exists","comparisonValue":null,"fileOrFolderName":"IntuneMessageBox.exe","path":"C:\\Program Files\\IntuneMessageBox.exe"}],"runAs32Bit":false,"setupFilePath":"IntuneMessageBox.exe","uninstallCommandLine":"IntuneMessageBox.exe"}
5944+
# - ime tried to install
5945+
# -> need to add install/uninstall instruction batch script
5946+
elif args.command and args.command.lower() == "deploy-maliciouswin32exe": # don't use this yet
5947+
url = "https://graph.microsoft.com/beta/deviceAppManagement/mobileApps/"
5948+
5949+
# add the option to be available in the company portal for download!
5950+
data = {
5951+
"@odata.type": "#microsoft.graph.win32LobApp",
5952+
"applicableArchitectures": "x64,x86",
5953+
"allowAvailableUninstall": False,
5954+
"categories": [],
5955+
"description": "IntuneMessageBox",
5956+
"developer": "",
5957+
"displayName": "IntuneMessageBox",
5958+
"displayVersion": "",
5959+
"fileName": "IntuneMessageBox.intunewin",
5960+
"installCommandLine": "IntuneMessageBox.exe",
5961+
"installExperience": {
5962+
"deviceRestartBehavior": "suppress",
5963+
"maxRunTimeInMinutes": 30,
5964+
"runAsAccount": "system"
5965+
},
5966+
"informationUrl": "",
5967+
"isFeatured": False,
5968+
"roleScopeTagIds": [],
5969+
"notes": "",
5970+
"minimumSupportedWindowsRelease": "1607",
5971+
"msiInformation": None,
5972+
"owner": "",
5973+
"privacyInformationUrl": "",
5974+
"publisher": "ECorp",
5975+
"returnCodes": [
5976+
{"returnCode": 0, "type": "success"},
5977+
{"returnCode": 1707, "type": "success"},
5978+
{"returnCode": 3010, "type": "softReboot"},
5979+
{"returnCode": 1641, "type": "hardReboot"},
5980+
{"returnCode": 1618, "type": "retry"}
5981+
],
5982+
"rules": [
5983+
{
5984+
"@odata.type": "#microsoft.graph.win32LobAppFileSystemRule",
5985+
"ruleType": "detection",
5986+
"operator": "notConfigured",
5987+
"check32BitOn64System": False,
5988+
"operationType": "exists",
5989+
"comparisonValue": None,
5990+
"fileOrFolderName": "IntuneMessageBox.exe",
5991+
"path": "C:\\Program Files\\IntuneMessageBox.exe"
5992+
}
5993+
],
5994+
"runAs32Bit": False,
5995+
"setupFilePath": "IntuneMessageBox.exe",
5996+
"uninstallCommandLine": "IntuneMessageBox.exe"
5997+
}
5998+
5999+
# deploy-maliciouswin32msi
6000+
# - after confirming win32exe
58876001

58886002
# reboot-device
58896003
elif args.command and args.command.lower() == "reboot-device":

0 commit comments

Comments
 (0)