hint
구글링
- 멀티 플렉싱
- 멀티 셀렉트 서버
하면 file descriptor와 관련된 select 함수에 대한 설명이 나온다.
hint 분석
FD_ZERO(&fds) ☞ fd_set fds를 0으로 초기화한다.
FD_SET(STDIN_FILENO, &fds) ☞ STDIN_FILENO : 표준입력(fd = 0)/ fds의 0번째를 1로 셋팅
if( select(FD_SETSIZE, &fds, NULL, NULL, NULL) >= 1 ) ☞ select 함수는 데이터가 변경된 파일의 개수, 즉 fd_set에서 비트 값이 1인 필드의 개수를 반환/ 비트값이 1인 필드의 개수가 1개 이상이라면
if( fd_isset(fileno(stdin), &fds ) ☞ fileno 함수 : 파일 포인터를 넘겨주면 파일 디스크립터를 돌려준다/ 즉, fileno(stdin)==0/ fds의 0번 필드가 셋팅되어 있다면
read( fileno(stdin), &x, 1 ) ☞ 값 하나를 입력받아서 x에 저장하겠다.. 이 말씀인듯
▼ read 함수란?
switch 문에서는 x값에 따라 case를 나눴다.
어셈 까보면
count [ebp - 112]
x [ebp-108]
check [ebp-104]
string[100] [ebp-100]
x값을 입력해서
count값을 -로 만들어서
string[count]에 0xdeadbeef를 만들면 된다.
\x08을 4번 입력하면 count = -4
string[-4] = \xef
string[-3] = \xbe
string[-2] = \xad
string[-1] = \xde
가 되며 익스플로잇
참고
https://www.joinc.co.kr/w/Site/system_programing/File/select
select를 이용한 입출력 다중화
select함수로 입출력 다중화
www.joinc.co.kr
C/C++ read 함수 - 파일을 읽는 함수
read(2) 함수 기능 파일을 읽는 함수입니다. 함수 원형 #include ssize_t read(int fd, void *buf, size_t nbytes); 매개변수 int fd 읽을 파일의 파일 디스크립터 void *buf 읽어들인 데이터를 저장할 버퍼(배열)..
bubble-dev.tistory.com
https://leeggoggal.tistory.com/28
FTZ level18 풀이
FTZ level18 풀이 level 18의 홈디렉터리에 level19 의권한으로 setuid가 걸린 attackme 프로그램 확인 hint를 열어보자 힌트에는 전 문제들과는 다르게 엄청 복잡한 코드가 나왔다. 흠.. 최대한 해석해보도
leeggoggal.tistory.com
'워게임 > FTZ' 카테고리의 다른 글
FTZ - level20 (0) | 2021.07.28 |
---|---|
FTZ - level19 (0) | 2021.07.28 |
FTZ - level17 (0) | 2021.07.26 |
FTZ - level16 (0) | 2021.07.26 |
FTZ - level15 (0) | 2021.07.24 |
댓글