Manuel Port Scanner ve Mantığı

Authors

Üye
1 Tem 2022
176
119
Türkiye Cumhuriyeti
Herkese merhaba,

Birazda farklı konulara deyinelim istedim, bu konu altına birazdan yazacağım veya açıklayacağım gibi kendi yazdığını manuel ufak amaçlara hizmet eden araçları sizlerde paylaşabilirsiniz. Bakalım yetenekleriniz sizlere neleri yaptırdı.

Altta hackerlığın en önemli adımlarından birisi olan port scan (enumeration) bilgi toplamasına yönelik bir script paylaştım. Bu script linux socketlerini kullanarak port scan yapabilmektedir. Eğer bir sisteme sızdığınızda 3. taraf bir yazılım yükleme şansınız yok ve sunucu ağ içerisinde nasıl konumlanmış diye merak ediyorsanız artık pamuk eller klavyeye tabiri devreye girmekte ve aşağıdaki gibi bir script kodu ile işlerinizi kolaylıkla halledebilmektesiniz.

Bash ve python bu konuda size çok fazla esneklik sağlamaktadır. Sunucularda python olmayabilir ancak bu sizin kısır döngüde kalacağınız anlamına gelmiyor. Birçok yol var ve bunları zaman içerisinde sırasıyla paylaşmaya özen göstereceğim.

Bash:
#!/bin/bash
#hostlist alt alta iplerin olduğu bir txt dosyası olmalıdır
input="/tmp/hostlist"
while IFS= read -r host
do
    echo "Taranan IP : $host"  >> sonuc.txt
    echo "$host için tarama başlatıldı."
    port_first=1
    port_last=65535
    for ((port=$port_first; port<=$port_last; port++))
        do
                (echo >/dev/tcp/$host/$port) >/dev/null 2>&1 && echo "$port" >> sonuc.txt
        done
    echo "$host için Port taraması tamamlandı. Lütfen sonuç dosyasını kontrol ediniz..."
    echo "=================================================================="
done < "$input"
echo "Tarama tamamlandı."

veya aşağıdaki python kodu gibi kendinize daha kapsamlı bir araç da geliştirebilirsiniz, bazı kısımları yazdım bazılarını sizlere yol göstermesi açısından size bıraktım. Copy-paste ve ezber mantığından çıkıp kendinizden bir şeyler katabilirsiniz işlerinize. Unutmayınki her geçen gün kendinize bir şey katmıyorsanız o gün yaptığınız kamyon dolusu işin bir anlamı yoktur. Kişisel gelişim böyle bir şeydir.

Python:
#!/usr/local/bin/python3
import ipaddress
from subprocess import Popen, PIPE
from IPy import IP
import logging
from scapy.layers.inet import ICMP, UDP, TCP
logging.getLogger("Scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *

remoteServerIP = sys.argv[1]
start = int(sys.argv[2])
end = int(sys.argv[3])
scanType = sys.argv[4]
tcpPorts = []
udpPorts = []
synPorts = []
icmpHost = []

def print_ports(port, state):
    print("%s | %s" % (port, state))

class PortScan():
    def TCP_Scan(remoteServerIP, start, end):
        try:
            for port in range(start, end):
                sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                result = sock.connect_ex((remoteServerIP, port))
                if result == 0:
                    # print("Port {}: Open".format(port))
                    tcpPorts.append(port)
        except KeyboardInterrupt:
            print("You pressed Ctrl+C")
            sys.exit()

        except socket.gaierror:
            print("Host could not be resolved. Exiting")
            sys.exit()

        except socket.error:
            print("Couldnt connect to server")
            sys.exit()
        print(*tcpPorts, sep=',')
        print(tcpPorts)
        sock.close()

    def SYN_Scan(remoteServerIP, start,end):
        sport = RandShort()
        for port in range(start,end):
            pkt = sr1(IP(dst=remoteServerIP) / TCP(sport=sport, dport=port, flags="S"), timeout=1, verbose=0)
            if pkt != None:
                if pkt.haslayer(TCP):
                    if pkt[TCP].flags == 18:
                        # print_ports(port, "Open")
                        synPorts.append(port)

        print(*synPorts, sep=',')

    # def UDP_Scan():
    # TODO

class HostScan():
    def ICMP_Scan(net_addr):

        ip_net = ipaddress.ip_network(net_addr)
        all_hosts = list(ip_net.hosts())
        for i in range(len(all_hosts)):
            state = Popen(['ping', '-c', '3', str(all_hosts[i])], stdout=PIPE)
            output = state.communicate()[0]
            hostalive = state.returncode
            if hostalive == 0:
                print(str(all_hosts[i]), "is up")
            else:
                print(str(all_hosts[i]), "is down")

    # def TCP_Scan(net_addr):
    #TODO

def main():
    if scanType == "TCP":
        PortScan.TCP_Scan(remoteServerIP, start, end)

    if scanType == "UDP":
        PortScan.UDP_Scan(remoteServerIP, start, end)

    if scanType == "SYN":
        PortScan.SYN_Scan(remoteServerIP, start, end)

    if scanType == "ICMP":
        net_addr = input("Enter a network address in CIDR format(ex.192.168.1.0/24): ")
        HostScan.ICMP_Scan(net_addr)


if __name__ == '__main__':
    main()
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.