일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ZIP 파일구조
- pythonchallenge
- 네트워크관리사2급
- Window process
- memory
- 윈도우 프로세스
- slack space
- blkls
- html
- Multimedia
- 네트워크 보안
- 2022시작
- disk
- 정보처리기사 필기 합격
- 실기
- network
- ftz
- N0Named
- 슬퍼유
- 는 하지마...
- Multimeida
- CTF-D
- vinetto
- 생활코딩 html
- 디지털포렌식 with CTF
- 포렌식
- 디지털포렌식
- 생활코딩
- 윈도우 프로세스 종류
- 24시간의 전사
- Today
- Total
ssoL2 TISTORY
[FTZ] LEVEL 17 풀이 본문
오랜만 ^^
마저 남은 FTZ 끝내겠습니당 ^_^*
코드를 보면 LEVEL 16이랑 다른건 오직 하나! 그저 call 포인터를 우회할 함수가 없다는 것?
buf bof일으키고 call 함수는 직접 쉘코드 환경변수를 만들어서 그 주소로 가리킬 것이다.
export로 "SHELLCODE"라는 환경변수를 등록했고, 쉘코드는 25 byte짜리를 사용했는데 너무 길어서 캡쳐 짤린 것이다.
이때, "\x90"도 넣어줌으로써 안전하게 ^^
쉘코드는 아래 주소에서 참고하였다.
쉘코드 모음 -> m.blog.naver.com/mathboy7/220215329450
env로 확인해보니 "SHELLCODE"가 생성됨을 알 수 있다.
/home/level17/tmp로 가서 shell.c를 만들어 "SHELLCODE" 환경변수의 주소를 찾기 위한 코드를 짠다.
컴파일 한 후 실행파일 실행하면 쉘코드 주소가 나온다. [0xbffffc1f]
이제 buf 상황을 알기 위해 gdb로 살펴보자.
attackme랑 같은 이름 길이로 tmp에 복사해서 gdb로 살펴봅시다.
main함수 보면 어떤 주소값을 ebp-16에 넣는데 이건 printit 위치일 것이므로 [ebp-16]에 쉘코드 주소 넣으면 되고,
fgets 함수 실행 이전에 ebp-56이 buf 주소일 것이므로 최종적으로 56-16=40 byte 더미값 주고 쉘코드 주소 넣으면 된다.
복사본 attackm2에 test해봤더니 잘 넘어간 듯 싶다.
(당연히 복사본이라 setuid없어서 권한획득 x)
이제 attackme에 때리니 권한 상승됨을 확인했고 다음 pw도 얻을 수 있다.
'challenge > pwn' 카테고리의 다른 글
pwnable.kr [passcode] (0) | 2021.06.29 |
---|---|
[FTZ] LEVEL 18 풀이 (0) | 2021.02.23 |
[FTZ] LEVEL 16 풀이 (0) | 2021.02.01 |
[FTZ] LEVEL15 풀이 (0) | 2021.02.01 |
[FTZ] LEVEL 14 풀이 (0) | 2021.02.01 |