tgindex
К

Кошачьи бредни

Статистика
@cat_ravingsрусский

Что-то на хардкорном и не очень. Связь: @daniil159x Чат: https://t.me/+DwW49h-jfZM2NzZi

Последний пост
4 апр.
Последнее чтение
ещё не заходили
Постов за неделю
0
Всего постов
20
Тип
открытый
Язык
русский
В каталоге с
13 авг.
Подписчики
190
−1 за 4 дн.
Сутки
0
0,00%
Неделя
 
Месяц
 
Просмотров на пост
756
20 постов
Вовлечённость
397,9%
к подписчикам
Постов в день
0,0
всего 20
Упоминаний
1
каналов
Охват размещения
оценка
1/24сутки в ленте
1/48двое суток
1/72трое суток

Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.

Посты

  • 4 апр.349196

    Тип struct{} в GoLang Структура — это набор полей. Размер структуры определяется размерами полей и выравниванием между ними. Но если никаких полей нет, то какой будет размер у структуры? Вот в C++ размер такой структуры будет равен одному байту (в стандарте прописано nonzero), а вот в #golang он равен нулю. И это удобно: 🔴пустая структура не требует аллокаций 🔴godoc.org/github.com/bradfitz/iter =) 🔴канал пустых структур — это просто сигнальный канал 🔴мапа map[T]struct{} оказывается сетом В общем, dave.cheney.net/2014/03/25/the-empty-struct Если размер пустой структуры равен нулю, то будет ли у переменной такого типа адрес? Да, будет, причём один для всех: go.dev/play/p/e-zHP1SVrCA. var a, b struct{} fmt.Printf("%p\n", &a) // 0x5a4c40 fmt.Printf("%p\n", &b) // 0x5a4c40 И это адрес глобальной переменной runtime.zerobase. Чем грозит одинаковая адресация? А тем, что в коде выше нельзя различить переменные a и b, даже если упаковать их в интерфейс: var a, b struct{} m := make(map[any]int) m[any(&a)] = 1 m[any(&b)] = 2 fmt.Printf("%v\n", m) // map[0x5a5c40:2] Спека нам говорит:Two interface values are equal if they have identical dynamic types and equal dynamic values or if both have value nil. То есть, вот так переменные будут различимы: type Pupupu struct{} var a, b struct{} var c Pupupu m := make(map[any]int) m[any(&a)] = 1 m[any(&b)] = 2 m[any(&c)] = 3 fmt.Printf("%v\n", a == c) // true // fmt.Printf("%v\n", &a == &c) // mismatched types *struct{} and *Pupupu fmt.Printf("%v\n", m) // map[0x5a5c80:3 0x5a5c80:2] Поэтому при использовании интерфейсов для идентификации объектов пустые структуры могут сломать логику. Вычислить засланца можно так: func IsZeroSized(val any) bool { t := reflect.TypeOf(val) if t == nil { return false } if t.Kind() == reflect.Pointer || t.Kind() == reflect.Slice { t = t.Elem() } return t.Comparable() && t.Size() == 0 } Ещё у пустой структуры есть вот такие инкарнации: 🤨 make([]struct{}) — такой слайс пустых структур любого размера будет ссылаться на тот же runtime.zerobase. При этом ничего не аллоцируется, и именно на таком слайсе основана библиотека bradfitz/iter 🤔 [0]int — массив нулевой длины любого типа. Его свойства можно наблюдать в тесте go/test/zerosize.go 🫥 любые аллокации нулевого размера 🗣 ещё парочка кейсов, которые можно найти через поиск по репе гошки

  • 2 янв.527107

    без подписи

  • без подписи

  • без подписи

  • без подписи

  • Компьютерных угроз пост Недавно посмотрел запись доклада "Бесконечная война в памяти: ретроспектива методов защиты от бинарных угроз" с последнего хайлоада. Рассказывают, какие существуют проблемы с памятью, какие придумали митигации и какие у этих митигаций проблемы. Рекомендую посмотреть, когда он выйдет, а пока можно чекнуть презентацию. Также существует сайт хактрикс про пентест и безопасность, где собрано гигантское количество полезной информации с тулами: методологии, линукс, винда, мак, мобилки, нетворкинг, веб и пывн. И на соседнем поддомене есть хактрикс клауд про кубер и ci/cd. (Надо бы почаще заглядывать туда и скроллить содержимое) Ну и конечно генштаб — MITRE матрицы: для линукса, винды, контейнеров и всё в одном. Ещё есть перевод от позитивов. Кидайте в коммах ваши интересные источники 😈 #pentest #pwn #collection #linux

  • Авторские врайтапы на T-CTF 25 В этом году мне выпала честь делать таски на этот CTF. Всего сделал 3 таска: капитолий, капибассейн и капибудильник. Капитолий был демо таском и для него делали онлайн разбор, пост выше. Капибассейн был из категории easy и был в обеих лигах. В нём давался исходник, бот его компилировал и запускал. Игрокам надо было починить компиляцию и достать флаг. Оригинальный врайтап живёт в гитхабе: tctf-25/basin/README.md. Помимо описанного решения игроки нашли опцию -wrapper, которая оборачивает вызов компилятора, получали RCE на момент компиляции и не находили new_secret.txt. Не находили резонно, ибо как часто вы компилируете и запускаете на проде?) Флаг с секретом лежал рядом с бинарём во время запуска. Поэтому игроки, шедшие через -wrapper, всячески патчили или подменяли main бинарь. Капибудильник давали только в лиге "безопасников" и он представлял из себя таск на повышение привилегий и побег из chroot'а. Таск вдохновлен этим постом, где схожая уязвимость была в ftp демоне в 1998 году. Врайтап лежит тут: tctf-25/buzzer/README.md #ctf #linux #writeups

  • без подписи

  • без подписи

  • без подписи

  • без подписи

  • без подписи

  • без подписи

  • без подписи

  • без подписи

  • без подписи

  • без подписи

  • без подписи

  • без подписи

  • без подписи