농소
The Lord Of The BOF // succubus -> nightmare 본문
분석 해 봅시다.
strcpy의 주소를 addr에 저장하고 save eip위치의 값과 addr을 비교하고 있습니다.
여기서 주의할점은 &strcpy는 GOT(=실제 주소)가 아닌 PLT(=참조주소)입니다.
그리고 마지막에 버퍼와 EBP, EIP 공간을 A로 덮고있네요
GDB로 살펴봅시다
strcpy의 plt값 입니다. eip위치에 저 값을 넣으면 강제종료가 되지않고 다음으로 넘어갈 수 있습니다.
우선 인자를 채우기 전에 strcpy함수 원형을 보면
첫번째 인자로 목적지 주소값이 들어가고
두번째 인자로 출발지 주소값이 들어갑니다.
어떤식으로 진행될지 생각을 해 본다면
우선 에필로그를 거쳐 strcpy함수쪽으로 점프하게 되고 인자값을 통해
strcpy가 실행될 것이고 또 에필로그가 수행이 될 것입니다.
이제 대략 만들어본다면 우선 정상실행이 될 수 있도록 eip에 strcpy의 plt값을 넣어주었고
strcpy에서 ret값이 화면의 "AAAA"가 될 것이며 "BBBB", "CCCC"에는 strcpy의 인자값이
"DDDD"에는 쉘코드 주소가 들어가게 됩니다.
"C"는 쉘코드 주소인 "D"값을 갖게 하면될 것이고 B는 "A"의 주소값을 갖게 하면 되겠습니다.
결과적으로 "AAAA"엔 카피시킨 값이 들어가게 되어 AAAA를 통해 쉘을 실행하게 됩니다.
우선 환경변수에 NOP코드를 충분히 깔고 쉘코드를 올렸습니다.
이제 이 많은 놉코드중의 주소를 DDDD 에 넣으면 되겠네요
이런식으로 주소값을 찾아 다 채워준다음
16바이트씩 움직여가며 exploit 해보면 쉘이 떨어지게됩니다.
'Wargame > The Lord Of The BOF' 카테고리의 다른 글
The Lord Of The BOF // xavius -> death_knight (0) | 2018.02.22 |
---|---|
The Lord Of The BOF // nightmare -> xavius (0) | 2018.02.22 |
The Lord Of The BOF // zombie_assassin -> succubus (0) | 2018.02.21 |
The Lord Of The BOF // assasin -> zombie_assassin (0) | 2018.02.21 |
The Lord Of The BOF // giant -> assasin (0) | 2018.02.21 |