2015년 7월 9일 목요일

쉘코드로 점프하는 방법

쉘코드를 실행시키거나 점프할 수 있는 몇 가지 다른 방법에 대해 다루고, 또한 버퍼의 크기가 작을 때 적용할 수 있는 최선책에 대해 알아보자


쉘코드를 실행시킬 수 있는 몇가지 방법


  1. JMP or  CALL
    • 공격자는 쉘코드의 주소를 가진 레지스터를 기본적으로 사용하며, 그 주소를 IP에 넣어 공격을 하게 된다. 그렇기 때문에 공격자는 애플리케이션이 실행될 떄 로딩되는 DLL들 중 하나의 레지스터로 점프 하거나 Call 하는 기계어를 찾아야 한다. 또한 특정 메모리 주소로 EIP를 덮어쓰는 대신 특정 레지스터로 점프하는 주소를 EIP에 주입할 필요가 있다
  2. pop/return
    • 만약 스택의 꼭대기에 있는 값이 공격자가 생성한 버퍼 내에 있는 주소를 가리키지 않지만, 쉘코드를 가리키는 주소가 스택 안에 존재하는 것을 본다면, pop/ret 또는 pop/pop/ret(해당 명령이 스택의 어느 위치에 존재하느냐에 따라 pop의 개수가 달라진다.)와 같은 명령을 EIP로 주입함으로써 쉘코드를 로드할 수 있께 된다.
  3. PUSH return
  4. JMP [reg+offset]
  5. blind return
  6. 만약 공격자가 이용할 수 있는 버퍼 용량이
  7. SEH

댓글 없음:

댓글 쓰기