포너블11 [Dreamhack] out_of_bound 풀이 교훈:# system(데이터) 와 같이 함수에 보내는 이 인자는 실제 보낼 데이터의 주소를 보내는거다. 사실 변수는 컴퓨터상에서 데이터의 주소를 의미한다.(는 것 같다..약간 뇌피셜이지만) # *command[10] 이런 포인터 배열에서command[n] 의 주소는 command+4*n 이다.(32비트에선!!) 문제 코드:#include #include #include #include char name[16];char *command[10] = { "cat", "ls", "id", "ps", "file ./oob" };void alarm_handler(){ puts("TIME OUT"); exit(-1);}void initialize(){ setvbuf(stdin,.. 2022. 7. 21. [Dreamhack] hook 풀이 일단 아직 해결되지 못한 질문거리가 있어 질문에 올려논 상태이다..long이 8바이트 범위였는지 이런 질문=> 64비트 체제에선 long이 8바이트라고 한다 // gcc -o init_fini_array init_fini_array.c -Wl,-z,norelro#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1);}void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60);}int main(int argc.. 2022. 7. 15. [Dreamhack] fho 풀이 1. main의 ret에는 __libc_start_main+231 이 적혀있다. 그 주소는 libc 라이브러리 안에 있는 함수의 주소이다. 따라서 main함수의 ret를 읽어서 libc_base를 구할 수 있다는 것이다. 2. (아마) libc.symbols[]에서의 libc_base는 0인것 같다. 3. canary가 적용되어있고, 쉘을 따야 한다고 해서 꼭 그 카나리를 익스플로잇으로 같은걸 넣어야 하는건 아니다.ret를 overwrite해서 쉘을 따는게 아니라, ret전에 쉘을 딸 수 있다면 카나리 신경안써도 된다. 4. libc.symbol[] 의 저 중괄호 안에는 너가 gdb에서 쳐서 나왔던 libc의 함수 이름을 고대로 치면 된다.예를 들면 libc.symbols['__libc_system'] .. 2022. 7. 14. [Dreamhack] basic_rop_x86 풀이 교훈: 32비트 체제에서 exploit 코드짤때 함수 호출시 인자 전달은,함수의 주소인자 개수만큼 pop하는 리턴가젯 (어떤 레지스터에 pop하는지는 상관없는듯..아마)함수의 인자사실 정확한 이유는 아직 모르겠다..... 교훈2: 위의 32비트 체제에서 인자 전달하는 방법에서, 인자를 역순이 아니라 순서대로!! 넣는거다인자1인자2인자 3..이렇게 문제 c코드:#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1);}void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal.. 2022. 7. 12. 이전 1 2 3 다음