1. 풀이

- level3 홈 디렉터리의 내용 확인 및 hint 파일 내용 확인

- autodig의 소스와 more hints가 출력됨.

- autodig 소스와 more hints를 종합해 보면 다음과 같음

① argc 값, 즉 전달받은 인자의 갯수가 2개가 아니어야함

② 동시에 여러 명령을 사용하기 위해 리눅스에서는 ;(세미콜론)을 사용함

③ 문자열 형태로 명령을 전달하기 위해 "명령어" 형식을 사용

dig
- 윈도우의 nslookup과 유사한 프로그램
- 도메인을 입력할 경우 해당 도메인의 IP주소를 알 수 있음
- 양식 : dig [@DNS server IP] [Domain] [Query Type]

- level4의 쉘 명령을 수행하기 위해 level4 권한이면서, setUID가 설정된 파일을 찾아봄.

- 해당 파일을 /bin/autodig "명령어1;명령어2"로 실행시키면 autodig 소스에 의해 수행 순서는 다음과 같음

① argc=2, argv[0]=/bin/autodig, argv[1]="명령어1;명령어2"

② argc=2 이므로 if문이 수행되지 않음

③ strcpy(), strcat()에 의해 완성되는 cmd 배열은 "dig @명령어1;명령어2 version~"

④ system()으로 cmd 값 실행

- 즉, dig @명령어1이 수행된 이후 명령어2가 수행되어 결과를 반환하는 것을 알 수 있음.

- level4의 비밀번호를 확인할 수 있음.

2. GDB를 통한 의사 코드 복원

- if(argc != 2) 조건문을 만족하는 경우 출력되는 printf 구문

- strcpy()를 통해 dig @ 복사하고, 사용자 입력값을 strcat()를 통해 문자열을 붙임

- setreuid(3004,3004)로 level4의 권한 부여 후 system() 함수로 명령을 실행

'문제풀이 > FTZ' 카테고리의 다른 글

FTZ Level5 풀이  (0) 2022.10.27
FTZ Level4 풀이  (0) 2022.10.27
FTZ Level2 풀이  (0) 2022.10.25
FTZ Level1 풀이  (0) 2022.10.24
FTZ 환경 구축  (0) 2022.10.23

1. 풀이

- level2 홈 디렉터리의 내용이며, hint 파일의 내용 확인

- 텍스트 파일 편집, 즉 vi 편집기의 명령모드를 통해 쉘의 명령을 수행할 수 있음

VI(Visual Editor)
- 유닉스 환경에서 가장 많이 쓰이는 문서 편집기
- 마우스 입력 장치가 필요 없으며, 키보드 입력으로 모든 기능을 사용할 수 있기 때문에 터미널 환경에서 주로 사용되는 프로그램

모드 설명
명령 모드 - vi를 실행시키면 가장 먼저 접하는 기본 모드 
- 커서의 이동, 수정, 삭제, 복사 붙이기, 탐색 등 가능
- i,a,o,I,A,O 등을 입력하면 입력 모드로 전환되며, shift + : 입력 시 ex 명령 모드로 전환됨
입력 모드 - 글자를 입력하는 문서를 만드는 모드
- 명령 모드에서 입력 전환키를 입력해 전환시 화면 아래에 '-- INSERT --' 표시 
- [ESC]를 입력해 명령 모드로 전환
ex 명령 모드 - 명령 모드에서 ':'키를 입력했을 때 화면 맨 아랫줄에서 명령을 수행하는 모드
- 저장, 종료, 탐색, 치환 및 vi 환경 설정 등의 역할을 하는 모드
- [ESC]를 입력해 명령 모드로 전환

- ex 명령 모드에서 ":!명령어" 형식을 통해 쉘 명령 수행이 가능

- ex 명령 모드를 통해 :!/bin/bash 수행 결과 반응이 없으며, :!my-pass 수행level2의 비밀번호가 출력됨.

- level3의 쉘 명령을 수행하기 위해 level3 권한이면서, setUID가 설정된 파일을 찾아봄.

- /usr/bin/editor 파일이 해당 조건을 만족하는 파일인것을 알 수 있음.

- 해당 파일을 실행 시켜보면 vi 에디터인 것을 알 수 있으며, ex 명령모드를 통해 :!/bin/bash를 수행할 경우 setUID가 설정되어 있어, level3의 권한으로 쉘이 실행됨.

- my-pass 명령을 통해 level3의 비밀번호를 확인할 수 있음.

2. GDB를 통한 의사 코드 복원

- setreuid>system 순으로 함수가 호출

- level3의 권한으로 system 함수를 통해 /bin/vi를 실행

#include <stdio.h>
#include <stdlib.h>

int main()
{
setreuid(3003,3003) // level3의 권한 부여

system("/bin/vi") // vi 실행

return 0;
}

'문제풀이 > FTZ' 카테고리의 다른 글

FTZ Level5 풀이  (0) 2022.10.27
FTZ Level4 풀이  (0) 2022.10.27
FTZ Level3 풀이  (0) 2022.10.25
FTZ Level1 풀이  (0) 2022.10.24
FTZ 환경 구축  (0) 2022.10.23

1. 풀이

- ls -al 명령으로 홈 디렉터리의 내용을 출력하였을 때의 결과이며, hint 파일의 내용을 확인.

- cat 명령으로 hint 파일의 내용을 확인하면, level2 권한에 setuid가 걸린 파일을 찾아야하는 것을 알 수 있음.

특수 권한
setUID - setUID가 설정된 파일을 실행하면 해당 파일이 실행되는 동안에는 파일을 실행한 사용자의 권한이 아니라 파일 소유자의 권한이 적용
- 사용법: chmod 4000 [파일명]
- 부여 후 ls로 확인 해보면 소유자의 실행권한에 s가 표시되며, 기존 권한에 실행권한이 없으면 대문자 S가 표시
- 예시 : /usr/bin/passwd
setGID - setGID가 설정된 파일을 실행하면 해당 파일이 실행되는 동안에는 파일을 실행한 사용자의 권한이 아니라 파일 소유 그룹의 권한이 적용
- 사용법: chmod 2000 [파일명]
- 부여 후 ls로 확인 해보면 그룹의 실행권한에 s가 표시되며, 기존 권한에 실행권한이 없으면 대문자 S가 표시
- 예시 : /usr/bin/wall
Sticky Bit - Sticky Bit는 디렉터리에 설정하며, 디렉터리에 스티키 비트가 설정되어 있으면 이 디렉터리에는 누구나 파일을 생성할 수 있으나, 디렉터리의 소유자 or 파일 소유자 or 관리자가 아닌 사용자들은 파일을 삭제하거나 변경할 수 없음.
- 파일은 파일을 생성한 계정으로 소유자가 설정
- 사용법: chmod 1000 [디렉터리명]
- 부여 후 ls로 확인 해보면 기타 사용자의 실행권한에 t가 표시되며, 기존 권한에 실행권한이 없으면 대문자 T가 표시
- 예시: tmp 디렉터리

- find 명령을 이용해 hint 파일의 내용에 부합하는 파일을 찾을 수 있음

- 아래의 명령을 사용하면 명령 수행 중 권한이 없는 파일에 대한 에러가 함께 출력되어 결과확인이 어려움

수행 명령 : $ find / -perm -4000 -user level2
명령어 동작 : 최상위 루트 디렉터리(/)에서부터 setUID가 설정된 파일(-perm -4000) 이면서 파일 소유자가 level2(-user level2)인 파일을 찾음(find)
find - 사용법 : find [옵션] [경로] [표현식]
- 리눅스 파일 시스템에서 파일을 검색하는 데 사용되는 명령어
- 상대 경로, 절대 경로 모두 가능
-perm - 파일의 권한으로 탐색한다.
- [-] : 설정된 권한의 모든 것이 설정된 파일을 찾는 것
- [+] : 설정된 권한 중 하나라도 설정된 파일을 찾는 것
-user - 지정한 사용자가 소유하고 있는 파일 찾기

- 표준 입출력과 리다이렉션을 활용하여 출력되는 결과를 간소화 할 수 있음.

- /dev/null은 일종의 휴지통을 의미함.

파일 디스크립터 파일 디스크립터의 이름 정의
0 stdin 명령어의 표준 입력
1 stdout 명령어의 표준 출력
2 stderr 명령어의 표준 에러
리다이렉션 기호 형태 의미
> [명령어] > [파일] 명령어의 결과를 파일에 덮어쓰기
< [명령어] < [파일] 파일의 내용을 명령어의 입력으로 사용
>> [명령어] >> [파일] 명령어의 결과를 파일에 추가

- 위 명령을 통해 level2 권한에 setuid가 걸린 파일을 찾을 수 있음.

- ls 명령을 통해 확인해보면 hint 파일에서 확인한 조건과 동일한 파일임을 알 수 있음.

- 해당 파일을 실행해 보면, 비밀번호를 확인할 수 있는 my-pass 명령어와 권한 변경 명령인 chmod를 제외한 한가지 명령을 레벨2의 권한으로 실행시켜 줌

- 명령어 해석기 역할을 수행하는 쉘(/bin/bash)를 실행시키면, level2의 권한으로 쉘이 실행되며, my-pass 명령을 통해 level2의 비밀번호를 확인할 수 있음.

 

2. GDB를 통한 의사 코드 복원

- system>chdir>print 순으로 함수 호출이 이루어지며 그 값은 다음과 같음

- clear 명령으로 화면을 초기화 한 후 level2의 홈 디렉터리로 이동 및 printf로 출력

- fgets>strstr 순으로 함수 호출이 이루어지며, 그 값은 다음과 같음

- fgets()함수를 통해 사용자로부터 값을 입력 받은 후 strstr()함수를 통해 사용자 입력값이 my-pass, chmod 검증

- printf>setreuid>system 순으로 함수 호출이 이루어지며, setreuid()의 인자값을 0xbba(10진수 3002)로 설정(level2의 권한) 및 system 함수로 사용자 입력값을 실행

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
//변수 선언
char *str1="my-pass"; 
char *str2="chmod";
char *input[30];

system("/usr/bin/clear"); // 화면 초기화
chdir("/home/level2"); // 디렉터리 이동

// 문자열 출력
printf("\n\n\n\t\t레벨2의 권한으로 당신이 원하는 명령어를\n");
printf("\t\t한가지 실행시켜 드리겠습니다. \n");
printf("\t\t(단, my-pass 와 chmod는 제외)\n");
printf("\n\t\t어떤 명령을 실행시키겠습니까?\n");
printf("\n\n\t\t[level2@ftz level2]$ ");

fgets(input,sizeof(input),STDIN); // 사용자 값 입력

if(strstr(input,str1) != NULL) // 사용자 입력값이 my-pass인 경우 종료
{
printf("\n\t\tmy-pass명령은 사용할 수 없습니다. \n\n");
exit(0);
}

if(strstr(input,str2) != NULL) // 사용자 입력값이 chmod인 경우 종료
{
printf("\n\t\tchmod명령은 사용할 수 없습니다. \n\n"); 
exit(0);
}

printf("\n\n");
setreuid(3002,3002); // level2의 권한 부여
system(input); // 사용자 입력값 실행
}

'문제풀이 > FTZ' 카테고리의 다른 글

FTZ Level5 풀이  (0) 2022.10.27
FTZ Level4 풀이  (0) 2022.10.27
FTZ Level3 풀이  (0) 2022.10.25
FTZ Level2 풀이  (0) 2022.10.25
FTZ 환경 구축  (0) 2022.10.23

1. 가상머신 설치

- 아래 사이트를 통해 가상머신 설치

https://www.vmware.com/kr/products/workstation-player/workstation-player-evaluation.html

https://www.virtualbox.org/wiki/Downloads

 

2. 해커스쿨 FTZ 이미지 파일 설치

- 해커스쿨 FTZ 파일 다운로드(관련 파일은 구글 조회 시 다운로드 가능)

- 다운 파일 압축 해제 후 'Red Hat Linux.vmx' 파일 실행

- 가상머신 실행

-  I Copied It

- ID : root / PW : hackerschool 로그인 후 IP 확인

3. PUTTY 설치

- 아래 링크에서 PUTTY 설치 및 실행

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

- 한글 설정

    Window>Translation>Remote character set : Use font encoding 
    Window>Apperence>Font settings>Change : 글꼴 설정 

- Host Name에 'FTZ 서버 IP'를 입력하고, Save Sessions에 '서버 명'을 입력한 후 Save 시 세션이 저장됨.

- ID/PW에 level1/level1을 입력하여 로그인하여 정상 접근을 확인

'문제풀이 > FTZ' 카테고리의 다른 글

FTZ Level5 풀이  (0) 2022.10.27
FTZ Level4 풀이  (0) 2022.10.27
FTZ Level3 풀이  (0) 2022.10.25
FTZ Level2 풀이  (0) 2022.10.25
FTZ Level1 풀이  (0) 2022.10.24

[캡쳐 1] https://owasp.org/Top10/A10_2021-Server-Side_Request_Forgery_%28SSRF%29/

서버 측 요청 변조(Server-Side Request Forgery, SSRF)는 2021년에 신설된 항목이다. SSRF는 서버 측에서 위조된 요청을 보내도록 하는 취약점이다. 애플리케이션이 사용자 제공 데이터에 대해 적절한 검증 없이 사용할 경우 서버로 하여금 공격자가 강제한 제어 동작을 수행하게 된다.

대응방안으로는 클라이언트가 제공한 입력값을 검증하도록 하고, 클라이언트 요청에 대한 응답을 전송하기 전에 서버측에서 결과를 검증한다. 또한, 방화벽을 통해 접근제어 규칙을 적용하여 네으퉈크단에서 필터링을 수행한다.

 

취약점 유형

사용자 입럭 데이터에 대한 적절한 검증없이 로컬 혹은 원격 리소스에 접근하도록 하는 경우

 

공격 시나리오

추후 업로드 예정

 

대응방안

내부 네트워크간 통신의 경우에도 방화벽을 통해 접근통제 규칙을 적용
모든 사용자 입력 데이터에 대한 검증
클라이언트 요청 수행 후 응답에 대해 서버측 결과 검증

[캡쳐 1]&nbsp;https://owasp.org/Top10/A09_2021-Security_Logging_and_Monitoring_Failures/

보안 로깅 및 모니터링 오류(Security Logging and Monitoring Failures)는 OWASP TOP 10 2017에서는 A10로 소개된 불충분한 로깅 및 모니터링(Insufficient Logging & Monitoring) 항목으로 변경되었다.

적절한 로깅과 모니터링이 부재할 경우 침해(공격)을 감지 및 대응하지 못하기 때문에, 데이터 유출 시 공격자의 접근 경로나 유출된 데이터 항목에 대한 확인이 불가하며, 이에 대한 조치 또한 불가하게 된다.

대응 방안으로는 모든 로그인 시도, 데이터 접근 시도 등을 로깅으로 기록하고, 이를 주기적으로 모니텅링하며, 백업하여 보관한다. 또한, 인가된 접근과 비인가 접근에 대해 탐지 및 대응할 수 있도록 지속적인 모니터링을 수행한다.

 

취약점 유형

로그인, 접근 시도 등 중요한 기능에 대한 로깅이 없는 경우
로깅은 생성하나 불명확하거나 부정확한 로깅을 생성하는 경우
로깅 및 모니터링이 존재하나 필요 영역에 대해 불명확한 로깅 및 모니터링이 수행되는 경우
로깅에 대한 백업 절차가 없는 경우

 

공격 시나리오

적절한 로깅이나 모니터링이 없어 데이터가 유출된 후 뒤늦게 인지하고 조치를 수행하거나, 혹은 데이터 유출이 발생한지에 대해 인지하지 못할 가능성 또한 존재한다.

 

대응방안

모든 로그인, 접근 제어, 인증 실패에 대해 로깅을 생성하고, 백업을 수행
로그 관리 솔루션 등을 사용해 로깅이 적절히 생성되는지 확인
모니터링을 통해 비인가 접근 및 의심 행위에 대한 신속한 탐지 및 대응
침해 사고 대응 및 복구 계획 수립

[캡쳐 1]&nbsp;https://owasp.org/Top10/A08_2021-Software_and_Data_Integrity_Failures/

소프트웨어 및 데이터 무결성 오류(Software and Data Integrity Failures)는 OWASP TOP 10 2017에서는 A08로 소개된 안전하지 않은 역직렬화(Insecure deserialization)를 포함해 2021에서 신설된 항목이다.

애플리케이션이 신뢰할 수 없는 소스, 저장소 및 CDN의 플러그인, 라이브러리 또는 모듈에 의존하는 경우 발생할 수 있다. 충분한 무결성 검증 없이 수행되는 자동 업데이트 기능을 악용해 공격자가 직접 업데이트를 업로드해 조작된 파일을 배포하고 설치, 실행 할 수 있다. 

대응 방안으로는 신뢰할 수 있는 라이브러리를 사용하고, 전자서명이나 해시를 통해 무결성을 확인한다. 또한, CI/CD(Continuous Integration/Continuous Deliver_지속적 통합/지속적 제공) 파이프라인의 경우 개발 및 배포 과정에서 변조되면 무결성이 훼손될 가능성이 있으므로, 무결성 검증 과정을 추가해야한다.

 

취약점 유형

사용중인 라이브러리에 무결성 검증 기능이 없어 변조가 가능한 경우
업데이트에 대한 검증이 없는 경우 - 공급망 공격 가능
CI/CD 파이프라인에 대한 보안성 검토가 부족하거나 없는 경우
직렬화된 데이터에 대한 무결성 검증이 없는 경우

 

공격 시나리오

공격자는 공급망 공격(시스템 및 데이터에 접속할 수 있는 외부 협렵업체나 공급업체를 통해 시스템에 침투하여 합법적인 앱 감염 후 멀웨어 배포)을 통해 시스템을 장악한 후 인증서 탈취, 코드 패치, 업데이트 위장 등의 방식으로 악성코드를 업로드할 수 있다. 악성코드는 정상 파일로 위장되어 배포되고, 사용자들이 이를 다운로드하면서, 악성코드 감염 및 추가 공격을 수행할 수 있다.

 

대응방안

전자서명, 해시 알고리즘을 통한 무결성 검증
사용중인 라이브러리에 대한 신뢰성 확인 및 중요한 서비스일 경우 내부 라이브러리 사용
CI/CD 파이프라인에 대한 보안성 검토
직렬화된 데이터에 대한 무결성 검증 수행

[캡쳐 1] https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures/

식별 및 인증 실패(Identification and Authentication Failures)는 OWASP TOP 10 2017에서는 A02으로 소개된 취약한 인증(Broken Authentication)를 포함해 2021에서는 A07로 소개되었다. 2017 대비 조금 더 넓은 의미를 포함한다.

대응 방안으로는 2중 인증을 구현하고, 비밀번호 설정 정책을 적용하고, 다수 로그인 실패 시 계정 잠금을 통해 지속적인 비인가 로그인 시도를 예방한다. 임의의 랜덤한 값으로 세션 ID를 생성해 부여하고, 암호화된 채널을 통해 전송 및 세션 ID를 재사용하지않고 폐기해야 한다.

 

취약점 유형

유효한 계정 목록을 가지고 있는 경우 Brute Forcing 등 자동화된 공격을 시도, 허용하는 경우
기본 계정 정보를 사용하는 경우
다중 인증이 존재하지 않는 경우
URL에 세션 ID를 노출하는 경우(GET Method)
세션 ID를 재사용하거나 만료된 세션 ID를 파기하지 않는 경우

 

공격 시나리오

유효한 계정 목록을 가진 공격자는 자동화 툴을 사용해 Brute Force 공격을 시도할 수 있고, 이때 , admin/admin 등 기본 계정 정보나 잘 알려진 계정 정보를 사용하고 있는 경우 공격자는 계정을 탈취해 임의의 명령을 수행하는 등 악의적인 행위를 수행할 수 있다.

 

대응방안

다중 인증 구현
기본 계정 정보를 사용 금지
안전한 패스워드 설정 정책 생성 및 인증 실패 횟수 제한 적용
임의의 랜덤한 세션 ID 생성, 암호화 채널 등 안전한 전송 수단을 통한 전송 및 재사용 금지와 만료된 세션 ID 파기 

+ Recent posts