Created
June 13, 2019 18:55
-
-
Save MaxNad/949fc0fd38e2a55861729e05e9defcdc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
from __future__ import print_function | |
from dnslib import RR,QTYPE,RCODE,TXT,parse_time | |
from dnslib.label import DNSLabel | |
from dnslib.server import DNSServer,DNSHandler,BaseResolver,DNSLogger | |
class ShellResolver(BaseResolver): | |
def __init__(self,ttl,ans): | |
self.ttl = parse_time(ttl) | |
self.ans = ans | |
def resolve(self,request,handler): | |
reply = request.reply() | |
qname = request.q.qname | |
label = str(qname) | |
counter = label[0:label.index(".")] | |
try: | |
counter = int(counter) | |
if counter >= len(ans): | |
reply.add_answer(RR(qname,QTYPE.TXT,ttl=self.ttl, | |
rdata=TXT("x00x00x00x00x00"))) | |
else: | |
reply.add_answer(RR(qname,QTYPE.TXT,ttl=self.ttl, | |
rdata=TXT(ans[counter]))) | |
except ValueError: | |
reply.add_answer(RR(qname,QTYPE.TXT,ttl=self.ttl, | |
rdata=TXT("x00x00x00x00x00"))) | |
return reply | |
if __name__ == '__main__': | |
import argparse,sys,time | |
p = argparse.ArgumentParser(description="Shell DNS Resolver") | |
p.add_argument("--ttl","-t",default="60s", | |
metavar="<ttl>", | |
help="Response TTL (default: 60s)") | |
p.add_argument("--port","-p",type=int,default=53, | |
metavar="<port>", | |
help="Server port (default:53)") | |
p.add_argument("--address","-a",default="", | |
metavar="<address>", | |
help="Listen address (default:all)") | |
p.add_argument("--file",required=True, | |
help="Filename to send") | |
args = p.parse_args() | |
ans = [] | |
with open(args.file) as f: | |
while True: | |
chars = f.read(254) | |
if not chars: | |
break | |
ans.append(chars) | |
print(ans) | |
resolver = ShellResolver(args.ttl, ans) | |
logger = DNSLogger("request,reply,truncated,error",False) | |
udp_server = DNSServer(resolver, | |
port=args.port, | |
address=args.address, | |
logger=logger) | |
udp_server.start_thread() | |
while udp_server.isAlive(): | |
time.sleep(1) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment