Запсиси при просмотре 60-минутного видео. Месяц назад мне понравилось видео для хакеров про сокеты. Этот пост - продолжение поста, в который я загрузил код сервера и клиента. Я вернулся к этому практикуму после того, как прочитал про объект "Socket"...
В конце ролика отличные примеры работы со Scapy.
В конце ролика отличные примеры работы со Scapy.
Первоисточники и ссылки¶
Запускаем код сервера по частям¶
In []:
#На 23 минуте ролика автор запустил сервер
python miniserver.py
In [1]:
# #######!/usr/bin/python
import socket
import sys
# Create a TCP/IP socket to listen on
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Prevent from "address already in use" upon server restart
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# Bind the socket to port 8081 on all interfaces
server_address = ('localhost', 8081)
print 'starting up on %s port %s' % server_address
server.bind(server_address)
# Listen for connections
server.listen(5)
Следующий фрагмент сработал только после того, как я набрал в адресной строке браузера localhost:8081 , при этом в самом окне браузера ничего не появилось...
In [2]:
# Wait for one incoming connection
connection, client_address = server.accept()
print 'connection from', connection.getpeername()
А здесь выскочила ошибка, поскольку браузер послал совсем не то, что в видеоролике, а начал стандартные переговоры (см. ниже)
In [3]:
# Let's receive something
data = connection.recv(4096)
if data:
print 'Received ', repr(data)
# Send it back nicely formatted
data = data.rsrtip()
connection.send('%s\n%s\n%s\n' % ('-'*80, data.center(80), '-'*80))
print 'Response sent!'
In [*]:
# Close the connection from our side
connection.shutdown(socket.SHUT_RD | socket.SHUT_WR)
connection.close
print 'Connection closed.'
# And stop listening
server.close()
In [*]:
#import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 8081))
s.send('Happy Hacking')
data = s.recv(1024)
s.close()
print 'Received: '
print data
In [*]:
# Wait for one incoming connection
connection, client_address = server.accept()
print 'connection from', connection.getpeername()
Scapy на 26 минуте¶
In [2]:
import scapy
help (scapy)
На 35-ой минуте запустили две консоли из одной - сервер, из другой - клиент... Запишем обмен в файл WireShark, и потом откроем его в Scapy¶
In []:
root@kali:~/Desktop/ipython notebook/happyhacking# python Server.py
starting up on localhost port 8081
connection from ('127.0.0.1', 32872)
Received 'Happy Hacking'
Traceback (most recent call last):
File "Server.py", line 29, in <module>
data = data.rsrtip()
AttributeError: 'str' object has no attribute 'rsrtip'
In []:
root@kali:~/Desktop/ipython notebook/happyhacking# python Client.py
Received:
Вызов к серверу прошел, но он не смог ответить из-за ошибки AttributeError: 'str' object has no attribute 'rsrtip' ... Клиент подвис..., тем не менее, переговоры были. Мы их записали посредством Wareshark в файл w_shark.pcap
Теперь откроем его в scapy (ниже копия из консоли scapy):
Теперь откроем его в scapy (ниже копия из консоли scapy):
In []:
root@kali:~/Desktop/ipython notebook/happyhacking# scapy
INFO: Can't import python gnuplot wrapper . Won't be able to plot.
WARNING: No route found for IPv6 destination :: (no default route?)
Welcome to Scapy (2.2.0)
>>>rdpcap('w_shark.pcap')
# answer was
<w_shark.pcap: TCP:152 UDP:0 ICMP:0 Other:0>
In []:
>>> _
<w_shark.pcap: TCP:152 UDP:0 ICMP:0 Other:0>
>>> cap1=_
# Присвоили имя последнему объекту, теперь можно еого показать
>>> cap1.display()
0000 Ether / IP / TCP 127.0.0.1:47524 > 127.0.0.1:51986 PA / Raw
0001 Ether / IP / TCP 127.0.0.1:51986 > 127.0.0.1:47524 PA / Raw
0002 Ether / IP / TCP 127.0.0.1:47524 > 127.0.0.1:51986 A
0003 Ether / IP / TCP 127.0.0.1:50725 > 127.0.0.1:53339 PA / Raw
0004 Ether / IP / TCP 127.0.0.1:53339 > 127.0.0.1:50725 PA / Raw
0005 Ether / IP / TCP 127.0.0.1:50725 > 127.0.0.1:53339 A
...
0033 Ether / IP / TCP 127.0.0.1:50725 > 127.0.0.1:53339 PA / Raw
0034 Ether / IP / TCP 127.0.0.1:53339 > 127.0.0.1:50725 PA / Raw
0035 Ether / IP / TCP 127.0.0.1:50725 > 127.0.0.1:53339 A
0036 Ether / IP / TCP 127.0.0.1:32872 > 127.0.0.1:tproxy S
0037 Ether / IP / TCP 127.0.0.1:tproxy > 127.0.0.1:32872 SA
0038 Ether / IP / TCP 127.0.0.1:32872 > 127.0.0.1:tproxy A
0039 Ether / IP / TCP 127.0.0.1:32872 > 127.0.0.1:tproxy PA / Raw
0040 Ether / IP / TCP 127.0.0.1:tproxy > 127.0.0.1:32872 A
0041 Ether / IP / TCP 127.0.0.1:tproxy > 127.0.0.1:32872 FA
0042 Ether / IP / TCP 127.0.0.1:32872 > 127.0.0.1:tproxy FA
0043 Ether / IP / TCP 127.0.0.1:tproxy > 127.0.0.1:32872 A
0044 Ether / IP / TCP 127.0.0.1:47524 > 127.0.0.1:51986 PA / Raw
0045 Ether / IP / TCP 127.0.0.1:51986 > 127.0.0.1:47524 PA / Raw
...
0149 Ether / IP / TCP 127.0.0.1:50725 > 127.0.0.1:53339 PA / Raw
0150 Ether / IP / TCP 127.0.0.1:53339 > 127.0.0.1:50725 PA / Raw
0151 Ether / IP / TCP 127.0.0.1:50725 > 127.0.0.1:53339 A
In []:
#После сбоя, я восстановил объект, но с именем cap2
>>> cap2=rdpcap('w_shark.pcap')
>>> cap2[3]
<Ether dst=00:00:00:00:00:00 src=00:00:00:00:00:00 type=0x800 |<IP version=4L ihl=5L tos=0x0 len=60 id=26307 flags=DF frag=0L ttl=64 proto=tcp
chksum=0xd5f6 src=127.0.0.1 dst=127.0.0.1 options=[] |<TCP sport=50725 dport=53339 seq=556303343 ack=1428532081 dataofs=8L reserved=0L flags=PA
window=43 chksum=0xfe30 urgptr=0 options=[('NOP', None), ('NOP', None), ('Timestamp', (11665178, 11664428))] |<Raw load='\x01\x00\x00\x04ping' |>>>>
>>>
In []:
>>> cap2[3].load
'\x01\x00\x00\x04ping'
>>> print cap2[3].load
ping
>>> print cap2[3].len
60
>>> cap2[3].len
60
На 47 минуте пример имитации сервера Apache¶
Здесь к файлу сервера были добавлены строки кода с константами и HTTP ответом так, чтобы в браузере открылась html-старница "Hello Word!"
Посты чуть ниже также могут вас заинтересовать
Комментариев нет:
Отправить комментарий