본문 바로가기

2017/10

gremlin 별달리 시작할 말이 없으니 바로 코드를 보겠습니다. gate와 달라진점은 buffer의 크기 한가지밖에 없다. 그런데 shellcode가 24byte인데 buffer + sfp를 해봐도 20byte밖에 안된다. 혹시 dump가 4byte쯤 있을지도 봤지만 그냥 16byte밖에 없다. 하지만 buffer overflow는 입력이 제한된 수를 넘어서 '무한정'들어가는 취약점이다. 즉 RET 위의 메모리에도 무한정 값이 들어가는 것이다. buffer에 A, SFP에 B, RET에 C를 넣고 뒤에는 D를 10개 채웠다. 즉 RET는 0xbffffb4c라는 것을 알 수 있다. RET보다 뒤에 있는 임의의 주소를 넣고 \x90을 충분히 넣은 뒤 shellcode를 입력하여 payload를 만들었다. ./cobolt..
gate system hacking을 차근차근 한번 공부해보기 위해 1단계로 bof를 골랐다. 그래서 이제 lob를 하나씩 풀기로 했습니다. 이것도 소스코드부터 확인해봅시다. 정말 대놓고 bof 문제다. 우선 풀이를 할 내용을 간단하게 요약하자면 1. 특정 메모리(주소를 알 수 있는)에 shellcode를 입력한다. 2. RET주소에 shellcode를 입력한 주소를 넣어준다. 말은 참 쉽다..... 뭘 하던 일단 gdb로 열어보았다. /tmp로 복사해서 열어봐야 볼 수 있다. stack에 dump는 없나보다. 선언한 256byte만 사용하고 있다. 그럼 일단 여기까지 payload는 "A"*260+"RET"이다. 우연히 알았지만 이 프로그램엔 ASLR이 걸려있지 않다. ASLR은 stack의 주소를 random..