Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests,os,binascii,base64,json,sys
- from Crypto.PublicKey import RSA
- from Crypto.Util.Padding import pad, unpad
- from Crypto.Random import get_random_bytes
- from Crypto.Cipher import AES, PKCS1_OAEP
- from Crypto.Cipher import PKCS1_v1_5
- class Zyxel(object):
- def __init__(self, url, user, password):
- self.url = url
- self.user = user
- self.password = password
- self.r = requests.Session()
- self.r.trust_env = False
- self.aes_key = b'\x42'*32
- self.sessionkey = None
- def _encrypt_request(self, data):
- iv = b'\x42'*16
- cipher = AES.new(self.aes_key, AES.MODE_CBC, iv)
- content = cipher.encrypt(pad(json.dumps(data).encode('ascii'), 16))
- request = {
- "content": base64.b64encode(content).decode('ascii'),
- "iv": base64.b64encode(iv).decode('ascii'),
- "key": ""
- }
- return request
- def _decrypt_response(self, data):
- if not 'iv' in data or not 'content' in data:
- print(f"Het wachtwoord is niet correct.")
- sys.exit(1)
- return data
- iv = base64.b64decode(data['iv'])[:16]
- content = data['content']
- cipher = AES.new(self.aes_key, AES.MODE_CBC, iv)
- result = unpad(cipher.decrypt(base64.b64decode(content)), 16)
- return result
- def perform_login(self):
- res = self.r.get(f"{self.url}/getRSAPublickKey")
- pubkey_str = res.json()['RSAPublicKey']
- pubkey = RSA.import_key(pubkey_str)
- cipher_rsa = PKCS1_v1_5.new(pubkey)
- enc_aes_key = cipher_rsa.encrypt(base64.b64encode(self.aes_key))
- login_data = {
- "Input_Account": self.user,
- "Input_Passwd": base64.b64encode(self.password.encode('ascii')).decode('ascii'),
- "RememberPassword": 0,
- "SHA512_password": False
- }
- enc_request = self._encrypt_request(login_data)
- enc_request['key'] = base64.b64encode(enc_aes_key).decode('ascii')
- enc_response = self.r.post(f"{self.url}/UserLogin", json.dumps(enc_request))
- response = json.loads(self._decrypt_response(enc_response.json()))
- if 'result' in response and response['result'] == 'ZCFG_SUCCESS':
- self.sessionkey = response['sessionkey']
- enc_response2 = self.r.get(f"{self.url}/cgi-bin/DAL?oid=tr69")
- response2 = str(json.loads(self._decrypt_response(enc_response2.json())))
- acsurl = response2[response2.find("'URL'")+1 : response2.find("'URL'")+999].split("'")[2]
- enc_response3 = self.r.post(f"{self.url}/UserLogout", "")
- if 'acs.indetel.net' in acsurl:
- print ("Odido heeft iets gewijzigd. Neem contact op met TMTV op de Community.")
- acsurl = acsurl.replace("https://acs.indetel.net:7548", "http://10.12.0.10:7547")
- return acsurl
- else:
- return False
- if __name__ == "__main__":
- host = "192.168.1.1"
- username = "admin"
- password = input("Login Password: ")
- url = f"http://{host}"
- router = Zyxel(url, username, password)
- status = router.perform_login()
- if not status:
- print("Het wachtwoord is niet correct.")
- sys.exit(1)
- else:
- acsurl = status
- s1 = requests.Session()
- xml1 = '''<soap:Envelope
- xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soap:Header>
- <cwmp:ID soap:mustUnderstand="1"></cwmp:ID>
- </soap:Header>
- <soap:Body>
- <cwmp:Inform>
- <DeviceId>
- <Manufacturer>DrayTek</Manufacturer>
- <OUI>001DAA</OUI>
- <ProductClass>Vigor2132FVn</ProductClass>
- <SerialNumber>001DAA''' + os.urandom(3).hex().upper() + '''</SerialNumber>
- </DeviceId>
- <Event soap-enc:arrayType="cwmp:EventStruct[3]">
- <EventStruct>
- <EventCode>0 BOOTSTRAP</EventCode>
- <CommandKey></CommandKey>
- </EventStruct>
- <EventStruct>
- <EventCode>1 BOOT</EventCode>
- <CommandKey></CommandKey>
- </EventStruct>
- <EventStruct>
- <EventCode>4 VALUE CHANGE</EventCode>
- <CommandKey></CommandKey>
- </EventStruct>
- </Event>
- <MaxEnvelopes>1</MaxEnvelopes>
- <CurrentTime>2000-01-01T00:00:00</CurrentTime>
- <RetryCount>1</RetryCount>
- <ParameterList soap-enc:arrayType="cwmp:ParameterValueStruct[9]">
- <ParameterValueStruct>
- <Name>InternetGatewayDevice.DeviceInfo.SpecVersion</Name>
- <Value xsi:type="xsd:string">1.0</Value>
- </ParameterValueStruct>
- <ParameterValueStruct>
- <Name>InternetGatewayDevice.DeviceInfo.HardwareVersion</Name>
- <Value xsi:type="xsd:string">5</Value>
- </ParameterValueStruct>
- <ParameterValueStruct>
- <Name>InternetGatewayDevice.DeviceInfo.SoftwareVersion</Name>
- <Value xsi:type="xsd:string">3.7.9.1</Value>
- </ParameterValueStruct>
- <ParameterValueStruct>
- <Name>InternetGatewayDevice.DeviceInfo.ProvisioningCode</Name>
- <Value xsi:type="xsd:string"></Value>
- </ParameterValueStruct>
- <ParameterValueStruct>
- <Name>InternetGatewayDevice.ManagementServer.ConnectionRequestURL</Name>
- <Value xsi:type="xsd:string"></Value>
- </ParameterValueStruct>
- <ParameterValueStruct>
- <Name>InternetGatewayDevice.ManagementServer.ParameterKey</Name>
- <Value xsi:type="xsd:string"></Value>
- </ParameterValueStruct>
- <ParameterValueStruct>
- <Name>InternetGatewayDevice.DeviceInfo.AuthKey</Name>
- <Value xsi:type="xsd:string"></Value>
- </ParameterValueStruct>
- <ParameterValueStruct>
- <Name></Name>
- <Value xsi:type="xsd:string"></Value>
- </ParameterValueStruct>
- <ParameterValueStruct>
- <Name>InternetGatewayDevice.ManagementServer.UDPConnectionRequestAddress</Name>
- <Value xsi:type="xsd:string"></Value>
- </ParameterValueStruct>
- </ParameterList>
- </cwmp:Inform>
- </soap:Body>
- </soap:Envelope>
- '''
- xml2 = '''<soap:Envelope
- xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soap:Header>
- <cwmp:ID soap:mustUnderstand="1"></cwmp:ID>
- </soap:Header>
- <soap:Body>
- <cwmp:SetParameterValuesResponse><Status xsi:type="xsd:int">0</Status></cwmp:SetParameterValuesResponse></soap:Body></soap:Envelope>'''
- xml3 = '''<soap:Envelope
- xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soap:Header>
- <cwmp:ID soap:mustUnderstand="1"></cwmp:ID>
- </soap:Header>
- <soap:Body>
- <cwmp:SetParameterValuesResponse><Status xsi:type="xsd:int">0</Status></cwmp:SetParameterValuesResponse></soap:Body></soap:Envelope>'''
- x = s1.post(acsurl, data=xml1)
- y = (x.headers["Set-Cookie"][:-7])
- header = {'Cookie': y, 'User-Agent': "Vigor TR-069 CPE", 'Content-Type': "text/xml; charset=utf-8", 'SOAPAction': ""}
- z = s1.post(acsurl, headers=header)
- a = s1.post(acsurl, data=xml2, headers=header)
- b = s1.post(acsurl, data=xml3, headers=header)
- c = s1.post(acsurl, data=xml2, headers=header)
- d = s1.post(acsurl, data=xml2, headers=header)
- e = s1.post(acsurl, data=xml2, headers=header)
- f = s1.post(acsurl, data=xml2, headers=header)
- u = s1.post(acsurl, data=xml2, headers=header)
- v = s1.post(acsurl, data=xml2, headers=header)
- w = s1.post(acsurl, data=xml2, headers=header)
- g = (d.text)
- h = (f.text)
- i = g[g.find("Password")+44 : g.find("Password")+107]
- j = i.partition("<")[0]
- k = h[h.find("Password")+44 : h.find("Password")+107]
- l = k.partition("<")[0]
- m = g[g.find("DisplayName")+47 : g.find("DisplayName")+110]
- n = m.partition("<")[0]
- o = h[h.find("DisplayName")+47 : h.find("DisplayName")+110]
- p = o.partition("<")[0]
- q = g[g.find("DomainRealm")+47 : g.find("DomainRealm")+110]
- r = q.partition("<")[0]
- s = h[h.find("DomainRealm")+47 : h.find("DomainRealm")+110]
- t = s.partition("<")[0]
- if "voip.t-mobilethuis.nl" in g or "voip.odido.nl" in g:
- print ("Lijn 1: Gebruikersnaam: " + n + " Wachtwoord: " + j + " Server: " + r)
- else:
- print("Geen gegevens gevonden voor lijn 1.")
- if "voip.t-mobilethuis.nl" in h or "voip.odido.nl" in h:
- print ("Lijn 2: Gebruikersnaam: " + p + " Wachtwoord: " + l + " Server: " + t)
- else:
- print("Geen gegevens gevonden voor lijn 2.")
Add Comment
Please, Sign In to add comment