티스토리 뷰

WarGame/FTZ

[FTZ] Level13 문제 풀이

Turtle1000 2014. 1. 1. 12:58

사실 FTZ는 너무 단순하게 뻔해서 BOF라고 부르기 민망한 정도지만 그래도 가봅시다 !

소스코드를 보시면 아시겠지만... 그냥 기존의 11, 12번과 같이 막 넣었다가는 BOF탐지 됐다고 하고 kill로 signal(11, SIGSEGV) 을 전달합니다.

이걸 어떻게 우회해야 할까요 ??

바로 떠오르는 아이디어는 그냥 값을 덮을 때 i의 값을 0x01234567 로 만들어 주는 것 입니다. 사실 이게 이렇게 보면 매우 간단하고 쉽게 우회가 가능한 것 같지만 실 서버에서는 이 값이 ASLR이라고 해서 계속 바뀌므로 예측하기 힘들게 됩니다.

아무튼 저희가 해야할 건 13번 이므로 바로 풀어볼게요 ~

gdb로 분석해봅시다 ! if문의 비교 부분에 BreakPoint를 걸고서 실행시켜 보면,

빨간 네모 친 위에 것이 현재 비교하고 있는 0x01234567이고, 아래에 있는 것이 ret 주소입니다. 어떻게 아냐구요 ??

i r ebp 해보시거나 x/x $ebp 해보시면 ebp가 어디인지 알 수 있겠죠? 그럼 스택 구조는 아래와 같습니다.

| buf(1024) | dummy(12) | i(4) | dummy(8) | ebp(4) | ret(4) | 그럼 공격코드 구성은 아래와 같겠죠 ?

./attackme `python -c 'print "A"*1036 + "\x67\x45\x23\x01" + "A"*12 + "쉘코드주소"'`

쉘코드는 그냥 환경변수에 올려놓고 주소를 구했습니다 ^^. 방법은 여기를 참고하세요 !

답은 what that nigga want? 입니다 !

'WarGame > FTZ' 카테고리의 다른 글

[FTZ] Level15 문제 풀이  (0) 2014.01.03
[FTZ] Level14 문제 풀이  (0) 2014.01.01
[FTZ] Level12 문제 풀이  (0) 2013.12.31
[FTZ] Level11 문제 풀이  (0) 2013.12.31
[FTZ] Level10 문제 풀이  (0) 2013.12.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함