OpenVPN Pivoting. By :[ Mohamed Ahmed ]

Sep 13, 2017 02:54 PM
636408832773099496.jpg

As you all know, pivoting is a method that basically consists of using a system under our control as a gateway to attack other systems and networks, thus avoiding restrictions such as the rules of an intermediate firewall. We could divide this technique into two big types:

  • Proxy pivoting : traffic is channeled through a payload on the computer through which we will pivot. It is limited to certain TCP and UDP ports.
  • VPN pivoting : is to create an encrypted tunnel against the equipment through which we will pivot to route all network traffic, for example to run a vulnerability scan to other computers in your network or other networks to which you have access.

In my case, for versatility, I need this last technique. I could use the Pro version of Metasploit or Cobalt Strike which are excellent tools for VPN pivoting, although they are also paid, so according to the economy I choose OpenVPN.

Imagine a topology with a monitoring server with Nagios in the DMZ which, by its nature, has also enabled access to other network segments. I have the root user and I already access the console via SSH. In addition, the internal firewall allows me to access other ports on the server.

If I perform a scan from my laptop I get the following results:

Code

Nmap scan report for 192.168.2.50

Host is up (0.00s latency).

Not shown: 991 filtered ports

PORT STATE SERVICE

22/tcp open ssh

23/tcp closed telnet

80/tcp open http

113/tcp closed ident

161/tcp closed snmp

1060/tcp open polestar

2869/tcp open icslap

8080/tcp open http-proxy

8100/tcp open xprint-server

I could mount a tunnel directly over ssh, but it would be very easy to screw up and lose the connection to the remote server, and I would not want to have to call the system administrator several times to restart the server ¬_¬ ... So I will use another open port, for example telnet (why the fuck is the telnet port open?).

I'll start by installing OpenVPN. The server is Ubuntu so this is pretty trivial:

Code

apt-get install openvpn

OpenVPN has two modes of operation, one based on static pre-shared keys and another on SSL / TLS using certificates and RSA keys. Although not so sure, I will use the first one for simplicity. I then generate the private key:

Code

openvpn --genkey --secret secret.key

This key is symmetric, so it has to have both the server and the client, which, after generating it I will copy it to my laptop using SCP (with WinSCP since my OS is Windows 7) and protect it as gold in cloth ... why do not you need to tell you what would happen if a third party did with her ... no?

The goal then is to create a point-to-point VPN tunnel that will be established between the virtual interfaces (tun0) of the server and my laptop with a private IP at each end: 10.8.0.1 at the endpoint of the server and 10.8.0.2 at the endpoint of the client. With the p2p (default) mode, a peer-to-peer topology is established where the virtual peer IP address of the client's client interface always points to the local virtual IP address of the server's tun interface

  • I create the file /etc/openvpn/server.conf with the following configuration:

Code

mode p2p

dev tun

port 23

proto tcp-server

ifconfig 10.8.0.1 10.8.0.2

secret secret.key

;user nobody

;group nobody

keepalive 10 60

ping-timer-rem

persist-tun

persist-key

comp-lzo

As you can see, all communications between the two points will be encrypted and will be done on port 23 / TCP , since telnet is allowed in the internal firewall which will let the traffic of the tunnel "flow" as if nothing ...

Let us not forget that it is necessary to enable packet forwarding on the server:

Code

echo 1 > /proc/sys/net/ipv4/ip_forward

Neither do I have to mask my IP address to enable traffic back because the networks I will access do not have to know the route back if I use my real private IP. Well, it gives me a certain anonymity:

Code

iptables -t nat -A POSTROUTING -s 10.8.0.2 -o eth0 -j MASQUERADE

Finally, I will only activate the tunnel on demand so I delete all the startup scripts:

Code

update-rc.d -f openvpn remove

And with this I have finished configuring the server. I can open the OpenVPN service with the command 'openvpn --config /etc/openvpn/server.conf &' or create a junk script like the following:

Code

#! /bin/sh

case "$Code: Select1" in

start)

/bin/echo 1 > /proc/sys/net/ipv4/ip_forward

/usr/sbin/openvpn --config /etc/openvpn/server.conf &

/sbin/iptables -t nat -A POSTROUTING -s 10.8.0.2 -o eth0 -j MASQUERADE

;;

stop)

/bin/echo 0 > /proc/sys/net/ipv4/ip_forward

/usr/bin/killall openvpn

/sbin/iptables -t nat -F

/sbin/iptables -t nat -X

;;

*)

echo "Uso: ovpn|start|stop"

exit 1

;;

esac

As you see when lifting the tunnel will also the virtual device:

code

ps -ef | grep openvpn

root 5976 1 0 12:39 ? 00:00:01 /usr/sbin/openvpn --config /etc/openvpn/server.conf

tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00

inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255

UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1

RX packets:9523 errors:0 dropped:0 overruns:0 frame:0

TX packets:10414 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:100

RX bytes:1156752 (1.1 MB) TX bytes:4833017 (4.8 MB)

Now I only have to configure the OpenVPN client on my laptop. To do this I create the file pivoting.ovpn in C: \ Program Files (x86) \ OpenVPN \ config with the following configuration:

Code

mode p2p

remote 192.168.2.50

dev tun

port 23

proto tcp-client

ifconfig 10.8.0.2 10.8.0.1

secret "C:\\Program Files (x86)\\OpenVPN\\config\\secret.key"

comp-lzo

dhcp-option DNS 192.168.2.36

route-metric 15

route 192.168.3.0 255.255.255.0 10.8.0.1

verb

Note that I add a DNS to my choice and the path of the server network (192.168.3.0/24) for my Windows client to properly route the packets.

To finish I check that I reach the virtual interface of the tunnel and to a computer of the VLAN of servers:

Code: Select

C: \ Users \ vmotos> ping -n 1 10.8.0.1

Pinging 10.8.0.1 with 32 bytes of data:

Response from 10.8.0.1: bytes = 32 time = 1ms TTL = 64

Statistics of ping to 10.8.0.1:

Packages: sent = 1, received = 1, lost = 0

(0% lost),

Approximate round trip times in milliseconds:

Minimum = 1ms, Maximum = 1ms, Average = 1ms

C: \ Users \ mado> tracert 192.168.3.12

Draw at 10.20.16.12 on paths with a maximum of 30 jumps.

1 1 ms 1 ms 1 ms SERVER 10.8.0.1

2 6 ms 2 ms 2 ms 192.168.2.1

3 2 ms 2 ms 2 ms 192.168.3.12

Full trace.

And that's it! I am already pivoting through the monitoring server through the VPN tunnel.

Note

that the server in this example is legally managed. If we compromise a server, we obtain access as root and we want to use openvpn for vpn pivoting, we must also think about using some rootkit or other techniques to hide at least the virtual interface and the process.

Greetings.....

Related Articles

637263493835297420.jpg

How to Use Zero-Width Characters to Hide Secret Messages in Text (& Even Reveal Leaks)

636455706472146367.jpg

How to Hide DDE-Based Attacks in MS Word

Comments

No Comments Exist

Be the first, drop a comment!