using setbuf setvbuf
문제를 풀다보면,
Bash
.text:0000000000400911 mov edi, 3Ch ; '<' ; seconds
.text:0000000000400916 call _alarm
.text:000000000040091B mov rax, cs:stdin@@GLIBC_2_2_5
.text:0000000000400922 mov esi, 0 ; buf
.text:0000000000400927 mov rdi, rax ; stream
.text:000000000040092A call _setbuf
.text:000000000040092F mov rax, cs:__bss_start
.text:0000000000400936 mov esi, 0 ; buf
.text:000000000040093B mov rdi, rax ; stream
.text:000000000040093E call _setbuf
.text:0000000000400943 nop
.text:0000000000400944 leave다음과 같이 버퍼세팅을 하는 부분이 있다. 과연 이 부분을 사용해도 될까?
정답은 사용해도 된다… 대놓고 사용하라고 하는 문제도 있다. 이 코드에는
Bash
.text:000000000040091B mov rax, cs:stdin@@GLIBC_2_2_5
다음과 같이 실제 libc stdin stdout stderr 와 같은 주소가 레지스터 ( rax , rdi ) 에 들어오게 된다. 일반적으로는 이걸로만은 leak을 할 수는 없겠지만,