Python для хакера - Часть 4. Свой мини фреймворк.

Gidroponika

Exploit Developer
Joined
Aug 17, 2016
Messages
1,784
Reaction score
826
*Прошлая часть*

Содержание:
  1. 1.--- Предисловие автора.
  2. 2.--- Краткое введение.
  3. 3.--- Поговорим о функционале.
  4. 4.--- Приступаем к работе.

1. Предисловие автора.

Всех приветствую, дорогие друзья) Начну с не большого предисловия. Я конечно очень люблю критику, так как с ее помощью можно стать еще сильнее. Но все таки, цель данного цикла, показать, что особо сложного ничего нет и основываясь на простом мы можем создать что-либо интересное. Т.е. зная всего основы такого языка, как Python, уже можно написать много чего интересного. И я придерживаюсь этой цели цикла, стараясь не затрагивать сложности (хотя они интереснее).


2. Краткое введение.

Сегодня мы напишем весьма не большой, так сказать фреймворк) Думаю, такая работа может и растянуться на несколько статей. Все попытаюсь объяснять простым языком. И, как я упомянул ранее, к сложностям прибегать не будем (а если и прибегнем, то попытаюсь разжевать).



3. Поговорим о функционале.

Во-первых, наш мини фреймворк будет в основном упрощать многие действия. Думаю, что напишем мы несколько модулей. Некоторые из них, как например сканирование портов, к ним можно пристроить nmap, а например, при поиске интересных файлов, субдоменов, написать уже самим. Разнообразие еще никому не вредило. Для начала, давайте, разберемся, какие модули будем писать. Исходя из теории, мы должны будем узнать

Code:
1. IP адрес ресурса
2. CMS
3. Whois
4. Сканирование портов
5. Поиск интересных файлов
6. Содержимое robots.txt (если будет)
7. DNS lookup)
8. Поиск email'а администратора
9. Server

Со временем, возможно и дополним данный список. А теперь, конечно, приступаем к работе.

4. Приступаем к работе.

Наш фреймворк будет написан на python3 и чуть выше :) Для начала, создайте две папки. Одна из которых будет modules, а другая wordlists.
Также создаем главный файл в котором будем, в скором использовать все наши модули. Должно получиться примерно так


View attachment 8826

Для начала, составим не сложный алгоритм для main.py

Code:
1. Получает на вход доменное имя ресурса
2. Отсылает его на вход различным модулям
3. Записывает в переменные результаты работы наших модулей
4. Вывод полученных данных

Первым модулем, который на вход будет получать доменное имя ресурса, будет модуль по определению IP адреса. Конечно, стоит узнать и сервер.

Создаем файл siteName.py в папке modules с следующим содержимым

Python:
import socket # импортируем библиотеки
import requests

def getIP ( domainName ): # данная функция использует библиотеку сокет для получения IP

    try:
        ip = socket.gethostbyname(domainName)
        return ip

    except:
        return "[Error]: ip not found!"

def getServerName ( siteName ): # данная функция, берет из HTTP заголовков имя сервера по средством requests

    try:
        content = requests.get( siteName )
        server = content.headers['Server']
        return server

    except:
        return "[Error]: Server not found!"

Давайте, теперь, начнем работу и с main.py - первым делом подключим наши модули. Так как файл main.py не находиться в папке с модулями, то нам придется указывать путь, до первого модуля. Делается это через точку.

Python:
import modules.siteName

Теперь, давайте напишем не большое, основное меню. Но перед этим я, также написал вывод уже существующих модулей
Python:
import modules.siteName # инициализация нашего модуля

getIPaddr = modules.siteName.getIP
getServer = modules.siteName.getServerName

# список модулей
modulesList = r"""

            +-----------------------------------------+
            | [1] -- Get IP address.                            |
            | [2] -- Get Server Name.                        |
            +-----------------------------------------+

"""
# выводим список некоторых команд
print(r"""

            +-----------------------------------------+
            | [exit] -- exit ;)                                        |
            | [back] -- back on main menu               |
            | [modules] -- show modules                 |
            +-----------------------------------------+

""")



def setModule (): # функция направлена на выбор и использование модулей

    moduleNum = input("[Enter module num]: ")

    if moduleNum == "1":

        try:
            domain = input ( "[Enter domain]: " ) # запрашиваем у пользователя имя сайта
            ipSite = getIPaddr(domain) # отправляем имя нашему модулю

            print("-" * 60)
            print("[IP] == [{0}]".format(ipSite))
            print("-" * 60)

        except:
            print( "[Error]: Domain or ip not found!" )
 

    elif moduleNum == "2":

        try:
            site = input ( "[Enter domain]: " )
            url = "http://" + site
            server = getServer(url)
          
            print("-" * 60)
            print("[Server] == [{0}]".format(server))
            print("-" * 60)

        except:
            print( "[Error]: Domain or server not found!" )


    comand()

def comand (): # функция направлена на исполнение выбранной пользователем команды

    comand = input("[$] --> ")

    if comand == "exit": exit( "Close program... " )
    elif comand == "back": print(comand())
    elif comand == "modules":
      
        print ( modulesList )
        print ( setModule () )

    else:

        print ( "[Error]: Comand not found!" )
        print ( comand () )


print(comand())

В нашем не большом меню присутствует некоторый выбор команд и конечно, сами модули)
Первые уже подключены, давайте идти дальше!

View attachment 8827

Думаю, что на этом можно и закончить, а завтра займемся поиском CMS, whois lookup и сканированием портов. Рекомендую повторить вам тему, про регулярки т.к. завтра они вам понадобятся. (Из-за нехватки времени, статья не получилась более обширней). Всем пока!)
 

Nord18

New member
Joined
Jun 12, 2011
Messages
2
Reaction score
0
I'm not fluent in Russian, but from what I can tell, you're showing off your Python skills by building a mini framework. That's awesome, can you share the code on GitHub or something? Maybe we can pick it apart and learn from it
 

alexboot

New member
Joined
Oct 12, 2016
Messages
3
Reaction score
0
"Lol, у нас здесь же на английском, так что может лучше назвать тему или хотя бы кратко перевести? Мне нравится идея создания мини фреймворка на Python, расскажите, о чем речь в новой части."
 

indrid

Member
Joined
Apr 15, 2011
Messages
7
Reaction score
0
"Hey, just wanted to say great job on the 4th part of this series. The custom request parser is a nice touch. Been following along and loving the in-depth explanations"
 
Top