profile image

L o a d i n g . . .

1. 문제

파일들을 확인하니 attackme, hint 가 있다.

 

hint를 보니 위와 같은 소스코드가 나왔다.

 

strcpy() 에서 입력값 검증을 하지 않아 buf 크기보다 더 입력을 받을 수 있어 bof 가 발생한다.

다만, buf 근처에 있는 i 변수를 통해 i 값이 변조되었을 경우 bof가 발생했음을 알리고 프로그램을 종료한다.

이때 어떻게 하면 쉘을 얻을 수 있을까?

 

앞에 11, 12번 문제와 유사한데 거기서 더해서 i 값만 유지해주면 bof를 일으켜도 괜찮을 것 같다.

 

 

2. 문제 해결 과정

이제 그럼 필요한 것들을 구해보도록 하자.

 

1. ret와 buf 사이의 offset

main을 디스어셈블한 모습

 

main의 첫 부분과 strcpy 하기 직전에 bp를 건다.

 

main의 첫 부분에서 bp가 걸렸다.

이때 esp는 ret를 가르키고 있다.

 

strcpy 하기 직전에 bp가 걸렸다.

strcpy 하기 전에 eax를 push 하기에 eax에 buf의 시작 주소가 들어있을 것이다.

 

offset : 1052

ret와 buf의 offset은 1052이다.

 

 

 

2. 변수 i 의 위치

main을 디스어셈블한 모습

i : ebp-12

buf : ebp - 1048

-> 버퍼와 1036 만큼 떨어져있다.

 

 

 

3. buf + 0x500의 주소

buf + 0x500 의 주소 : 0xbffff5c0

 

payload는 다음과 같을 것이다.

"A"*1036 + 0x1234567 + "B"*12 + (0xbffff5c0) + "\x90"*0x1000 + shellcode(41 byte)

 

 

3. 익스플로잇

위와 같은 논리대로 payload를 작성해보았다.

 

Level14 password : "what that nigga want?"

'Wargame > Hackerschool FTZ' 카테고리의 다른 글

[FTZ] 해커스쿨 FTZ level 15  (0) 2021.04.12
[FTZ] 해커스쿨 FTZ level 14  (0) 2021.04.12
[FTZ] 해커스쿨 FTZ level 12  (0) 2021.04.12
[FTZ] 해커스쿨 FTZ level 11  (0) 2021.04.12
[FTZ] 해커스쿨 FTZ level 10  (0) 2021.03.26
복사했습니다!