~ptkrm ❤︎!

| 2 > /dev/null
Jul 15 2018
  1. URL
  2. Ejercicio
  3. Solucion

a. Client side validation is so secure?

Inspeccionar codigo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script>
// Look's like weak JavaScript auth script :)
$(".c_submit").click(function(event) {
event.preventDefault()
var u = $("#cuser").val();
var p = $("#cpass").val();
if(u == "admin" && p == String.fromCharCode(74,97,118,97,83,99,114,105,112,116,73,115,83,101,99,117,114,101)) {
if(document.location.href.indexOf("?p=") == -1) {
document.location = document.location.href + "?p=" + p;
}
} else {
$("#cresponse").html("<div class='alert alert-danger'>Wrong password sorry.</div>");
}
});
</script>

u = “admin”
p = String.fromCharCode(74,97,118,97,83,99,114,105,112,116,73,115,83,101,99,117,114,101) -> “JavaScriptIsSecure”

Ejecutar consola del chrome o firefox o nodejs

FLAG-66Jq5u688he0y46564481WRh

b. Is hashing more secure?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script type="text/javascript" src="/script/sha1.js"></script>
<script>
// Look's like weak JavaScript auth script :)
$(".c_submit").click(function(event) {
event.preventDefault();
var p = $("#cpass").val();
if(Sha1.hash(p) == "b89356ff6151527e89c4f3e3d30c8e6586c63962") {
if(document.location.href.indexOf("?p=") == -1) {
document.location = document.location.href + "?p=" + p;
}
} else {
$("#cresponse").html("<div class='alert alert-danger'>Wrong password sorry.</div>");
}
});
</script>

Explicar que es un hash?

Sha1.hash(p) == “b89356ff6151527e89c4f3e3d30c8e6586c63962”)

p = adminz

FLAG-bXNsYg9tLCaIX6h1UiQMmMYB

c. Then obfuscation is more secure?

1
2
3
4
<script>
// Look's like weak JavaScript auth script :)
var _0xc360=["\x76\x61\x6C","\x23\x63\x70\x61\x73\x73","\x61\x6C\x6B\x33","\x30\x32\x6C\x31","\x3F\x70\x3D","\x69\x6E\x64\x65\x78\x4F\x66","\x68\x72\x65\x66","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x3C\x64\x69\x76\x20\x63\x6C\x61\x73\x73\x3D\x27\x65\x72\x72\x6F\x72\x27\x3E\x57\x72\x6F\x6E\x67\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x20\x73\x6F\x72\x72\x79\x2E\x3C\x2F\x64\x69\x76\x3E","\x68\x74\x6D\x6C","\x23\x63\x72\x65\x73\x70\x6F\x6E\x73\x65","\x63\x6C\x69\x63\x6B","\x2E\x63\x5F\x73\x75\x62\x6D\x69\x74"];$(_0xc360[12])[_0xc360[11]](function (){var _0xf382x1=$(_0xc360[1])[_0xc360[0]]();var _0xf382x2=_0xc360[2];if(_0xf382x1==_0xc360[3]+_0xf382x2){if(document[_0xc360[7]][_0xc360[6]][_0xc360[5]](_0xc360[4])==-1){document[_0xc360[7]]=document[_0xc360[7]][_0xc360[6]]+_0xc360[4]+_0xf382x1;} ;} else {$(_0xc360[10])[_0xc360[9]](_0xc360[8]);} ;} );
</script>

FLAG-5PJne3T8d73UGv4SCqN44DXj.

  1. URL: https://backdoor.sdslabs.co/challenges/MIGHTY-PHP
  2. Ejercicio: Mighty-PHP
  3. Objetivo: Conseguir el flag ubicado en el archivo flag.php
  4. Pistas:

Dentro de las reglas de Backdoor se comenta que no es posible dar las soluciones problemas a los distintos retos de su website, pero si es recomendado dar ciertas pistas para como lograr su solución.

En el problema es posible acceder al código fuente en: http://hack.bckdr.in/MIGHTY-PHP/source.txt

Para la solución hay prestar atención en las siguientes lineas de código:

1
include 'secret.php'; //contains the secretpassword

Como se menciona en el reto, este archivo no esta disponible así que no esta de mas revisar si es cierto o no.

1
2
3
4
if (array_key_exists(userid, $_REQUEST) && array_key_exists(pass, $_REQUEST)){
if (!strspn($_REQUEST['userid'], "123456789")){
if ($_REQUEST['userid'] == $admin_id && $_REQUEST['pass'] == $secretpassword){

El problema del ejercicio se encuentra exactamente aquí, hay que entender como funciona strspn [Pista: revisar por que al verificar no esta el 0 en el String] y como PHP interpreta cuando se utiliza una variable no declarada ($secretpassword).

Lo demás es ensayo y error con curl

1
$ curl "http://hack.bckdr.in/MIGHTY-PHP/" + parámetros

Feliz Caza!

  1. URL: https://www.hackthissite.org/missions/realistic/7/
  2. Ejercicio: Realistic 7
  3. Meta: Localizar la sección administrador del website.

    ..There is an admin section on that website somewhere, perhaps hidden among their directory structure…

  4. Solución:

Arrancamos evaluando el código fuente del sitio y nos fijamos en el detalle que los vínculos de Patriotism, Long Live Bush y Nuke the Bastards!, que apuntan al mismo archivo solo que cambia el parámetro el valor del parámetro GET file.

1
2
3
4
5
6
7
8
9
10
11
12
<!-- Url -->
https://www.hackthissite.org/missions/realistic/7/showimages.php?file={valor}
*patriot.txt, bush.txt, war.txt*
<!-- Codigo -->
<center><b>Help Spread The Word!</b></center><br />
Please download and print these posters and put them up at your office, workplace, church or school!<br /><br />
<center><a href="showimages.php?file=patriot.txt">Patriotism</a> |
<a href="showimages.php?file=bush.txt">Long Live Bush</a> |
<a href="showimages.php?file=war.txt">Nuke the bastards!</a>
</center>

Intentamos acceder al panel de admin, pero nos retorna que al ruta es inexistente.

Así que decido explorar donde se encuentran alojadas las imágenes:

La ruta hacia el panel admin es la siguiente:

Pero esta se encuentra protegida por contraseña, así que utilizaremos showimages.php para leer el archivo .httpasswd y poder extraer la clave.

Esto nos retorna la información que buscamos:

Simplemente utilizamos nuestro siempre fiel John The Ripper y voilá!

1
2
3
4
5
6
$ echo 'administrator:$1$AAODv...$gXPqGkIO3Cu6dnclE/sok1' > pass.txt
$ john --show pass.txt
"administrator:shadow"
1 password hash cracked, 0 left

1