Hackerz on the Ship

우리 집에 GDB 있는데 메모리 보고 갈래? (3) 3에서는 소스 파일이 없다 가정한 상태로 ida, gdb를 이용해 취약점을 찾고 exploit을 진행한다. 보통 정적 분석은 ida, 동적 분석은 gdb를 활용한다고 한다. ida hexray가 제대로 작동하지 않아서 (完)우리집에 GDB 있는데… 메모리 보고갈래?(3)의 사진을 참고했다. 보면 거의 비슷하게 코드가 디컴파일 된 것을 볼 수 있다. ㄷㄷ 보면 strcpy로 인자로 입력된 문자열을 v4에 넣어주는데, argv[1]을 복사할 때 버퍼를 검사하는 로직이 없다. v4, v5는 지역 변수이므로 스택에 있기에 스택 오버플로우가 일어날 수 있는 것이다. v5가 1이 되면 쉘을 열 수 있으므로 스택 오버플로우로 v5의 값에 접근하면 될 것 같다. gd..
우리 집에 GDB 있는데 메모리 보고 갈래? (2) #include #include void func2() { puts("func2()"); // "func2()"를 출력 } void sum(int a, int b) { // int형 매개 변수 a, b를 받음 printf("sum : %d\n", a+b); // 더한 값을 출력 func2(); // func2 함수 실행 } int main(int argc, char *argv[]) { int num=0; char arr[10]; sum(1,2); // sum 함수에 인자 1, 2를 보냄 strcpy(arr,argv[1]); // 실행시 입력 받은 인자를 arr로 복사(취약점 발생!!) printf("arr: %s\n", arr); // arr 출력 if..
우리 집에 GDB 있는데 메모리 보고 갈래? (1) 위 사진이 바로 우리 집에 GDB 있는데 메모리 보고 갈래? (1)에서 다룰 내용의 사진이다. 1에서는 주소, 메모리 영역에 대해서 다룬다. -Address- 32bit 노트북을 보면 램이 4gb 밖에 없다. 그 이유는 위 사진처럼 4gb 램은 이런 저런 복잡한 수식을 거쳐서 2^32Byte의 주소를 가질 수 있는데, 32bit의 경우 1bit는 0, 1을 가질 수 있으므로 2^32, 즉 최대 2^32 Byte의 주소를 가질 수 있기 때문에 2^32 Byte의 주소를 넘어가게 되는 4gb 초과로는 인식하지 못하는 것이다. 리버싱을 공부해보면 주소가 00000000 ~ FFFFFFFF까지 존재하다는 점을 알 수 있는데, 이는 이진수 주소 0000...(3..
dyp4r
'Hackerz on the Ship' 태그의 글 목록