HTTP Basic Auth
We receive a log indicating a possible attack, can you gather information from the .pcap file?
Nos llega una alerta de un posible ataque y lo único que tenemos es un
.pcap con el tráfico de un servidor web. Toca abrirlo con Wireshark y
responder siete preguntas: cuántas peticiones hay, qué servidor es, quién se
conecta y con qué credenciales.
Spoiler: todas las respuestas están en las cabeceras HTTP, porque todo va sin cifrar.
Primer vistazo al pcap
Filtrando por http se ve la conversación entera en diez paquetes. El patrón
se repite: el cliente pide /, el servidor contesta 401 Authorization Required, el cliente vuelve a pedirlo con credenciales y el servidor responde
200 OK.

Pedir, recibir un 401, volver a pedir con credenciales y entrar.
Preguntas
1. Peticiones GET
How many HTTP GET requests are in pcap?
Respuesta: 5
La más rápida: Statistics → HTTP → Packet Counter. Seguramente haya más formas, pero esta te lo da contado y separado por tipo.


Cinco peticiones y las cinco son GET. De las respuestas, tres son 401 y dos 200.
2. Sistema operativo del servidor
What is the server operating system?
Respuesta: FreeBSD
Nos vamos a una respuesta del servidor (por ejemplo, el 200 OK) y abrimos
sus cabeceras. En la cabecera Server, Apache suele indicar entre paréntesis
el sistema operativo:

Una sola cabecera responde a esta pregunta y a las dos siguientes.
3. Software y versión del servidor web
What is the name and version of the web server software?
Respuesta: Apache/2.2.15
4. Versión de OpenSSL
What is the version of OpenSSL running on the server?
Respuesta: 0.9.8n
Las tres salen de la misma línea. Desmontada:
Server: Apache/2.2.15 (FreeBSD) DAV/2 mod_ssl/2.2.15 OpenSSL/0.9.8n
│ │ │ │ └─ versión de OpenSSL
│ │ │ └─ módulo SSL de Apache
│ │ └─ módulo WebDAV
│ └─ sistema operativo
└─ servidor web y versión
5. User-Agent del cliente
What is the client's user-agent information?
Respuesta: Lynx/2.8.7rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.8n
Ahora nos pregunta por el cliente, así que cambiamos de lado: en vez de una
respuesta, abrimos una petición GET de 192.168.63.20 y miramos la
cabecera User-Agent.

Lynx es un navegador en modo texto, de terminal.
6 y 7. Usuario y contraseña
What is the username used for Basic Authentication?
What is the user password used for Basic Authentication?
Respuesta: webadmin y W3b4Dm1n
En la misma petición, justo debajo, está la cabecera Authorization. Es la
petición que manda el cliente después de recibir el 401, y el servidor le
contesta con un 200: las credenciales son buenas.

Wireshark ya lo decodifica solo en la línea Credentials.
Wireshark hace el trabajo, pero se puede comprobar a mano:
echo 'd2ViYWRtaW46VzNiNERtMW4=' | base64 -d
# webadmin:W3b4Dm1n
Aprendizajes
- Base64 no protege nada: Basic Auth sin HTTPS es mandar la contraseña en
texto claro con un paso extra. Si ves
Authorization: Basicen un pcap, tienes las credenciales. - Las cabeceras hablan mucho: una sola línea
Serverdio el sistema operativo, el servidor web y la versión de OpenSSL. Es lo primero que hay que mirar.