Hack/Pwnable
-
Sigreturn Oriented Programming(SROP)Hack/Pwnable 2015. 11. 24. 23:12
SROP가 Sigreturn Oriented Programming의 약자로, int $0x80의 시스콜넘버 119(Sigreturn)을 이용한 ROP이다. 이게 공부하면서 int 0x80만 있다면 진짜 엄청 무서운것을 느낀것이, 모든 레지스터를 제어할수있다는것이 엄청 신기했다. 이 기법을 이해하기위해서는 기본적으로 어셈블리 프로그래밍에대한 지식이 조금이나마 필요로하는데, 대충 하나 짚고 넘어가자면 다음과같다. mov %edx, 0x...mov %ecx,0x...mov %ebx, 0x.....mov %eax,syscallnumberint $0x80 이런식으로하면 eax에 담긴 시스콜넘버에따라 어떤 함수가 호출되는지가 결정된다. 그리고 ebx,ecx,edx 각각 인자를 넣어주고 호출하게된다. 여기서 중요한것..
-
Improper Null Termination (SSP)Hack/Pwnable 2015. 11. 20. 05:34
#include #include #include int main (){ int size; char buf [100]; char line [10]; setlinebuf(stdout); fgets (buf, sizeof (buf),stdin); size = atoi (buf); fgets(buf, sizeof (buf),stdin); strncpy (line, buf, size); puts (line); gets (line); puts (line); return 0; } 소스코드이다. 컴파일을 하자. $ gcc test.c 소스는 별거없이 입력받는값을 변수에넣고 출력시키는 프로그램이다. (gdb) disas mainDump of assembler code for function main: 0x00000000..
-
puts 어셈블리 프로그래밍Hack/Pwnable 2015. 10. 6. 03:00
.globl mainmain:push %ebpmov %esp, %ebpmov $helloworld, %ebxcall strlencall putsleaveret puts:push %ebpmov %esp, %ebp mov 0x8(%ebp), %ecxpush %ecxcall strlenmov 0x8(%ebp), %ecxmov %eax, %edx mov %ecx, %esiadd %esi, %edxmovb $0x0a, (%esi)inc %edx mov $4, %eaxmov $1, %ebxmov $helloworld, %ecxmov $14, %edxint $0x80 leaveretstrlen:push %ebpmov %esp, %ebp mov 0x8(%ebp), %eaxmov $0x0, %ecxcall l1leave..
-
어셈블리 프로그래밍Hack/Pwnable 2015. 10. 5. 14:01
여기서는 int 0x80을 이용하여,syscall number를 이용하여 출력을 시키는것을 해볼것이다. write함수를 이용해서 출력을할건데, syscall number를 검색해보면 write함수는 시스콜넘버가 4번인것을 알수있다. 기본적으로 eax레지스터에 시스콜넘버가 들어가기때문에 eax에는 4가 들어가고, 그다음부터 ebx,ecx,edx... 다음 인자들을 하나하나 넣어주면된다.어셈블리는 아래와같다. .globl mainmain:mov $4, %eaxmov $1, %ebxmov $helloworld, %ecxmov $13, %edxint $0x80 helloworld: .string "Hello World\n" string은 아래서 helloworld란이름으로 선언해두고, eax에 4번을넣게되면서 ..
-
-
-
-