• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Статья Sacrifice - URL обфускатор

Приветствую всех! Я искал в интернете инструменты для обфускации url адресов, но я не нашел таких, и решил написать свой.
Найти вы его сможете тут
Код:
https://git.codeby.net/Tayrus/Sacrifice/
Или внизу статьи.

Обычно я объясняю свой код, но не сегодня)

Для работы нужен python3 версии, библиотеки colorama и termcolor.

Запустим скрипт:

2018-11-08_13-06-34.png


Пока что я добавил 2 метода обфускации, но если этот проект будет пользоваться спросом, то ВОЗМОЖНО добавлю еще пару методов.

Я выбираю 1 метод, далее нас просят ввести адрес сайта куда будет вести ссылка:

2018-11-08_13-07-11.png


Я выбрал facebook.com. Теперь мы можем смешать наш адрес с адресом google.com(можете изменить на свой):

2018-11-08_13-07-21.png


Скрипт нам выдал ссылку. Вставим ее в адресную строку и посмотрим куда она нас приведет:

2018-11-08_13-07-38.png


Жмем "Enter":

2018-11-08_13-07-49.png


Открылся facebook.com.

Теперь давайте попробуем 2-ой метод, ссылка будет вести на github и миксовать мы не будем:

2018-11-08_13-08-27.png


Вставляем ссылку в адресную строку:

2018-11-08_13-08-44.png


Жмем "Enter":

2018-11-08_13-08-54.png


На этом все!)
Код:
#Добавил еще метод
from termcolor import *
import colorama
import socket
import math

colorama.init()

select = 0
res = 0
payload = 0
addr = 0
mixing = 0

def banner():
    s = """
      _____  ____    __  ____   ____  _____  ____   __    ___
     / ___/ /    |  /  ]|    \ |    ||     ||    | /  ]  /  _]
    (   \_ |  o  | /  / |  D  ) |  | |   __| |  | /  /  /  [_
     \__  ||     |/  /  |    /  |  | |  |_   |  |/  /  |    _]
     /  \ ||  _  /   \_ |    \  |  | |   _]  |  /   \_ |   [_
     \    ||  |  \     ||  .  \ |  | |  |    |  \     ||     |
      \___||__|__|\____||__|\_||____||__|   |____\____||_____|
                                                            
    """

    cprint(s,'green')
    cprint('                             Author: @Tayrus','red')

def selector():
    global select
    global payload
    global mixing
    print ('\n')
    cprint('Выберите тип обфускации:','green')
    print ('\n')
    cprint('[1] Hexadecimal','green')
    cprint('[2] Octal','green')
    cprint('[3] Decimal','green')
    select = input(': ')
    if not select == '1' and not select == '2' and not select == '3':
        cprint ('Ты выбрал неправильные значения!','red')
        exit()
    print ('\n')
    cprint('Введите адресс сайта:','green')
    payload = input(': ')
    print ('\n')
    cprint('Миксовать наш payload(1 или 0)?:','green')
    mixing = input(': ')

def check():
    global select
    if select == '1':
        Hexadecimal()
    if select == '2':
        Octal()
    if select == '3':
        Decimal()
    if mixing == '1':
        mix()

def getIp():
    global addr
    addr = socket.gethostbyname(payload)


def Hexadecimal():
    global res
    addr2 = addr.split('.')
    numbers = [int(c) for c in addr2]
    res = 'http://' + '.'.join(map(hex, numbers))
    print('\n')
    if mixing == '0':
        cprint(res,'green')

def Octal():
    global res
    addr2 = addr.split('.')
    numbers = [int(c) for c in addr2]
    res = 'http://' + '.'.join(map(oct, numbers))
    res = res.replace('o','')
    if mixing == '0':
        cprint(res,'green')

def Decimal():
    global res
    count = 0
    addr2 = addr.split('.')
    numbers = [int(c) for c in addr2]
    for x in numbers:
        if count == 0:
            res = x * math.pow(16,6)
        if count == 1:
            res += x * math.pow(16,4)
        if count == 2:
            res += x * math.pow(16,2)
        if count == 3:
            res += x
        count += 1
    res = 'http://' + str(int(res))
    if mixing == '0':
        cprint(res,'green')


def mix():
    res3 = 'http://google.com@' + res[7:]
    cprint(res3,'green')

def main():
    banner()
    selector()
    getIp()
    check()

if __name__ == '__main__':
    main()

PS github и facebook были для примера, вместо них возможно должны быть ваши сайты или C2 и т.п
 
Последнее редактирование:

explorer

Platinum
05.08.2018
1 080
2 472
BIT
0
Непонятно зачем использовать сразу два модуля termcolor и colorama, когда одного colorama достаточно для раскрашивания.
Потестил....

Под windows программа не работает, код написан криво, есть несколько ошибок.

This inspection detects names that should resolve but don't. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Top-level and class-level items are supported better than instance items.

kosyak.png


Ссылки выдаёт нерабочие.
 

Tayrus

Red Team
13.04.2017
365
787
BIT
6
Непонятно зачем использовать сразу два модуля termcolor и colorama, когда одного colorama достаточно для раскрашивания.
Потестил....

Под windows программа не работает, код написан криво, есть несколько ошибок.

This inspection detects names that should resolve but don't. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Top-level and class-level items are supported better than instance items.

Посмотреть вложение 23544

Ссылки выдаёт нерабочие.
У меня с одной колорамой не работает в винде, у меня все запускается и ссылки выдает рабочие(Win8.1 x64)
Вы какие параметры выбираете в интерактивном режиме?
 

explorer

Platinum
05.08.2018
1 080
2 472
BIT
0
У меня с одной колорамой не работает в винде, у меня все запускается и ссылки выдает рабочие(Win8.1 x64)
Вы какие параметры выбираете в интерактивном режиме?

Пробовал по-разному, в том числе полностью как у вас. Ссылки-то идентичные получаются. Нерабочесть ссылок заключается в том что их блокируют все браузеры - протестировал хром, лиса, ишак.

С одной колорамой код пишется легко. Может перепишу попозже.
 

Tayrus

Red Team
13.04.2017
365
787
BIT
6
Пробовал по-разному, в том числе полностью как у вас. Ссылки-то идентичные получаются. Нерабочесть ссылок заключается в том что их блокируют все браузеры - протестировал хром, лиса, ишак.

С одной колорамой код пишется легко. Может перепишу попозже.
Забавно, но я тестил также на IE, Yandex, Firefox и ничего у меня не блочило.
Покажите скрины.
 

explorer

Platinum
05.08.2018
1 080
2 472
BIT
0
Переписал ваш код с одним модулем колорама, смотрите и учитесь, ничего сложного :) (ошибки в самом коде не правил)
Заодно орфографию поправил - адрес пишется с одной буквой с

2.png
Python:
import colorama
colorama.init(autoreset=True)
import socket
import math

class Bcolors:
    GN = '\033[32m'
    R = '\033[91m'


select = 0
res = 0
payload = 0
addr = 0
mixing = 0

def banner():
    s = """
      _____  ____    __  ____   ____  _____  ____   __    ___
     / ___/ /    |  /  ]|    \ |    ||     ||    | /  ]  /  _]
    (   \_ |  o  | /  / |  D  ) |  | |   __| |  | /  /  /  [_
     \__  ||     |/  /  |    /  |  | |  |_   |  |/  /  |    _]
     /  \ ||  _  /   \_ |    \  |  | |   _]  |  /   \_ |   [_
     \    ||  |  \     ||  .  \ |  | |  |    |  \     ||     |
      \___||__|__|\____||__|\_||____||__|   |____\____||_____|
                                                             
    """

    print(Bcolors.GN + s)
    print(Bcolors.R + '                             Author: @Tayrus')

def selector():
    global select
    global payload
    global mixing
    print ('\n')
    print(Bcolors.GN + 'Выберите тип обфускации:')
    print ('\n')
    print(Bcolors.GN + '[1] Hexadecimal')
    print(Bcolors.GN + '[2] Octal')
    print(Bcolors.GN + '[3] Decimal')
    select = input(': ')
    if not select == '1' and not select == '2' and not select == '3':
        print (Bcolors.R + 'Ты выбрал неправильные значения!')
        exit()
    print ('\n')
    print(Bcolors.GN + 'Введите адрес сайта:')
    payload = input(': ')
    print ('\n')
    print(Bcolors.GN + 'Миксовать наш payload(1 или 0)?:')
    mixing = input(': ')

def check():
    global select
    if select == '1':
        Hexadecimal()
    if select == '2':
        Octal()
    if select == '3':
        Decimal()
    if mixing == '1':
        mix()

def getIp():
    global addr
    addr = socket.gethostbyname(payload)


def Hexadecimal():
    global res
    addr2 = addr.split('.')
    numbers = [int(c) for c in addr2]
    res = 'http://' + '.'.join(map(hex, numbers))
    print('\n')
    if mixing == '0':
        print(Bcolors.GN + res)

def Octal():
    global res
    addr2 = addr.split('.')
    numbers = [int(c) for c in addr2]
    res = 'http://' + '.'.join(map(oct, numbers))
    res = res.replace('o','')
    if mixing == '0':
        print(Bcolors.GN + res)

def Decimal():
    global res
    count = 0
    addr2 = addr.split('.')
    numbers = [int(c) for c in addr2]
    for x in numbers:
        if count == 0:
            res = x * math.pow(16,6)
        if count == 1:
            res += x * math.pow(16,4)
        if count == 2:
            res += x * math.pow(16,2)
        if count == 3:
            res += x
        count += 1
    res = 'http://' + str(int(res))
    if mixing == '0':
        print(Bcolors.GN + res)


def mix():
    res3 = 'http://google.com@' + res[7:]
    print(Bcolors.GN + res3)

def main():
    banner()
    selector()
    getIp()
    check()

if __name__ == '__main__':
    main()
 
  • Нравится
Реакции: Tihon49 и Tayrus

Tayrus

Red Team
13.04.2017
365
787
BIT
6
Хром - с 0214.0122.0166.04 идёт редирект на 140.82.118.4 и вываливается это

Посмотреть вложение 23545
Потому что на 140.82.118.4 сертификат не установлен.
Вместо 140.82.118.4 должен быть например ваш фишинг сайт(где установлен сертификат), или C2.

github и facebook были для примера.
 
  • Нравится
Реакции: Tihon49 и explorer

explorer

Platinum
05.08.2018
1 080
2 472
BIT
0
Потому что на 140.82.118.4 сертификат не установлен.
Вместо 140.82.118.4 должен быть например ваш фишинг сайт(где установлен сертификат), или C2.

github и facebook были для примера.

Ясно, дополните эту инфу в статью.

Идея замечательная, но вот только эти варианты выглядят очень подозрительно. Нужно сделать обфускацию без цифр.
 
Последнее редактирование:

explorer

Platinum
05.08.2018
1 080
2 472
BIT
0
Исправил 4 ошибки и 20 предупреждений ;)
Ошибки заключались в том, что вы пытались применить методы для строк к числовым значениям.
Вот теперь ваша программа корректно работает. Да, ещё имена 4-х функций у вас имеют заглавные буквы, на работоспособность не влияет, но это не по фэн-шую :), оставил как есть.

Python:
import socket
import math
import colorama
colorama.init(autoreset=True)


class Bcolors:
    GN = '\033[32m'
    R = '\033[91m'


select = 0
res = 0
payload = 0
addr = str(0)
mixing = 0


def banner():
    s = """
      _____  ____    __  ____   ____  _____  ____   __    ___
     / ___/ /    |  /  ]|    \ |    ||     ||    | /  ]  /  _]
    (   \_ |  o  | /  / |  D  ) |  | |   __| |  | /  /  /  [_
     \__  ||     |/  /  |    /  |  | |  |_   |  |/  /  |    _]
     /  \ ||  _  /   \_ |    \  |  | |   _]  |  /   \_ |   [_
     \    ||  |  \     ||  .  \ |  | |  |    |  \     ||     |
      \___||__|__|\____||__|\_||____||__|   |____\____||_____|
                                                              
    """

    print(Bcolors.GN + s)
    print(Bcolors.R + '                             Author: @Tayrus')


def selector():
    global select
    global payload
    global mixing
    print('\n')
    print(Bcolors.GN + 'Выберите тип обфускации:')
    print('\n')
    print(Bcolors.GN + '[1] Hexadecimal')
    print(Bcolors.GN + '[2] Octal')
    print(Bcolors.GN + '[3] Decimal')
    select = input(': ')
    if not select == '1' and not select == '2' and not select == '3':
        print(Bcolors.R + 'Ты выбрал неправильные значения!')
        exit()
    print('\n')
    print(Bcolors.GN + 'Введите адрес сайта:')
    payload = input(': ')
    print('\n')
    print(Bcolors.GN + 'Миксовать наш payload(1 или 0)?:')
    mixing = input(': ')


def check():
    global select
    if select == '1':
        Hexadecimal()
    if select == '2':
        Octal()
    if select == '3':
        Decimal()
    if mixing == '1':
        mix()


def getIp():
    global addr
    addr = socket.gethostbyname(str(payload))


def Hexadecimal():
    global res
    addr2 = addr.split('.')
    numbers = [int(c) for c in addr2]
    res = 'http://' + '.'.join(map(hex, numbers))
    print('\n')
    if mixing == '0':
        print(Bcolors.GN + res)
        input()


def Octal():
    global res
    addr2 = addr.split('.')
    numbers = [int(c) for c in addr2]
    res = 'http://' + '.'.join(map(oct, numbers))
    res = res.replace('o', '')
    if mixing == '0':
        print(Bcolors.GN + res)
        input()


def Decimal():
    global res
    count = 0
    addr2 = addr.split('.')
    numbers = [int(c) for c in addr2]
    for x in numbers:
        if count == 0:
            res = x * math.pow(16, 6)
        if count == 1:
            res += x * math.pow(16, 4)
        if count == 2:
            res += x * math.pow(16, 2)
        if count == 3:
            res += x
        count += 1
    res = 'http://' + str(int(res))
    if mixing == '0':
        print(Bcolors.GN + res)
        input()


def mix():
    res3 = 'http://google.com@' + res[7:]
    print(Bcolors.GN + res3)
    input()


def main():
    banner()
    selector()
    getIp()
    check()


if __name__ == '__main__':
    main()
 

masscontrolx

Green Team
02.03.2018
43
8
BIT
0
поисковые же палят такие урл, подскажите, как от поисковых их спрятать
 

masscontrolx

Green Team
02.03.2018
43
8
BIT
0
перефразирую, чтобы поисковые не палили партнерские ссылки на сайте
 

Bypass

Green Team
02.02.2018
451
579
BIT
0
Приветствую всех! Я искал в интернете инструменты для обфускации url адресов, но я не нашел таких, и решил написать свой.


p.s
в скрипт добавь плиз чтобы он умел с списком url работать

перефразирую, чтобы поисковые не палили партнерские ссылки на сайте
клоака
 
Последнее редактирование:
  • Нравится
Реакции: Tihon49 и Tayrus
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!