ssoL2 TISTORY

[FTZ] LEVEL 16 풀이 본문

challenge/pwn

[FTZ] LEVEL 16 풀이

ssoL2 2021. 2. 1. 10:26

level16 / about to cause mass


hint를 봅시다.

 

main 함수를 보면 call 함수 포인터 선언하고 buf bof 일으켜서 printit 가리키던 것을 shell로 덮으면 되는 문제이다.

찾아야 하는 건 buf 위치, call 위치, shell 주소 이렇게 3 가지 찾으면 되겠습니다~

 

 

처음으로 c 코드 있어서 보려했더만 접근이 안되는구만,,^^;

 

 

 gdb로 살펴보겠습니당~ mov 어셈블리에서 주소를 ebp-16에 넣는 걸 보면 ebp-16이 call 함수 위치네유~

이후 fgets의 인자로 사용되는 buf는 ebp-56이구용~

buf 위치와 call 위치를 찾았으니 bof 일으켜서 call에 넣을 shell 주소를 찾아봅시당~~

 

 

shell 함수는 전역 함수니까 main 위에 위치해있을 거라고 생각했는데 생각보다 더 위에 있나봅니다.

더 위로 올라가봅시다.

 

 

shell 함수 꼬리를 찾았어요 !! 제대로된 주소로 빨리 가봅시당~~

 

 

shell 주소는 main-72에 떨어져있었군요.... 주소는 0x80484d0 입니다 !

그러면 buf dummy 멕이고 call에 0x80484d0를 박으면 되겠습니다~

 

 

<참고> 근데 disas shell 하면 바로 찾을 수 있었단 사실....!! 이제 알면 됐지 ^^*

 

 

buf는 ebp-56, call은 ebp-16에 위치해있으니까

buf로부터 40만큼 NOP 덮어주고 call 4bytes에 가리킬 shell주소를 때려 박으면 풀리는 문제였답니다! 해결완료~

당연히 stdin 문제니까 다음 payload 형태로 해야한다는 사실~!

 

'challenge > pwn' 카테고리의 다른 글

[FTZ] LEVEL 18 풀이  (0) 2021.02.23
[FTZ] LEVEL 17 풀이  (0) 2021.02.23
[FTZ] LEVEL15 풀이  (0) 2021.02.01
[FTZ] LEVEL 14 풀이  (0) 2021.02.01
[FTZ] LEVEL13 풀이  (0) 2021.02.01
Comments