Arama Motoru Aracı [Python] (1 Viewer)

Joined
Dec 9, 2017
Credits
4
Rating - 0%
Merhaba arkadaşlar. Bugün Hackerlar için Python Programlama Dili diyerek bir seri oluşturcağım ilk projemizi beraber yapıyor olacağız. Başlıktan da anlaşılacağı gibi Google arama motorunu kullanan bir searcher projesi yapıyoruz. Googler, aramak istediğimiz dorkları Google üzerinden arayarak çıkan sonuçları bize veren bir programdır.

Saldırı Senaryosu:

Örneğin Joomla’nın X bir eklentisinde SQL Injection zafiyeti tespit edilmiş ve biz de bu zafiyeti exploit edebilmek için X eklentisini kullanan Joomla siteleri Google arama motorunu kullanarak tespit edeceğiz.

Algoritma:

1. Adım: Başla
2. Adım: Eğer argümanlarda “-d,-s,-f” varsa 3. adıma git, yoksa programdan çık
3. Adım: Argümanları -d,-s,-f al
4. Adım: Argümanları arama() fonksiyonuna gönder
5. Adım: -f argüman değeriyle dosyayı oluştur ve aç
6. Adım: i = 0
7. Adım: ss = i+1 ve -d değeri için Google’a Get isteği gönder
8. Adım: Sayfanın kaynak kodunu al
9. Adım: Kaynak kodu parçala ve çıkan linkleri al
10.Adım: Çıkan linkleri dosyaya kaydet
11.Adım: i++
12.Adım: Eğer i < -s ise 7. adıma git
13.Adım: Dosyayı kapat
14.Adım: print “\n[-] İşlem bitmiştir.. ”
15.Adım: Dur

Kod Paylaşımı:

1. İlk olarak genel ayarları yaptık, kullanacağımız modülleri (mechanize, sys, re, HTMLParser, urllib, BeautifulSoup) projemize import ettik ve değişken atamalarımızı yaptık:
Code:
#!/usr/bin/python
#-*- coding: utf-8 -*-
 
import mechanize,sys,re,HTMLParser,urllib #kullanacağımız modüller(kütüphaneler)
from bs4 import BeautifulSoup # kullanacağımız modüller(kütüphaneler)
h = HTMLParser.HTMLParser() # HtmlParser metodu için referans gösterdik
br = mechanize.Browser() # mechanize Browser metodu için referans gösterdik
br.set_handle_robots(False) # robots.txt engellerine yakalanmamak için false dedik
br.addheaders = [('User-agent', 'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)')] # tarayıcımıza header bilgisi ekledik.


2. giris fonksiyonumuzu oluşturduk. try ve except metodu ile olası hatalar kullanıcının gözünden gizlenmek istenmiştir. Her seferinde kullanıcının programı nasıl kullanacağını göstermek için de uyarı mesajlarımızı eksik etmedik:
Code:
def giris(): # giris fonksiyonumuz
    try:
        if sys.argv[1] == "-d" and sys.argv[3] == "-s" and sys.argv[5] == "-f": #Eğer '-d,-s,-f' argümanları var ise
            dork = sys.argv[2] # dorkumuzu aldık
            sayfa_sayisi = sys.argv[4] # sayfa sayısını aldık
            dosya_ismi = sys.argv[6] # sonuçların kayıt edileceği dosyamızı aldık
            arama(dork,sayfa_sayisi,dosya_ismi) # arama fonksiyonuna gönderdik
        else: #argümanlar yok ise
            print "    >> python googler.py -d /admin.php -s 10 -f cikti.txt \n\n    -d = dork \n    -s = Sayfa sayısı\n    -f = kaydedilcek dosya ismi"
    except:
        print "    >> python googler.py -d /admin.php -s 10 -f cikti.txt \n\n    -d = D0rk (arama kodu) \n    -s = Sayfa sayısı\n    -f = Kaydedilcek dosya ismi"

3. Aşağıdaki kodlarımız arama fonksiyonumuza aittir. Burada kaynak kodları parçalarken merdiven gibi taglar arasında iniş yaptım fakat sizler istediğiniz değerleri almak için harika bir regex kuralı yazarak tek seferde alabilirsiniz. Her sayfada işimiz bittikten sonra sıradaki sayfalar içinde aynı şeyi yaparak değerlerimizi çektik arkadaşlar.

Code:
def arama(dork,sayfa_sayisi,dosya_ismi): # arama fonksiyonumuz ve fonksiyona gelen değerler
    dosya = open(dosya_ismi,"a") # dosyamızı açtık
    dorks=urllib.quote(dork) #dorkumuzu encode ettik bazı karakterlerden ötürü hata vermemesi için
    for i in range(0,int(sayfa_sayisi)): # sayfa sayisi kadar dönen döngümüz
        ss = i+1 # ss 1 arttırdık
        url = "https://www.google.com.tr/search?q=%s&noj=1&start=%s0" %(dorks,i) # url de değerleri yerine koyduk
        print "[+] %s. Sayfa yazildi.." %ss # uyarı mesajımız
        a = br.open(url) # linkimizi açtık
        kodlar = a.read() # kaynak kodlarımızı aldık çıkan sayfadan
        kazan = BeautifulSoup(kodlar) # Ben buna kodları kazana atmak diyorum.
        ayiklama = kazan.find_all('h3') # kaynak kodlardan h3 taglarını aldık ve liste olarak kayıt ettik dikkat 'ayiklama' listedir.
        for i in ayiklama: # listemizde ki elemanları tek tek dökerken
            ayiklama1 = i.find_all('a') # aynı şekilde dökülen her elemandan a taglarını aldık <a href=''></a> şeklinde olur..          
            for a in ayiklama1: # a taglarını döküyoruz
                hedef = a.get('href') # a taglarının içinde ki href değerlerini aldık
                l = hedef.lstrip('/url?q=') # değerlerin solundan birşeyleri kestik attık.
                f = re.findall('(.*?)&sa',l) # hala istemediğimiz değerler vardı bu şekilde son defa re.findall ile basit bir kural belirleyerek istediğimizi aldık.
                for hedef in f: # son aldığımız değerleri döküyoruz
                    asd = h.unescape(urllib.unquote(hedef)) # değerler html encode halinde ve bazı bozuklukları var tamir ettik
                    dosya.write(asd+"\n") # dosyamıza yazdırdık

    dosya.close() # dosyamızı kapattık
    print "\n[-] İşlem bitmiştir.. " #uyarı mesajı
giris() #giris fonksiyonunu çalıştır.


4. Python 2.x sürümü ile yaptığımız projemizin sonuna geldik. Kodların tam haline aşağıdan ulaşabilirsiniz:

Code:
#!/usr/bin/python
#-*- coding: utf-8 -*-

import mechanize,sys,re,HTMLParser,urllib
from bs4 import BeautifulSoup
h = HTMLParser.HTMLParser()
br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)')]
def giris():
    try:
        if sys.argv[1] == "-d" and sys.argv[3] == "-s" and sys.argv[5] == "-f":
            dork = sys.argv[2]
            sayfa_sayisi = sys.argv[4]
            dosya_ismi = sys.argv[6]
            arama(dork,sayfa_sayisi,dosya_ismi)
        else:
            print "    >> python googler.py -d /admin.php -s 10 -f cikti.txt \n\n    -d = dork \n    -s = Sayfa sayısı\n    -f = kaydedilcek dosya ismi"
    except:
        print "    >> python googler.py -d /admin.php -s 10 -f cikti.txt \n\n    -d = dork \n    -s = Sayfa sayısı\n    -f = kaydedilcek dosya ismi"
def arama(dork,sayfa_sayisi,dosya_ismi):
    dosya = open(dosya_ismi,"a")
    dorks=urllib.quote(dork)
    for i in range(0,int(sayfa_sayisi)):
        ss = i+1
        url = "https://www.google.com.tr/search?q=%s&noj=1&start=%s0" %(dorks,i)
        print "[+] %s. Sayfa yazildi.." %ss
        a = br.open(url)
        kodlar = a.read()
        kazan = BeautifulSoup(kodlar)
        ayiklama = kazan.find_all('h3')
        for i in ayiklama:
            ayiklama1 = i.find_all('a')
            #print ayiklama1
            for a in ayiklama1:
                hedef = a.get('href')
                l = hedef.lstrip('/url?q=')
                f = re.findall('(.*?)&sa',l)
                for hedef in f:
                    asd = h.unescape(urllib.unquote(hedef))
                    dosya.write(asd+"\n")
                    #print hedef

    dosya.close()
    print "\n[-] İşlem bitmiştir.. "
giris()

NOT: Projede kullandığımız mechanize, BeautifulSoup, HtmlParser modülleri Python’ın sabit modülleri olmayıp sizin haricen yüklemeniz gerekmektedir.

NOT-2: Python2 Kullanarak Yazılmıştır.
 

Users who are viewing this thread

Top