BOF
-
[bcactf] Got libc?CTF/pwn 2022. 6. 8. 16:22
Got libc? 이름부터 got plt와 libc를 활용할 것 같은 느낌이 든다. 메인 함수에서는 gets() 함수를 실행시키고 코드가 끝난다. 그런데 입력받을 배열이 보이지 않아 gdb로 다시 봐봤다. 배열의 위치는 rbp-0x20이다. 오버플로우를 일으켜 여러 정보를 leak 하고 최종적으로는 system("/bin/sh")를 실행시켜야 한다. 다행히도 pie와 canary는 없다! 우선, ROP에 필요한 gadget들을 알아내야 한다. 64비트의 인자 전달 순서는 rdi, rsi, rdx ... 순서이다. 편의상 인자가 하나만 필요한 puts와 system을 이용해 leak을 할 것이기에 pop rdi; ret만 가져왔다. puts의 got를 인자로 넘겨 puts 함수를 실행시켜 실제 주소를 알아..
-
[bcactf] Jump RopeCTF/pwn 2022. 6. 8. 16:00
Jump Rope tmi로 초등학교 때 줄넘기 쌩쌩이를 하지 못해 수행평가를 힘들어 했던 기억이 있다. main 함수에서는 jumprope함수를 호출하고 종료된다. 그런데! jumprope 함수에서는 gets로 입력받기에 bof를 노려볼 수 있다. a라는 함수가 플래그를 출력해주니 jumprope의 ret를 a의 시작 주소로 바꾸면 될 것이다. pie나 canary가 걸려있지 않아 bof하기 쉬울 것이다. 200 바이트 + sfp 8바이트, 총 208 바이트의 더미를 입력하고 a의 시작 주소를 적어주었다.
-
[bcactf] BOF ShopCTF/pwn 2022. 6. 8. 15:49
제목에서부터 알 수 있듯이 이 문제는 BOF 문제이다. balance의 값이 100이면 플래그를 출력해준다! gdb로 확인해봤을 때, name을 입력하는 곳은 rbp-0x80 위치이다. 변수 balance는 rbp-0xc 위치에 있다. 입력 길이에 제한이 없는 gets로 입력받기에 오버플로우를 시키며 rbp-0xc 위치에 있는 balance에 100을 넣어주면 플래그가 출력이 될 것이다. 위와 같이 0x74만큼의 더미 값을 입력하며 balance 위치에 100을 넣어주었다.