2017/11/27(3)
-
bof 기초
#include #include main(){int crap;int check;char buf[20];fgets(buf,45,stdin);// buf 채운 뒤 0xdeadbeef 해야 한다.if(check == 0xdeadbeef) // vuln {setreuid(3095,3095);system("/bin/sh");}return 0;} (gdb) set disassembly-flavor intel(gdb) disas mainDump of assembler code for function main:0x08048490 : push ebp0x08048491 : mov ebp,esp0x08048493 : sub esp,0x380x08048496 : sub esp,0x40x08048499 : push ds:0x8..
2017.11.27 -
rtl 공부 2
#include main(int argc, char *argv[]){ long i=0x1234567; char buf[1024]; setreuid( 3094, 3094 ); if(argc > 1) strcpy(buf,argv[1]); if(i != 0x1234567) { printf(" Warnning: Buffer Overflow !!! \n"); kill(0,11); }} 0x418 = 1048(dec) 0x400 = 1024(dec) buf[1024]에서는 0x400은 실제 값 + 0x18은 더미값(24 dec) 0xbfffdf30: 0x08048308 0x42130a14 0xbfffdf48 0x01234567여기만 안건들면 되겠는데 A가 들어가는 시작주소가 0xbfffdb30 인데 ASLR 적용되..
2017.11.27 -
rtl 공부
ldd -> libc 경로 알 수 있음 (ldd는 지정한 프로그램의 라이브러리 의존성을 확인할 때 사용한다고 한다.)지금 내 프로그램에서 사용중인 라이브러리를 알기 위해 ldd ./attackme를 명령으로 입력한 것 사용중인 라이브러리 libc.so.6 ldd attackme 원리:ldd attackme를 하게 되면 베이스주소를 알 수가 있고 베이스주소만으로는 진행할 수 없기 때문에 해당 라이브러리 libc.so.6안에 있는 /bin/sh의 오프셋 주소를 얻어와서 베이스 + 오프셋 하여 '/bin/sh'이 등록되어 있는 메모리 주소를 알아내야 한다.즉, libc내의 함수주소를 얻어오는 거다. 그 주소를 알아냈다면, dummy와 system + dummy + bin/sh의 오프셋을 이용하여 해당 프로그램..
2017.11.27