tmxklab

[FTZ] Level15 풀이 본문

War Game/FTZ

[FTZ] Level15 풀이

tmxk4221 2020. 1. 12. 21:21

1. 문제확인

1) 사용자 및 패스워드 : level15 / guess what

 

2) 파일확인

 

3) hint 코드 설명

#include <stdio.h>

main()
{
	int crap;
	int *check;
	char buf[20];
	fgets(buf, 45, stdin);
	if(*check==0xdeadbeef)
	{
		setreuid(3096, 3096);
		system("/bin/sh");
	}
}
  • Level14와 구조는 비슷하지만 check변수가 포인터 변수

2. 접근방법

 

1) attackme 디버깅

attackme비교(좌측 Level14, 우측 Level15)

  • level14와 달리 level15에서는 check가 포인터 변수로 사용하므로 바로 [ebp-16]과 0xdeadbeef랑 비교하는 것이 아니라 [ebp-16]의 값을 주소로 사용하여 한번 더 들어가게 됨
  • if문에 0xdeadbeef를 사용했으므로 프로그램 내부에 존재

 

2) 스택구조(Level14와 같음)

 

 

3) 결론

  • 프로그램 내부에 0xdeadbeef값을 찾아 해당 주소 값을 [ebp-16]에 덮어씌어주면 됨

3. 풀이

 

1) 프로그램 내부에 0xdeadbeef의 주소 값 확인

 

2) bof수행

  • 프로그램 내부에 존재하는 0xdeadbeef의 주소 값인 0x80484b2를 dummy[40bytes] 다음에 위치하여 [ebp-16]에 0x80484b2값이 저장됨, [eax]를 통해 한번 더 접근하므로 0xdeadbeef값을 추출할 수 있음

'War Game > FTZ' 카테고리의 다른 글

[FTZ] Level17 풀이  (0) 2020.01.12
[FTZ] Level16 풀이  (0) 2020.01.12
[FTZ] Level14 풀이  (0) 2020.01.12
[FTZ] Level13 풀이  (0) 2020.01.12
[FTZ] Level12 풀이  (0) 2020.01.12
Comments