coblot를 열어봤습니다 .처음 문제와는달리 버퍼에 16 밖에 크기가 할당이 안됬네요
제가 사용하던 25byte쉘코드로는 택도 없겠습니다.
처음에는 환경변수를 이용해서 문제를 푸려고 생각햇으나 그러기엔 너무 실력이 안늘거같아서 다른 방법을 생각해봤습니다 .argv[1]에는 16이라는 한도가잇지만
argv[2]에는 한도가 없을거같습니다.. 테스트를 해봐야겠군요
argv[1]은 30이 넘어가니 Segmentation fault가 뜨네요!
그럼 이번에는 argv[2]를 실험해보겠습니다
Segmentation fault가 안뜨네요 제대로 테스트한것인지 gdb를 통해 봐봅시다
gate와 비슷해서 자세한 설명은 생략하겠습니다
main +3에서 16이 할당됫고 main +10 ~ main +32까지 if문
main +35~48 까지 인자값에 대하여 적혀있네요
대략적인 스택의 구조는
argv[1]
argv[0]
argc
ret[4]
sfp[4]
buffer[16]
더미값이 없으니 대략 이정도로 구성이 되어잇겠습니다
gate문제와 마찬가지고 strcpy실행 직후인 main +53에 브포를 걸고 해보겠습니다
이렇게 넣으면 정상적으로 값이 들어가지않네요 위에서 cobolt에게 집어넣었던 방법은 잘못된 방법이였습니다
이러한식으로 두번 넣어줫더니 값이 들어가네요 b는 16진수로 62기때문에 정상적으로 들어간것을 알 수 있습니다 .
또한 0xbffffae0 에서 0x400309cb 부분이 ret값입니다
그러면 페이로드를 짜보겠습니다
argv[1]로는 쉘코드를 다 넣어줄수가 없는거 아시겠죠 ? 그렇다면 제한이 없는 argv[2]를 이용해야겠습니다
쉘코드를 argv[2]에 넣어준뒤 argv[1]에서 오버플로우를 일으켜서 덮어줄 리턴주소를 argv[2]로 변경해주면 쉘코드가 실행되겟죠 ?
성공했습니다 ! cobolt의 권한을 가져왓군요
gdb를 통해 어떠한 변화가 잇었는지 한번 봐보도록 하겠습니다
리턴값이 저렇게 변해있네요 어떠한 값인지는 더 알아보고 추가로 포스팅 하겠습니다
'해커스쿨 lob' 카테고리의 다른 글
LOB darkelf (0) | 2016.05.02 |
---|---|
LOB wolfman (0) | 2016.05.02 |
LOB goblin (0) | 2016.05.01 |
LOB cobolt (0) | 2016.04.30 |
LOB gate (0) | 2016.04.30 |