read_plt 부분을 보면 주소값이 있는데, 나는 실제 plt를 계속 썼었음.(e.plt['read') 하지만 계속 익스가 되지 않았고 write-up을 본 결과 Disassembly에서 read를 호출하는 부분을 직접적으로 썼음 → 이 부분에서 다양한 시도를 해봐야겠다는 생각을 하였으며 좀더 공부해야겠다는 생각이 들었다.
이 부분에서 read_plt['read']로 계속 해서 안됬었음(삽질), e.plt['read'] → disassembly의 read로 하니 한번에 해결
LAB 6
Mitigation
Code
Stack pivot?
간단한 gadget을 이용하거나 EAX, RAX의 값을 변경(gadger)해 stack 또는 코드의 흐름을 변경하는 기술
gadget을 이용하여 특정 공간에 Fake Stack을 구성해 놓고 Chaining을 하는 기법
특정 영역에 값을 쓸 수 있거나 값이 있는 경우 SFP를 족쳐서 스택을 옮기고 해당 부분의 코드를 실행하는 기법
leave_ret을 이용한 stack pivoting을 하기 위한 전제 조건
페이로드가 저장되어 있는 영역이 존재할 경우 ret까지만 overflow가 발생
페이로드가 저장되어 있는 영역이 없는 경우 입력함수 + leave_ret을 넣을 수 있을 만큼 overflow 발생
일반적으로 stack pivoting을 사용하는 경우
overflow가 많이 나지 않는 경우
main으로 돌아갈 수 없는 경우 (seccomp 등)
Exploit 방법
Exploit
문제 풀고 느낀점