일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- graphql with reactnative
- useMutation error
- 앙버터마카롱
- 토라비
- graphql mutation error
- 홍대 예술
- 금별맥주
- 잠실새내
- promise메서드
- typescript
- 비동기배열처리방법
- 비동기배열
- graphql 400
- 도그존
- 홍대 카페 장쌤
- apollo react native
- 운정 소바동
- 잠실새내 도그존
- 예쁜술집 예술
- apolloclient
- graphql
- graphql react native
- 홍대 토라비
- 신촌 소문난집
- 화이트 해커를 위한 웹 해킹의 기술
- promise처리
- graphql with RN
- 고르드
- 화이트해커를 위한 웹 해킹의 기술
- 지보싶 신촌점
- Today
- Total
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
FTZ level15 풀이 본문
id: level15
pw: guess what
이번에도 hint를 읽으면서 시작해보장
level 14와 굉장히 비슷한 코드가 attackme의 코드로 나왔다.
level14와 다른 점이 있다면 check가 포인터 변수라는 것!
그리고 조건문에서 check가 가리키는 값이 0xdeadbeef여야 한다는 점만 다르다!
따라서 check에 0xdeadbeef가 저장되어있는 주소를 넣어주어야한다.
우선 main함수를 디스어셈블 해서 스택 구조를 파악해보자
level14와 거의 똑같기 때문에 어셈블리어를 따로 해석하지는 않을 예정
( 2020/09/28 - [wargame 풀이/FTZ] - FTZ level14 풀이 요기에 있음)
이를 바탕으로 그려본 스택 구조는 다음과 같다 (얘도 사실 level14와 똑같음,,)
따라서 check 전까지 40바이트를 채워주고, check 자리에 0xdeadbeef를 가리키는 주소를 넣어주면 된다.
그러려면 0xdeadbeef를 가리키는 주소를 찾아야 하는데,
main+32에서 *check와 0xdeadbeef를 직접적으로 비교한다. (레지스터를 사용하지 않고 있음)
여기서 0xdeadbeef가 main 어딘가에 하드코딩되어 있다는 것을 알 수 있다.
(=메모리 어딘가에 0xdeadbeef가 저장되어 있고 그 주소를 찾아야한다)
그래서 main+32에 해당하는 주소(0x080484b0)에서 값을 조금씩 출력시켜보았다.
(main+32에서 처음으로 0xdeadbeef가 나와서 넣어보았음)
deadbeef가 보이기는 하는데, 완벽한 주소는 아닌 것 같아 1씩 늘려가며 출력해보았다.
그리고 0x080484b2가 0xdeadbeef가 담겨있는 주소라는 것을 알아냈다!
이제 payload를 작성해보자
payload: (python -c 'print "A"*40+"\xb2\x84\x04\x08"';cat)|./attackme
level16 권한으로 쉘이 실행되었다.
level16의 패스워드를 알아내보자
level16의 pw: "about to cause mass"
'wargame 풀이 > FTZ' 카테고리의 다른 글
FTZ level17 풀이 (0) | 2020.09.30 |
---|---|
FTZ level16 풀이 (0) | 2020.09.30 |
FTZ level14 풀이 (0) | 2020.09.28 |
FTZ level13 풀이 (0) | 2020.09.27 |
FTZ level12 풀이 (0) | 2020.09.25 |