완료됨
어떤 부분을 패치해야할지 감이 잘 안 잡힙니다..
문제 서버 환경이 Ubuntu 18.04이고, 이 우분투 버전에서는 glibc-2.27를 사용하므로 tcache dup이 가능하다는 것을 알았습니다. 그래서 우선 문제 서버와 비슷한 환경을 구축해서 tcache dup을 이용해서 쉘을 따는 것 까지는 했습니다.
이제 이 취약점을 패치를 해야하는데 제가 생각한 방법은 tcache dup이 발생하는 여러가지 이유 중에 포인터 변수가 초기화되지 않아서 중복으로 해제가능한 상황에서 취약점이 터지기때문에 청크를 해제하는 부분에서 포인터 변수를 초기화하면 될 것이라고 생각했습니다. 이 부분에서 어떻게 포인터 변수를 초기화하는 코드를 추가할 지 모르겠습니다. 바이너리를 패치하기위해서는 코드를 새로 추가하는 것이 아닌 기존의 코드를 다른 코드로 수정해야하는데 어떻게 접근해야할까요??
#pwnable
작성자 정보
답변
1
rbtree_work
대표 업적 없음
rbtree_work
대표 업적 없음
이런 경우에는 패치를 하기 위해서 중간에 jmp
를 넣어 자신이 작성하고자 하는 위치로 점프시키고, 그 부분에 패치하고자 하는 내용을 넣는 것이 좋습니다.
자신이 원하는 코드를 넣을 수 있는 빈 공간이 어디있는지 확인해보시고, 직접 작성해보시는 것을 추천 드립니다.
실제로 디버깅 우회등의 문제로 바이너리 패치가 필요한 문제에서 자주 쓰이는 테크닉입니다.