완료됨
_flags 세팅 질문

안녕하세요. 문제 풀이까지는 마쳤는데, 풀이 과정에서 _flags 값을 설정하는게 왜 이렇게 설정해야 하는지 궁금해서 질문을 드리게 되었습니다.

처음에는 어쩌피 결국 _IO_new_file_underflow에서 _IO_NO_READS만 통과하면 되니까 0xfbad0000을 전달해줘도 _IO_FILE Arbitrary Address Write 문제처럼 가능할 거라 생각했는데, 이 방식으로는 불가능했습니다.

그래서 디버깅해보니 기존 stdin_flags에는 0xfbad208b가 들어있어서 해당 값을 사용하니 풀이가 되기는 했습니다.

fgets에서는 fread와 달리 _flags를 확인하는 다른 코드가 존재해서 이렇게 _flags를 설정해줘야 하는건가요 ?

그리고 FSOP 풀이에서 정석 방법은 이렇게 조작할 fp_flags를 확인할 수 있다면 미리 해당 값을 확인하여 같은 값으로 세팅해주는게 맞나요 ?

읽어주셔서 정말 감사드립니다.

#pwnable
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
qwerty_io
대표 업적 없음

File structure의 경우 _flags에 따라 프로그램 동작이 크게 달라집니다. 따라서 기존 stdin->_flags의 값을 준다고 이해하기 보다는 원하는 함수까지 진입하기 위해 필요한 플래그들을 설정해준다고 이해하는것이 바람직합니다.

0xfbad0000를 설정했을 때 안되는 이유도 fgets()에서 _IO_new_file_underflow()까지 접근하는 과정 중 다른 플래그들을 체크하기 때문입니다. fgets()의 구현부터 순차적으로 따라가보면 어떤 플래그를 확인하는지 알 수 있습니다.

2025.04.17. 16:38