교육목표
1) 멀웨어 분석
2) 포렌식 분석
3) 권한 상승 (CTF)
4) reverse 를 통한 의사코드(가상코드)생성
5) Exploit 코드 개발 (BoF, FSB)
Level 1
Backdoor 의 이해
악의적인 사용자가 시스템 보안 취약점을 응용하여 고안된 프로그램, 사용자 인증 등 정상적인절차를 거치지 않고 응용프로그램 또는 시스템에 접근 할 수 있는 프로그램 대표적으로 reverse_tcp, bind_tcp 가 있다.
풀이
level1 으로 접근진행. 내부를 확인해본다.
hint file 확인 시 "level2 권한에 setuid가 걸린 파일을 찾는다" 라는 문구 기반으로 추적을 시작한다.
find CMD를 통해 setuid의 값을 가지고 있는 파일을 찾았다, 해당 파일을 실행해본다.
level 2 권한으로 CMD를 실행할 수 있다고 한다. 권한 확인을 위해 id 값을 이용하여 level 2 권한임을 확인할 수 있다.
bash CMD를 통해서 level2의 shell이 열리는지 확인해보자
해당 프로그램으로 인해 level2의 bash shell 이 열린것으로 확인된다.
my-pass CMD를 통해서 level2의 Password를 획득할 수 있었다. 프로그램을 종료하고 telnet을 통하여 level2로 접속을 시도한다.
접속성공!
Level 2
편집기 백도어의 이해
vi/vim 편집기 내에서 외부 명령어를 실행할 수 있다. lastline 모드에서 ! 를 활용하면 편집기를 빠져나가지 않은 상태에서 CMD 를 활용할 수 있다.
풀이
이전 크랙한 정보를 활용하여 level2로 접속한다.
ID : level2
PW : hacker or cracker
이번에도 힌트 파일을 우선적으로 확인하여 키워드를 얻는다.
편집기 내에서 CMD를 활용하는 문제로 사료된다. set-uid로 level3권한이 있는 파일을 찾는다.
find CMD를 활용해서 level3 user의 권한이 있는 파일을 확인, 해당 파일을 열어본다.
vi 편집기를 통해서 id CMD 를 입력해보자 예상대로라면 출력결과값이 level3의 권한이 있을것이다.
BINGO! level1 을 클리어했던것처럼 bash 명령어를 통해 level3의 Shell이 열리는지 확인한다.
level3 uid를 부여받은 bash shell이 열린걸 확인할 수 있다 비밀번호를 크랙해보자. my-passwd CMD 입력
level3의 password 를 크랙했다. 비밀번호는 "can you fly?" telnet을 통해서 로그인시도를 한다.
level3에 도착했다 clear~~~
Level 3
system('CMD') 함수의 취약점
프로세스를 가져와서 실행하는 C언어 함수, 프로세스가 종료되지않는다는점을 활용하여 해당 내용이 있는 소스코드에 Injection 공격을 통해 악의적인 코드를 삽입해보자.
풀이
level3 사용자로 접속.
ID : level3
PW : can you fly ?
이번에도 hint 파일을 먼저 확인해보자.
autodig CMD 의 소스가 나왓다,해당 내용을 활용하여 level4 권한을 얻으라고한다, 코드를 분석해보자.
int main(int argc, char **argv){ # int argc : main 함수에 전달되는 정보의 갯수를 의미. (인자 갯수로 구분, 실행 파일도 인자로 침) # char **argv : main 함수에 전달되는 실제 정보, 문자열의 배열을의미 char cmd[100]; if( argc!=2 ){ # 인자값이 2개 일경우 printf( "Auto Digger Version 0.9\n" ); printf( "Usage : %s host\n", argv[0] ); exit(0); } # 인자값이 2개가 아닐경우 strcpy( cmd, "dig @" ); # dig @ 를 복사 (srrcpy) strcat( cmd, argv[1] ); # argv[1] 값을 붙임 (strcat) strcat( cmd, " version.bind chaos txt"); #version.bind chaos txt 를 붙임 (strcat) system( cmd ); #system : 인수로 실행시킬 프로세스 CMD를 받아와 그 프로세스를 호출함. } |
dig CMD를 활용하여 적절한 인자값을 붙여서 권한을 획득하는것으로 사료됨.
우선 fine 명령어를 통해서 역시나 level4 권한의 파일을 찾아낸다.
찾았다. 해당 파일을 통해서 dig CMD 처럼 IP값을 넣은 결과를 보자.
큰 차이없이 answer section 의 값이 unknow 또는 빈공간으로 표기되며 다른 차이는없는것으로 확인, 즉 autodig CMD 는 level4의 권한으로 dig 명령어를 실행하는것으로 보인다. Injection 공격으로 level4의 ID값을 얻어보자.
소스코드 내 ; 을통해 추가적인 CMD를 적용할 수 있도록 처리하고 id 값을 넣으니 하단에 ID 값이 나온다!
bash 를 통해서 level4의 shell을 열어보자
system 함수의 특성상 실행된 프로세스는 종료되지 않고 유지되고 있기 때문에 bash shell이 종료되지않고 열려있는걸 확인할 수 있다, 비밀번호를 얻어오려면 my-pass 를 통해 비밀번호를 얻어보자.
이번에도 clear ~ 비밀번호는 "suck my brain"
Level 4
xinetd 방식의 이해 (원격 백도어)
* xinetd : xinetd 데몬이 서버에서 대기, Client가 service요청시 xintd데몬이 적당한 데몬을 띄워주는 방식.
* standalone : server 에서 service의 데몬을 직접 띄워놓고 제공하는 방식.
풀이
level3 사용자로 접속.
ID : level4
PW : suck my brain
역시나 hint 파일이 있다. 먼저 확인해보자.
xinetd.d 에 백도어가 심겨져있다고 한다. 해당 백도어를 찾아내보자 우선 /etc/xinetd.d 로 이동해보자.
백도어 파일이 대놓고있다! 해당 파일의 내부를 보도록 하자
적절한 코드가 등장했다 해당 코드를 분석해보자
service finger { disable = no flags = REUSE socket_type = stream wait = no user = level5 server = /home/level4/tmp/backdoor log_on_failure += USERID } |
finger 라는 service의 대한 내용으로 확인된다, 우선 finger servise 의 정보를 수집해보자.
finger 은 79/tcp와 udp를 사용 Listen 상태로 열려있는것으로 확인되고 코드내 있는 server의 위치에는 아무것도 없는것으로 확인된다 finger 의 info를 확인하여 사용방법을 알아보자.
유저의 정보를 보여주는 프로그램으로 확인된다. 사용양식도 확인되니 level4의 정보를 조회해보자.
작동이 되지 않는다. 생각을 해보자. finger 의 명령어의 값은 /etc/xinetd.d/backdoor 파일을 참조하여 실행한다. 헌대 현제 user정보는 level4가 맞지만 /home/level4/tmp/backdoor 파일은 존재하지않는다. 즉 /tmp 아래 backdoor 파일을 만들어서 재시도진행해보자
1. /etc/xinetd.d/backdoor 파일 수정
service finger { disable = no flags = REUSE socket_type = stream wait = no user = level5 server = /home/level4/tmp/backdoor log_on_failure += USERID } |
2. /tmp/backdoor.c 생성
#include<stdlib.h> int main() { system("cat /home/level4/hint"); system("/usr/bin/id"); return 0; } |
gcc -o 를 통해 컴파일시킨 backdoor 을 활용하여 커맨드진행을해보자.
안된다 .. 이유가 뭘까. 평문형태로 전달되어야하는 언어가 아무래도 정상적으로 닿지않는것으로 보여진다. 문자를 그대로 입력하는 방식인 대화형명령어가 필요한데 bash의 경우 -i 옵션을 활용할경우 해당기능으로 작동가능하다.
1. /tmp 아래 backdoor2.c 파일 제작.
2. gcc -o backdoor backdoor2.c 로 backdoor 파일 제작완료
이제 테스트를 다시 진행해본다. nc 명령어를 활용하여 리스너를 별도로 열어주기위해 linux 시스템을 활용한다.
즉 linux - listener (port 79)
bach shell 이 열렷다! id / pwd 등 정보 확인 후 비밀번호를 찾아보자.
클리어~
Level 5
레이스 컨디션(Race Condition, 경쟁상태/경쟁조건) 의 이해
다수의 프로세스가 서로 동일한 자원을 할당받기위해 경쟁하는 상태.
- 다른 계정의 권한에 접근해야 함으로 Set-UID가 걸려있어야한다.
- 임시 파일을 생성해야 한다.
- 공격자가 임시로 생성되는 파일명을 정확하게 알아야한다.
풀이
level3 사용자로 접속.
ID : level5
PW : what is your name?
level5 프로그램으로 /tmp/level5.tmp를 생성한다라고 나와있다 우선 /usr/bin/level5 파일을 확인해보자.
내용을 볼수없다 권한이 부여되어있지않다. 실행권한은 있기때문에 실행을 진행해보자.
생성이 되자마자 사라지는거같다. 한번 레이스 컨디션 공격을 진행해보자. 우선 /tmp로 이동후 공격코드를 작성한다.
2가지 공격코드를 통하여 공격작업을 진행해보자.
공격작업이 진행되는 도중 하단에 next password : what the hell 이라는 문구가 확인된다 해당문구로 로그인해보자.
접속은 성공한것으로 보여지나.. hint가 바로출력되며 로그인이 유지되지않는다.. 다음문제로 넘어가보자!
'모의해킹 침해대응 과정 > 본 과정' 카테고리의 다른 글
암호학 / 암호의 역사(고전 암호학) (0) | 2021.06.21 |
---|---|
암호학 / 암호 개요 (0) | 2021.06.21 |
리버싱 이론 whit Hackme / day 49 (0) | 2021.06.03 |
시스템 취약점과 모의해킹 / day 46~47 (2) | 2021.05.28 |
SET (Social Engineering Tech) / day 45 (0) | 2021.05.27 |