본문 바로가기
워게임/FTZ

FTZ - level18

by meanjung 2021. 7. 26.

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

https://bubble-dev.tistory.com/entry/CC-read-%ED%95%A8%EC%88%98-%ED%8C%8C%EC%9D%BC%EC%9D%84-%EC%9D%BD%EB%8A%94-%ED%95%A8%EC%88%98

 

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

댓글