tmxklab
[FTZ] Level15 풀이 본문
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 디버깅
- 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