일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- disk
- 생활코딩 html
- pythonchallenge
- 실기
- slack space
- ftz
- Multimeida
- blkls
- 디지털포렌식 with CTF
- CTF-D
- memory
- 네트워크 보안
- network
- 포렌식
- 슬퍼유
- html
- 2022시작
- vinetto
- 네트워크관리사2급
- 정보처리기사 필기 합격
- 는 하지마...
- 디지털포렌식
- 24시간의 전사
- 윈도우 프로세스 종류
- 생활코딩
- 윈도우 프로세스
- N0Named
- Multimedia
- ZIP 파일구조
- Window process
- Today
- Total
ssoL2 TISTORY
[FTZ] LEVEL 16 풀이 본문
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 |