강의 설명

이번 강의에서는 _IO_FILE을 이용해 임의 메모리 주소의 값을 쓰는 익스플로잇을 설명합니다.

강의 목표
_IO_FILE을 이용해 임의 메모리 주소의 값을 쓰는 익스플로잇을 이해한다.
이 강의와 관련된 질문들입니다.
2개의 질문
페이로드 전송시에 "\x00"*1024 존재이유
패이로드 전송시에 "\x00"*1024를 덧붙여서 보내는데, 이유가 무엇인가요? ```python p.sendline(p64(0xDEADBEEF)+b"\x00"*(1024-10)) ``` 와 같이 fread안에서 호출된 read에 전송하는 패이로드 길이가 8+1014 미만인 경우 (반드시 1022를 넘어야 익스가 됨)익스가 되지 않는데, 무엇때문인가요? libc 소스코드를 보니, _IO_new_file_underflow 함수의 다음 구문 때문일것으로 추측중인데 (read의 반환 값에 의해 달라지는 값 -> count 변수) ```c int count = _IO_SYSREAD (fp, fp->_IO_buf_base, fp->_IO_buf_end - fp->_IO_buf_base);** if (count <= 0) { if (count == 0) fp->_flags |= _IO_EOF_SEEN; else fp->_flags |= _IO_ERR_SEEN, count = 0; } fp->_IO_read_end += count; if (count == 0) { /* If a stream is read to EOF, the calling application may switch active handles. As a result, our offset cache would no longer be valid, so unset it. */ fp->_offset = _IO_pos_BAD; return EOF; } if (fp->_offset != _IO_pos_BAD) _IO_pos_adjust (fp->_offset, count); return *(unsigned char *) fp->_IO_read_ptr; } libc_hidden_ver (_IO_new_file_underflow, _IO_file_underflow) ``` 결국 count 값을 fp->_offset 에 더해주는데, 이 count 값이 특정 길이 (여기서는 1022) 가 넘지 않으면 문제가 생기는 것으로 이해하였습니다.. 이외에 fp->_offset 값을 이용하거나 하는 부분은 보이지 않아 잘 이해가 가지 않습니다 ㅠ
#시스템해킹
#공격기법
#io_file
강의 자료에 오타가 있는것 같습니다.
read(fd, buf, size) 형식을 고려했을때, _IO_buf_end를 overwrite_me의 주소로 조작하고 _IO_buf_base를 overwrite_me+1024 보다 큰 값으로 조작하는 것이 아니라 _IO_buf_base를 overwrite_me의 주소로 조작하고 _IO_buf_end를 overwrite_me+1024 보다 큰 값으로 조작해야 하는 것 아닌가요?? 익스플로잇 코드에는 해당 내용이 반영되어있어 글 남겨봅니다.
#시스템해킹
#공격기법
#io_file
강의 평점
0.0★ (0)
0
Exploit Tech: _IO_FILE Arbitrary Address Write
0.0★ (0)
Free
상세정보
약 2 hours 소요
매우 어려운 난이도
없음