• XSS.stack #1 – первый литературный журнал от юзеров форума

VT check

Pernat1y

CPU register
Пользователь
Регистрация
19.04.2008
Сообщения
1 732
Решения
1
Реакции
1 293
Гарант сделки
1
Депозит
0.0002
Простой скрипт для проверки слива на VT. Ищет файл по хешу, используя публичный АПИ.
Всё нужное вбивать в hashes в формате { "хеш": "человеческое название" }

Python:
#!/usr/bin/python
# Docs: https://www.virustotal.com/en/documentation/public-api/

import http.client
import json

vt_api_key = '4e3202fdbe953d628f650229af5b3eb49cd46b2d3bfe5546ae3c5fa48b554e0c'  # SysInternals
hashes = {
    'a5e980aac32d9c7af1d2326008537c66d55d7d9ccf777eb732b2a31f4f7ee523': 'Cobalt Strike 4.5 (December 14, 2021)',
    '8331a77fb2f81ce969795466f8f441f02813789c24b47d0771ffdceddf8d91fe': 'Cobalt Strike 4.4 Linux Distributions Package',
    'f82531f3e18de0801bf18a4f65070cd927b656c3ef4b9ae8fb2c666338e65352': 'Cobalt Strike 4.2 Linux Distributions Package',
    '7af9c759ac78da920395debb443b9007fdf51fa66a48f0fbdaafb30b00a8a858': 'Cobalt Strike 4.4 Licensed (cobaltstrike.jar)'
}

for k, v in hashes.items():
    conn = http.client.HTTPSConnection("www.virustotal.com")
    conn.request('GET', f'/vtapi/v2/file/report?apikey={vt_api_key}&resource={k}')
    res = conn.getresponse()
    if res.status == 200:
        data = res.read()
        if data:
            data_decoded = json.loads(data)
            if data_decoded['response_code'] == 1:
                print(f'{v} found: https://www.virustotal.com/gui/search/{k}')
            else:
                print(f'{v} not found')
        else:
            print('Unable to get page content')
    else:
        print('Return code != 200. Check API key and rate limits.')
    conn.close()

Как-то так:
1639499083052.png
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Наверное, хорошая идея дергать апишку через тор на всякий случай, а то мало ли, какая информация об использовании их апи и как долго хранится на серверах вирустотала.
 
Наверное, хорошая идея дергать апишку через тор на всякий случай, а то мало ли, какая информация об использовании их апи и как долго хранится на серверах вирустотала.
Возможно, но встроенные функции пайтона не дружат с socks (поправьте, если ошибаюсь), а ставить дополнительный либы ради такого не особо хотелось.

Зря толко api_key спалил, или у них нет ограничение на суточное количество запросов/200-х респонсов?
Он и так доступен, примерно, везде. Process Explorer его использует.
 
Действительно, есть траблы с socks-ами.

Но есть модификация стандартной библиотеки requests

Ставится командой:
Bash:
pip install requests[socks]

Работает примерно так:
Python:
import requests

proxies = {
    'http': 'socks5h://127.0.0.1:9150',
    'https': 'socks5h://127.0.0.1:9150'
}


def make_request():
    with requests.session() as session:
        session.proxies = proxies
        response = session.get(
            url="http://xssforum7mmh3n56inuf2h73hvhnzobi7h2ytb3gvklrfqm7ut3xdnyd.onion/",
            headers=headers,
            timeout=10,
        )
        return response.text
 
Классная идея, чуть-чуть полирнул, чтобы было приятнее использовать.

Теперь скрипт:
1. Принимает имена файлов в качестве аргументов (всё равно ведь хеш вычислять, почему бы не делать это на ходу)
2. Каждую сессию пропускает через тор socks5 прокси
3. Учитывает публичные лимиты на количество запросов к API ЧЕГО?! 15 раз в секунду!? Ну дают ребята, хотя, дарёному коню.., если что, можно поправить через константу рейт лимит, сделал упрощённо через sleep(время).
4. Выдаёт только положительные результаты (обычно то, что не было залито, нас не интересует, но если вдруг что - можно добавить одну ветку в if и жизнь наладиться)

Python:
#!/usr/bin/python
# Docs: https://www.virustotal.com/en/documentation/public-api/

import os, hashlib, sys
import requests
from time import sleep


hasher = hashlib.sha256()   # sha256 is used by vt
BLOCKSIZE = 65536           # Buffer size for sha256 calculating
vt_api_key = '4e3202fdbe953d628f650229af5b3eb49cd46b2d3bfe5546ae3c5fa48b554e0c'  # SysInternals


REQUESTS_PER_MINUTE = 4 # public rate
API_DELAY_TIME_SEC = 60 / REQUESTS_PER_MINUTE


def calculate_sha256(file_path):
    with open(file_path, 'rb') as cur_file:
        buf = cur_file.read(BLOCKSIZE)

        while len(buf) > 0:
            hasher.update(buf)
            buf = cur_file.read(BLOCKSIZE)

    return hasher.hexdigest()


def calculate_argv_files_hash():
    hash_table = {} # key - hash, value - filename

    for file in sys.argv[1:]:
        if not os.path.isfile(file):
            print(f"\t!!! File is not found: {file}")
            continue

        hash = calculate_sha256(file)
        hash_table[hash] = file

    return hash_table


def make_session(use_tor_proxy=True):
    session = requests.session()
    if(use_tor_proxy):
        session.proxies['http'] = 'socks5h://localhost:9050'
        session.proxies['https'] = 'socks5h://localhost:9050'
    return session

hash_table = calculate_argv_files_hash()


session = make_session()
for hash_n, filename in hash_table.items():
    res = session.request("GET", url=f"https://virustotal.com/vtapi/v2/file/report?apikey={vt_api_key}&resource={hash_n}")
    STATUS_OK = 200

    # Отладочка :з
    # if res.status_code != STATUS_OK:
    #    print("SHIT HAPPENED")
    #    print(res.status_code)
    #    exit(0)
   
    if res.status_code == STATUS_OK:
        data = res.json()
        was_checked = data["response_code"] == 1
        if was_checked:
            print(f"{filename} hash is FOUND in VirusTotal dbs")

    sleep(API_DELAY_TIME_SEC)

   

session.close()
 
Так там вроде и так есть поиск тыц или не понял темы, после пьянки если что извиняйте
1639617693155.png
 
А как качать нужный файл с тотала ?
Нужен доступ к VT Intelligence. Он денег стоит.

Так там вроде и так есть поиск тыц или не понял темы, после пьянки если что извиняйте Посмотреть вложение 29808
Есть. Скрипт для автоматизации сего процесса. Например для массовой проверки на слитие билдов.
Ну или для мониторинга на добавление интересных файлов (кобальт :) ).
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх