Skip to content

Commit 4f8755c

Browse files
author
s0i37
committed
fixed errors in dns_tcp
1 parent 00392e4 commit 4f8755c

File tree

3 files changed

+57
-47
lines changed

3 files changed

+57
-47
lines changed

dns_tcp.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
#define BUF_SIZE 1024
99
#define MAX_CON 10
10-
#define ZONE "txt.yourzone.tk"
1110
#define TIMEOUT 100
1211
#define DNS_SIZE 50
1312

@@ -16,6 +15,7 @@ cl /c dns_tcp.c
1615
link /out:dns_tcp.exe dns_tcp.obj ws2_32.lib dnsapi.lib
1716
*/
1817

18+
char *zone;
1919
int new_connection = 1;
2020
int timeout;
2121
int dns_size;
@@ -45,18 +45,18 @@ void dns_send(char *buf, int buf_size, int socket)
4545
if(buf_size == 0)
4646
{
4747
memset(dns, '\x00', 1000);
48-
sprintf(dns, "s%d.%d.00.%d.%s", bytes, buf_size, socket, ZONE);
48+
sprintf(dns, "s%d.%d.00.%d.%s", bytes, buf_size, socket, zone);
4949
DnsQuery(dns, DNS_TYPE_A, DNS_QUERY_BYPASS_CACHE, (PIP4_ARRAY)0, &pDnsRecord, 0);
5050
}
5151
while(pos < buf_size)
5252
{
5353
j = 0;
5454
memset(dns, '\x00', 1000);
55-
j += sprintf(dns, "s%d.%d.", bytes, buf_size);
55+
j += sprintf(dns, "%d.s%d.%d.", rand(), bytes, buf_size);
5656
for(i = 0; (i < dns_size && pos < buf_size); i++, pos++)
5757
j += sprintf(dns+j, "%02x", (unsigned char)buf[pos]);
5858
j += sprintf(dns+j, ".%d", socket);
59-
sprintf(dns+j, ".%s", ZONE);
59+
sprintf(dns+j, ".%s", zone);
6060
printf("[+] -> %s\n", dns);
6161
while(1)
6262
{
@@ -93,7 +93,7 @@ int dns_recv(char *buf, int buf_size, int socket)
9393
while(pos < buf_size)
9494
{
9595
memset(dns, '\x00', 100);
96-
sprintf(dns, "r%d.%d.%s", pos, socket, ZONE);
96+
sprintf(dns, "%d.r%d.%d.%s", rand(), pos, socket, zone);
9797

9898
while(1)
9999
{
@@ -160,6 +160,7 @@ void _recv(int * socket)
160160
char buf[BUF_SIZE];
161161
int buf_size;
162162
int is_new = 1;
163+
srand(time(0));
163164
while(1)
164165
{
165166
if(! *socket)
@@ -284,6 +285,7 @@ void main(int argc, char **argv)
284285
char *ip;
285286
int port;
286287

288+
zone = getenv("ZONE");
287289
timeout = getenv("TIMEOUT") ? atoi(getenv("TIMEOUT")) : TIMEOUT;
288290
dns_size = (getenv("DNS_SIZE") ? atoi(getenv("DNS_SIZE")) : DNS_SIZE)/2;
289291
mode = argv[1][0];

dns_tcp.exe

-101 KB
Binary file not shown.

dns_tcp.py

Lines changed: 50 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@ def __getattr__(self, item):
2424
return DomainName(item + '.' + self)
2525

2626

27-
D = DomainName('txt.yourzone.tk.')
27+
TXT_SIZE = int(250/2)
28+
D = DomainName('s0i37.ga.')
2829
IP = '10.0.0.1'
29-
TTL = 60 * 5
30+
TTL = 1
3031
datas = {}
3132
socks = {}
3233
new_connection = False
@@ -62,50 +63,58 @@ def dns_response(data):
6263

6364
qname = request.q.qname
6465
qn = str(qname)
65-
if qn.find(".txt.yourzone.tk") != -1:
66-
if qn.split(".")[0].startswith("s"):
67-
pos,size,data,sock = qn.split(".")[:4]
68-
pos = int(pos[1:])
69-
size = int(size)
70-
if size > 0:
71-
data = bytes.fromhex(data)
66+
if qn.find("s0i37.ga") != -1:
67+
try:
68+
if qn.split(".")[1].startswith("s"):
69+
rand,pos,size,data,sock = qn.split(".")[:5]
70+
pos = int(pos[1:])
71+
size = int(size)
72+
if size > 0:
73+
data = bytes.fromhex(data)
74+
75+
if not sock in datas:
76+
new_connection = True
77+
datas[sock] = {"size": None, "input": {}, "output": {}, "prev": None}
78+
79+
if not sock in socks and last_socket:
80+
socks[last_socket] = sock
81+
last_socket = None
82+
83+
datas[sock]["size"] = size
84+
if len(b"".join(datas[sock]["input"].values())) == pos:
85+
datas[sock]["input"][pos] = data
86+
else:
87+
datas[sock]["size"] = -1
88+
records[DomainName(qn)] = [A("127.0.0.1")]
89+
print(f"[*] {qn}")
7290

73-
if not sock in datas:
74-
new_connection = True
75-
datas[sock] = {"size": None, "input": {}, "output": {}}
91+
elif qn.split(".")[1].startswith("r"):
92+
rand,pos,sock = qn.split(".")[:3]
93+
pos = int(pos[1:])
7694

7795
if not sock in socks and last_socket:
7896
socks[last_socket] = sock
7997
last_socket = None
8098

81-
datas[sock]["size"] = size
82-
datas[sock]["input"][pos] = data
83-
else:
84-
datas[sock]["size"] = -1
85-
records[DomainName(qn)] = [A("127.0.0.1")]
86-
print(f"[*] {qn}")
87-
88-
elif qn.split(".")[0].startswith("r"):
89-
pos,sock = qn.split(".")[:2]
90-
pos = int(pos[1:])
91-
92-
if not sock in socks and last_socket:
93-
socks[last_socket] = sock
94-
last_socket = None
99+
if not sock in datas:
100+
new_connection = True
101+
datas[sock] = {"size": None, "input": {}, "output": {}, "prev": None}
102+
103+
if datas[sock]["size"] == -1:
104+
answer = "-"
105+
elif pos in datas[sock]["output"]:
106+
answer = datas[sock]["output"][pos].hex()
107+
else:
108+
answer = ""
109+
records[DomainName(qn)] = [TXT(answer)]
95110

96-
if not sock in datas:
97-
new_connection = True
98-
datas[sock] = {"size": None, "input": {}, "output": {}}
111+
if datas[sock]["prev"] != None and datas[sock]["prev"] != pos and datas[sock]["prev"] in datas[sock]["output"]:
112+
del( datas[sock]["output"][ datas[sock]["prev"] ] )
113+
datas[sock]["prev"] = pos
99114

100-
if datas[sock]["size"] == -1:
101-
answer = "-"
102-
elif pos in datas[sock]["output"]:
103-
answer = datas[sock]["output"][pos].hex()
104-
del(datas[sock]["output"][pos])
105-
else:
106-
answer = ""
107-
records[DomainName(qn)] = [TXT(answer)]
108-
print(f"[*] {qn} {answer}")
115+
print(f"[*] {qn} {answer}")
116+
except Exception as e:
117+
pass
109118

110119
qtype = request.q.qtype
111120
qt = QTYPE[qtype]
@@ -196,7 +205,6 @@ def tcp_send(sock): # dns_recv
196205
def tcp_recv(sock): # dns_send
197206
global datas, socks
198207
buf = ""
199-
FRAG = int(250/2)
200208
while True:
201209
try:
202210
if not buf:
@@ -208,8 +216,8 @@ def tcp_recv(sock): # dns_send
208216
break
209217
if not datas[socks[sock]]["output"].keys():
210218
print(f"[+] <- {buf.hex()}")
211-
for p in range(0, len(buf), FRAG):
212-
datas[socks[sock]]["output"][p] = buf[p:p+FRAG]
219+
for p in range(0, len(buf), TXT_SIZE):
220+
datas[socks[sock]]["output"][p] = buf[p:p+TXT_SIZE]
213221
buf = ""
214222
else:
215223
print("[*] connection closed, no data")
@@ -225,7 +233,7 @@ def _listen(port):
225233
global last_socket
226234
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
227235
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
228-
s.bind(("0.0.0.0", port))
236+
s.bind(("172.16.0.1", port))
229237
s.listen(10)
230238
while True:
231239
c,info = s.accept()

0 commit comments

Comments
 (0)