LOB 풀이를 옮기다가 FEBP를 사용하는 문제가 나와서 여기에 정리한다. EBP를 조작해 원하는 코드가 실행되게끔 하면 되기 때문에 한가지 방식이 정해져있지는 않은 것 같다. /* 틀린 부분 지적 및 댓글 환영합니다 */ FEBP 공격 페이로드 FEBP 공격을 위해 buffer에 &(shellcode)를, SFP에 &(buffer)-4를, RET에 &(leave-ret 가젯)을 넣어보고, 어떻게 쉘코드가 실행될 수 있는지 순서대로 확인해보자. buffer (44) &(shellcode) SFP
pintool은 DBI(Dynamic Binary Instrumentation) 툴 중 하나로 리눅스에서는 pintool 사용이 쉬운편인데 윈도우용 Pin은 정리된 글이 많이 없어서인지 사용하는데 삽질을 좀 했다. cygwin64, Window pin 다운로드 64bit라는 가정하에 cygwin64, 윈도우용 Pin, 비쥬얼스튜디오 x64 가 필요하다. cygwin64 다운로드 및 설치 일단 첫번째로 cygwin은 64bit 버전으로 아래 링크에서 다운받는다. cygwin 다운로드 페이지 Cygwin Installation Cygwin Get that Linux feeling - on Windows Installing and Updating Cygwin Packages Installing and Upda..
OP에는 GOT Overwrite, RTL Chaining 등의 개념이 혼합되어 있다. DEP를 우외해 익스플로잇을 하기 위한 ROP에 대해 해당 게시글에서 차근차근 정리해나가려고 한다. 가젯(gadget) 이란 ROP에서 자주 등장하는 개념인 가젯이란 ret으로 끝나는 명령 조각을 말한다. (INT + ret 형태) 대표적으로 'pop - pop - return', 일명 PPR이 있다. 이러한 가젯을 사용해 내가 원하는 상황에 맞게 스택 포인터를 적당히 이동시켜주는 것이 중요하다. (ret을 사용해 esp로 돌아가고 esp를 올리기 위해 pop을 사용하고 등) VirtualProtect()를 호출하여 DEP를 해제하는 방식 다양한 방식이 존재하지만, 그 중 가장 손쉽게 DEP를 해제할 수 있..
역시 정리하지 않으면 잊어버리는 것이 사람인 것 같다. 나만 그럴수도... ROP 개념을 정리하는 와중에 먼저 RTL Chaning 부터 제대로 정리하자는 생각이 들어 여기에 정리한다. RTL(Return to Library) 이란 일단, RTL은 메모리에 이미 적재되어있는 공유 라이브러리를 이용해 원하는 함수를 실행시키는 기법이다. func1 함수를 실행시켜야 한다는 가정에서 아래 예를 봐보자. [buf + SFP +RET] 의 RET 자리에 func1 함수의 주소값이 들어갔고 4바이트의 dummy 후에 func1함수의 인자값이 들어간 구조가 됐다. 참고로 여기서 설명을 위해 사용하는 func1은 인자가 1개인 함수이고 func2는 인자가 2개가 필요한 함수라는 가정이다. // 기존 스택 상황 buf ..
예전에 작성했던 글을 현재 블로그로 옮긴 것이라, 최신 버전이 아니니 각 버전은 현재 읽는 분들의 상황에 맞게 변경해주시면 될 것 같습니다. (캡쳐 사진은 다시 해보고 새로 캡쳐했습니다) AFL(American Fuzzy Lop)은 테스트 케이스의 코드 적용 범위(Code Coverage)를 효율적으로 늘리기 위해 유전자 알고리즘(Genetic Algorihm)을 사용하는 퍼저이다. 원래는 리눅스에서 돌릴 생각이었고 옛날에도 몇번 돌린적이 있어서 별 걱정을 안했는데, GUI 어플리케이션을 퍼징하는 것이 불가능한 듯 했다. qemu mode로 해야해서 간단한 뷰어 프로그램을 대상으로 12시간 이상을 켜놓았는데 실행이 계속 멈춰있었다. (GUI가 아닌 다른 어플리케이션은 잘됐다.) 어쨌든, 본인은 파일뷰어를..