Forwarded from Whitehat Lab
# Get commands with basic output
kubectl get services
kubectl get pods --all-namespaces
kubectl get pods -o wide
kubectl get deployment my-dep
kubectl get pods
kubectl get pod my-pod -o yaml
# Describe commands with verbose output
kubectl describe nodes my-node
kubectl describe pods my-pod
# List Services Sorted by Name
kubectl get services --sort-by=.metadata.name
# List pods Sorted by Restart Count
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
# List PersistentVolumes sorted by capacity
kubectl get pv --sort-by=.spec.capacity.storage
# Get the version label of all pods with label app=cassandra
kubectl get pods --selector=app=cassandra -o \
jsonpath='{.items[*].metadata.labels.version}'
# Retrieve the value of a key with dots, e.g. 'ca.crt'
kubectl get configmap myconfig \
-o jsonpath='{.data.ca\.crt}'
# Retrieve a base64 encoded value with dashes instead of underscores.
kubectl get secret my-secret --template='{{index .data "key-name-with-dashes"}}'
# Get all worker nodes (use a selector to exclude results that have a label
# named 'node-role.kubernetes.io/control-plane')
kubectl get node --selector='!node-role.kubernetes.io/control-plane'
# Get all running pods in the namespace
kubectl get pods --field-selector=status.phase=Running
# Get ExternalIPs of all nodes
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
# List Names of Pods that belong to Particular RC
# "jq" command useful for transformations that are too complex for jsonpath, it can be found at https://jqlang.github.io/jq/
sel=${$(kubectl get rc my-rc --output=json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"')%?}
echo $(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name})
# Show labels for all pods (or any other Kubernetes object that supports labelling)
kubectl get pods --show-labels
# Check which nodes are ready
JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \
&& kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"
# Check which nodes are ready with custom-columns
kubectl get node -o custom-columns='NODE_NAME:.metadata.name,STATUS:.status.conditions[?(@.type=="Ready")].status'
# Output decoded secrets without external tools
kubectl get secret my-secret -o go-template='{{range $k,$v := .data}}{{"### "}}{{$k}}{{"\n"}}{{$v|base64decode}}{{"\n\n"}}{{end}}'
# List all Secrets currently in use by a pod
kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq
# List all containerIDs of initContainer of all pods
# Helpful when cleaning up stopped containers, while avoiding removal of initContainers.
kubectl get pods --all-namespaces -o jsonpath='{range .items[*].status.initContainerStatuses[*]}{.containerID}{"\n"}{end}' | cut -d/ -f3
# List Events sorted by timestamp
kubectl get events --sort-by=.metadata.creationTimestamp
# List all warning events
kubectl events --types=Warning
# Compares the current state of the cluster against the state that the cluster would be in if the manifest was applied.
kubectl diff -f ./my-manifest.yaml
# Produce a period-delimited tree of all keys returned for nodes
# Helpful when locating a key within a complex nested JSON structure
kubectl get nodes -o json | jq -c 'paths|join(".")'
# Produce a period-delimited tree of all keys returned for pods, etc
kubectl get pods -o json | jq -c 'paths|join(".")'
# Get a deployment's status subresource
kubectl get deployment nginx-deployment --subresource=status
# dump pod logs
kubectl logs my-pod
# dump pod logs, with label name=myLabel
kubectl logs -l name=myLabel
# dump pod logs for a previous instantiation
kubectl logs my-pod --previous
# dump pod container logs (stdout, multi-container case)
kubectl logs my-pod -c my-container
kubectl logs -l name=myLabel -c my-container
kubectl logs my-pod -c my-container --previous
kubectl logs -f my-pod
#kuber #k8s #kubectl #cheatsheet
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from ESCalator
Сегодня в нашем обзоре технически интересный и многофункциональный руткит для Linux — Puma, недавно исследованный коллегами из Elastic Security Labs и Solar 4RAYS.
Puma представляет собой комплексный руткит уровня ядра (LKM), нацеленный на длительное скрытное пребывание в системе и кражу учетных данных для перемещения в инфраструктуре жертвы. Закрепляется в системе путем подмены штатного cron на модифицированный вредоносный аналог, состоящий из нескольких компонентов:
1️⃣ Загрузчик (
wpn.bin) — отвечает за корректную установку модуля ядра.2️⃣ Легитимный cron (
tgt.bin) — обеспечивает исправную работу cron, чтобы жертва не заметила подмены.3️⃣ LKM-модуль (
audit) — основной компонент для перехвата системных вызовов и функций ядра Linux. Благодаря ему модуль эффективно скрывает процессы, файлы, директории и сетевые соединения, а также перехватывает чувствительную информацию, такую как учетные данные и криптографические ключи.4️⃣ Бэкдор (
libs.so) — обеспечивает связь с C2-сервером, получение команд от злоумышленников и передачу результатов.🎯 Любопытная деталь
Помимо стандартного удаленного управления через C2-сервер в Puma используется и локальное, реализованное через переопределенный системный вызов rmdir: при наличии определенных аргументов руткит интерпретирует вызов как команду и возвращает инициировавшему процессу результат выполнения. Так, бэкдор использует этот механизм, чтобы запросить у модуля конфигурацию удаленного сервера или отобразить перехваченные конфиденциальные данные.
🔎 Что нам удалось обнаружить
Анализируя Puma, мы выявили в LKM-модуле важную уязвимость: он не проверяет, какой именно процесс вызывает переопределенный rmdir для выполнения команд. Таким образом, вызвав rmdir с определенными аргументами, можно однозначно определить присутствие руткита в системе.
📌 Почему это важно
Уязвимость трудноустранима: злоумышленники, используя возможности бэкдора, могут обновлять лишь его код, но не код загруженного в систему модуля ядра. Для этого потребуется значительно больше усилий. Таким образом, уязвимость можно использовать для быстрого детекта Puma в инфраструктуре.
🐍 Для удобства мы написали небольшой Python-скрипт, который поможет вам определить руткит в системе:
import ctypes
import subprocess
import os
SYS_rmdir = 84
buffer_size = 16
path_buf = ctypes.create_string_buffer(buffer_size)
ctypes.memmove(path_buf, b"zarya.u\0", 7)
libc = ctypes.CDLL("libc.so.6", use_errno=True)
ret = libc.syscall(SYS_rmdir, path_buf)
try:
proc = subprocess.Popen(
"lsmod | grep audit",
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True
)
output, _ = proc.communicate()
if output.strip():
path_buf2 = ctypes.create_string_buffer(buffer_size)
ctypes.memmove(path_buf2, b"zarya.t.0\0", 9)
ret2 = libc.syscall(SYS_rmdir, path_buf2)
if ret2 == 0:
print(f"Pumakit detected on this machine, module info:\n{output.strip()}")
else:
print("Pumakit wasn't detected at this machine")
else:
print("Pumakit wasn't detected at this machine")
except Exception as e:
print("Error:", e)
Не самый типичный случай — когда уязвимость играет не против защитника, а ему на руку. Такое бывает нечасто, но именно это дает возможность для точного детекта.
⚠️ Если вы обнаружили Puma, то в инфраструктуре почти наверняка есть и другое ВПО. Обязательно обратитесь за помощью к специалистам по реагированию на инциденты информационной безопасности.
#TI #detect #malware #linux
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Whitehat Lab
Неплохая шпаргалка по бинарным файлам,
#windows #redteam #powershell #mmc
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Поросёнок Пётр
Eсть у меня один приятель, с которым время от времени случаются продуктивные коллабы на bug bounty. Причём он даже не багхантер, а скорее разработчик на консалтинге, который однажды соприкоснулся с моим репортом.
В очередной раз он притащил в наш чат какие-то результаты в виде self-XSS. Но, к моему удивлению, он не оставил эту историю как есть, а допихал self-XSS через wkhtmltopdf и wicked_pdf(Ruby wrapper) в максимально опасную RCE. Причём с RCE его явно хотели прокатить в оценке критичности, ну и я ему подсказал, в каких файлах можно пошариться для определения действительно правильной критичности. В итоге он получил заслуженный critical. И даже написал статейку об этой находке.
PS: мне кажется я бы даже не стал пытаться допинывать self-xss. Но видимо пришло время пересмотреть свои взгляды на мир client-side issues🙈
https://medium.com/@handball10/from-self-xss-to-rce-in-ruby-on-rails-1f9f2d33c1cb
В очередной раз он притащил в наш чат какие-то результаты в виде self-XSS. Но, к моему удивлению, он не оставил эту историю как есть, а допихал self-XSS через wkhtmltopdf и wicked_pdf(Ruby wrapper) в максимально опасную RCE. Причём с RCE его явно хотели прокатить в оценке критичности, ну и я ему подсказал, в каких файлах можно пошариться для определения действительно правильной критичности. В итоге он получил заслуженный critical. И даже написал статейку об этой находке.
PS: мне кажется я бы даже не стал пытаться допинывать self-xss. Но видимо пришло время пересмотреть свои взгляды на мир client-side issues🙈
https://medium.com/@handball10/from-self-xss-to-rce-in-ruby-on-rails-1f9f2d33c1cb
Forwarded from Whitehat Lab
Продвинутый REST API фаззер с высокой скоростью работы. Строит HTML отчеты по окончании. Очень подробная документация на официальном сайте. Написан на
UPD. Большое обновление отличного инструмента до 13ой версии - notes
Запуск в режиме black box:
cats --contract=openapi.yml -H "Authorization=$token" --server=https://api-url.com -b -k
Запуск в режиме context mode:
cats --contract=openapi.yaml --server=http://localhost:8080 --headers=headers.yml --refData=referenceData.yml
Запуск в режиме continuous fuzzing:
cats random --contract=openapi.yaml --server=http://localhost:8080 -H "API-KEY=$token" --mc 500 --path "/users/auth" -X POST --stopAfterTimeInSec 10
📚 Тестируем Github API с CATS
#soft #cats #java #fuzzer
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Пентестер на мотоцикле
На днях, гуляя по теневому ресурсу, обнаружил сомнительный мануал по крупному заработку. Автор утверждает, что за 3 дня заработал этим способом ~$3000. Я решил изучить мануал и эксплойт.
Первое, на что я обратил внимание, — это на позитивные комментарии к посту, а именно на эти аккаунты. Они были созданы в один и тот же день, а также комментируют одни и те же посты с подобными сомнительными заработками.
▎ В чём суть легенды мануала?
В прикрепленном PDF (чист от вирусов) мануал по использованию эксплойта для сервиса G2A (торговая площадка, специализирующаяся на игровой продукции). Эксплойт, вставленный в браузер расширением Tampermonkey, якобы меняет часовой пояс браузера всякий раз, когда мы делаем новый заказ на G2A. Это приводит к тому, что заказ будет отмечен как "Истёк" на платежном процессоре G2A - Bitbay (биржа по торговле криптовалютой), однако заказ не будет отмечен как истёкший на стороне G2A. Деньги будут мгновенно возвращены на кошелек Bitbay, если эта транзакция на большую сумму (более 0,001 BTC ≈ 6518 руб на данный момент). В итоге товар получен, а деньги возвращены. Также в мануале совет, что именно покупать на G2A с данным скриптом — купоны Amazon на $100-500, которые потом можно перепродать другим.
Звучит привлекательно
▎ Разбираемся
Оказывается, существует вероятность (точно не выявлено, но множество подозрений), что в страницу подставляется мошеннический QR-код для оплаты вместо официального. И под видом того, что вылезает оплата со сменой часового пояса, на самом деле деньги улетят мошеннику — автору скрипта.
Решил проверить, работает ли вообще данный развод на практике. На всякий случай скрипт я вставлял в чистой песочнице Windows, мало ли что в этом скрипте может храниться. И да. После нажатия "Оформить заказ" в корзине мне вылез alert "Timezone changed! Press OK to continue". На странице вылезло окно оплаты биткоинами QR-кодом. Если набрать слишком маленькую корзину (до 0,001 BTC, то вылезает alert с предупреждением, что эксплойт не сработает).
Дополнительное замечание: без использования данного кода в расширении браузера из корзины идёт редирект на вариацию оплаты, а после выбора оплаты биткоинами происходит ещё редирект на страницу с оплатой. Но с использованием "эксплойта" окно оплаты биткойнами появляется поверх корзины (которое ещё и нельзя закрыть), что дополнительно вызывает сильные подозрения в правдивости эксплойта.
Я пробовал поосинтить BTC адреса, но никакой информации в интернете я про них не нашел. Это новые кошельки. Генерируются каждый раз новые при повторной попытке оплатить заказ.
Не стал пытаться оплачивать, потому что был уверен в том, что это просто развод социальной инженерией, где скамер скамит скамеров. С большей вероятностью эти деньги бы никто и не вернул, лишь бы проспонсировали злоумышленника-автора скрипта. Плюс непонятно, на что направлено такое спонсорство: в руки злоумышленника или каким-то запрещенным организациям в РФ? Будьте с этим предельно осторожны и в принципе не пробуйте чёрные способы заработка, иначе можно надолго присесть.
После подачи в репорт автор и ветка обсуждения были быстро заблокированы модерацией сайта.
Please open Telegram to view this post
VIEW IN TELEGRAM