본문 바로가기

쉘 코드 작성 쉘이란 사용자로부터 입력받은 명령어를 기계어나 어셈으로 바꿔 컴퓨터에게 전달해주는 역할을 하는 프로그램이다. 예를 들어서 윈도우 cmd창에 dir을 치면 현재 디렉토리의 목록을 볼 수 있는데 여기서 cmd가 쉘인 것이다. https://ko.wikipedia.org/wiki/%EC%85%B8 쉘코드는 이러한 쉘을 어셈으로 짠 것으로 BOF같은 공격을 통해서 쉘코드를 스택에 넣고 RET값을 쉘코드가 저장되어 있는 주소로 바꿔 쉘을 얻을때 쓴다. 쉘코드를 만들때에는 우선 자신이 사용할 함수에 대해 자세히 알아야 한다. 쉘코드를 만들때 execve를 쓸 것이데 그러면 이 execve의 용도 및 인자값에 대한 정보(어떤 값이 들어가는지, 인자 값의 데이텨형은 어떠한지)를 조사한다. http://forum.fal.. 더보기
스택(Stack) 메모리는 다음과 같이 크게 4가지 영역으로 나누어집니다. 코드영역이 낮은주소 스택영역이 높은주소 쪽이다. 코드영역은 어셈블리어나 기계어가 있고 데이터영역은 초기화되거나 초기화되지않은 전역변수 및 정적변수가 있습니다. 힙영역은 동적할당되는 곳이고 스택은 지역변수들이 있는 곳입니다. 더 자세한 내용http://shayete.tistory.com/entry/7-Use-After-Free위의 사이트에 들어가서 pdf를 다운로드 받으시면 첫번째 페이지에 메모리영역이보다 더 자세히 나와있습니다. ebp, esp ebp는 스택에 베이스 포인터로 기준점이라고 생각하시면 이해하는데 더욱 도움이 됩니다. esp는 스택 포인터로 현재 스택이 가리키고 있는 주소를 의미합니다. 함수의 프롤로그 함수가 호출이 되면 그 전에 함수.. 더보기
BOF BOF(Buffer Over Flow)말 그대로 버퍼를 넘는다-라는 뜻입니다. 버퍼라는 말은 데이터를 담아두는 곳입니다.(자세한 것 : https://ko.wikipedia.org/wiki/%EB%B2%84%ED%8D%BC_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)) BOF는 메모리 공간을 쓸 수 있는 상황에서 ret값이나 흐름을 공격자가 원하는 방향으로 바꾸는 기법이다. 만약 스택의 공간이 다음과 같이 할당이 되어 있는 상황에서 scanf나 gets등과 같이 메모리에 값을 넣을 수 있는 함수가 프로그램에 쓰인다면 이것을 이용하여 RET부분을 바꿔준다. 이 기법이 바로 BOF이다. 이러한 원리는 rtl과 rtl-chain, rop, rtdl등의 기법들이 공통적.. 더보기