user.txt

  • nmap 구동

  • 21 - ftp ; anonymous ftp 설정 문제는 아닌가보다

  • 22 - ssh ; 주어진 id/pw가 없으니, 일단 살펴볼 수 없다

  • 사실상 80 포트가 열려있다는 것은 웹을 통해 진입하여야 한다

  • 특정 서비스의 관리 페이지 같은 느낌이 들고, 메뉴 중 Security snapshot 메뉴는 /data/number 의 형태로 구성되어 있다

  • 이를 통해 number 0~3 ? 까지의 데이터가 존재했고, download 버튼을 통해 pcap 파일을 다운로드 받을 수 있었다

  • 매우 친절하게도, 0번째 pcacp 파일에서 nathan의 ftp 로그인 패킷이 캡쳐되어 있었고, 이를 기반으로 로그인을 하였다

  • 처음에 확인했던, ssh 포트도 해당 계정으로 동일하게 로그인 시도하였고, 성공하였다
이처럼 FTP, SSH 계정이 동일한 경우가 존재함
- FTP 계정이 서버의 OS 계정(시스템 계정)을 그대로 사용하는 경우
  ; vsftpd, proftpd 등에서 PAM 인증으로 설정된 경우
 
* 시스템 계정 연동이면, FTP 계정 탈취는 곧 SSH 접근 가능성으로 이어지므로 위험도가 매우 높음
그래서, 실무에서는 FTP보다 SFTP(SSH 기반)을 쓰거나, FTP 계정을 시스템 계정과 분리하는 것을 권장하고 있음

root.txt

  • 권한 상승을 위해, 내부 경로를 좀 뒤져보았으나 별다른 정보는 획득하지 못하여 linpeas를 사용하였다
  • linpeas는 local에서 서버를 띄워 curl 요청을 통해 파일을 이동하였다

* linpeas 쉽게 보기 위해, 색상을 보존하여 파일로 추출
# ./linpeas.sh 2>&1 | tee linpeas_output.txt
 
* linpeas 확인 순서
1. 95% PE 확인
2. Capabilities
3. Sudo 권한
4. SUID 바이너리 < GTFOBins에서 찾아보기
5. cronjob

1. Capabilites란?
  리눅스는 권한이 root / user 두가지만 존재
  그래서, ping만 쓰려고 해도, raw 소켓이 필요해서 root 권한이 필요했었는데,
  비효율적인 부분을 개선하고자 root 권한을 쪼개서 필요한 것만 줄 수 있도록 한 것이 Capabilites
예시) root 권한을 아래처럼 분리
cap_net_raw       → raw 소켓 사용 (ping)
cap_net_bind      → 1024 이하 포트 바인딩
cap_setuid        → UID 변경
cap_dac_override  → 파일 권한 무시
 
2. cap_setuid+ep 취약점
  +ep ?
  e = Effective -> 실행 즉시 활성화
  p = Permitted -> 사용 허가됨
  i = Inherited -> 자식 프로세스에 상속
 
즉, +ep면 바이너리가 실행되자마자 해당 capability가 즉시 발동됨
 
  cap_setuid ?
  setuid()는 일반 유저가 호출 시, 무시됨
  자기 자신만 UID를 바꿀 수 있으나, cap_setuid가 있으면 누구든 UID를 0(root)로 바꿀 수 있음
페이로드 : /usr/bin/python3.8 -c 'import os; os.setuid(0); os.system("/bin/bash")'
 
1. python3.8 실행

2. cap_setuid+ep 발동 (즉시 활성화)

3. os.setuid(0) 호출
   → 원래 일반유저는 불가능
   → cap_setuid 덕분에 UID를 0으로 변경 성공

4. os.system("/bin/bash")
   → 현재 UID가 0이므로 root 쉘 실행

5. root@cap:#

마치며,,

  • capability 취약점에 대해 공부하였다 ; root의 권한을 쪼개기 위해 capa를 바이너리 파일에 부여를 한 것임
  1. 80 포트가 열려 있어서 웹 서비스를 통해 접근 하였음
  2. 웹 경로를 기반으로 다음 스텝으로 넘어가는 힌트를 찾을 수 있었음
  3. pcap이 친절하였고, 계정을 탈취 ftp와 os 계정이 동일하였으므로 서버 장악에 수월하였음
  4. 서버 장악 후 단서를 얻지 못해 linpeas를 사용
  5. linpeas 기반으로 cap(물론, 문제 이름이 cap이기도 함..ㅎ) 취약점 발견 활용하여 root 획득