.study26 [포너블 기초] Shell Code 만들기 Shell Code 만들기 전체적이 과정은 아래와 같다. 1.C언어로 해당 코드를 구현한다. 2.gdb로 역어셈블링하여 필요한 부분을 찾는다. 3.필요한 부분만 뽑아 어셈블리어로 새로 구현한다. 4.컴파일한 후, objdump로 기계어를 출력한다. 5.출력된 기계어들을 하나로 연결 시킨다. execve() 함수를 이용하여 shell code를 실행시키는 코드를 c언어로 작성해보겠다. * execve 함수는 현재 실행 중인 프로세스를 새로운 프로세스로 덮어쓴다. 아래는 execve()를 이용해서/bin/sh 셸을 얻게 해주는 셸 코드를 c언어로 작성 한 것이다. #include int main() { char*sh[]={"/bin/sh", 0}; execve(sh[0],&sh,0); } 이제 작성한 코드를.. 2023. 10. 23. [포너블 기초] 버퍼 오버플로우 버퍼 오버플로우는 문자 그대로 버퍼가 넘치는 것을 의미한다. 버퍼 오버플로 발생 시 버퍼에 다 담지 못한 값들은 버퍼 이후의 공간에 들이차게 되는데, 이때 프로그래머가 의도하지 않은 값이 덮어쓰기로 들이차게 되고 여기서 문제가 발생한다. 8칸짜리 메모리가 있고, 그 안에 4칸짜리 버퍼가 있을 때 그림과 같이 사용자가 버퍼를 초과하는 값을 입력하면 버퍼 이후의 값이 바뀌게 된다. Return Address Overwrite 스택프레임의 끝에 존재하는 return address 영역을 덮어쓰기 함으로써, 함수가 끝날 때 원하는 주소, 원하는 함수의 코드로 분기를 변경하는 기법이다. 아직 포너블을 배우기 시작한지 얼마 되지 않았지만 대부분의 기법이 이 기법으로 끝나는 것으로 보아 매우 중요한 것 같다. 스택 .. 2023. 10. 1. Buckeye_2023 보호되어 있는 글 입니다. 2023. 10. 1. [포너블 기초] x86_handray 보호되어 있는 글 입니다. 2023. 9. 14. 이전 1 2 3 4 5 6 7 다음