분류 전체보기 155

[pwnable.kr] fd

파일 디스크립터(fd)에 대한 문제인데, 파일 디스크립터(file descriptor)란? - 시스템으로부터 할당 받은 파일을 대표하는 정수 값(0,1,2) - 프로세스에서 열린 파일의 목록을 관리하는 테이블의 인덱스 유닉스 시스템에서 프로세스가 파일들에 접근할 때, 파일 디스크립터를 사용한다. 표준입력 - 0 표준출력 - 1 표준에러 - 2 로 정수가 이미 할당되어 있다. read()함수에서, 파일 지정 번호를 fd변수에 넣어줄 때 사용함. flag는 당연히 못연다. 소스 해석을 해보면, 1. 인자로 전달된 값을 int형으로 만든다. 2. 이 값에 0x1234를 뺀 값을 fd에 저장한다. 3. read()함수 이용 - read()함수는 정상적으로 실행되면 읽어들인 바이트 수를 반환한다(참고) fd : ..

System Hacking 2019.07.17

[pwnable.kr] passcode

passcode.c의 내용이다. bof문제일거라고 생각했는데 아니었다. 소스코드에서 주목할 부분은 1. fflush 2. scanf 이다. 입력버퍼를 비워주는 fflush(STDIN)을 이용한 것으로 보아, 버퍼오버플로우에 대한 문제는 아니다. scanf에서는 주소 연산자 &를 사용하지 않는데, 문제 내용으로 보아 의도적인 취약점이며, GOT Overwrite를 사용할 수 있는 힌트가 되었다. &연산자가 없다는 의미는, %d로 입력하는 정수 값이 그대로 passcode1,2의 주소가 된다는 말이다. 입력해주는 값이 1234라면 그대로 주소가 1234가 된다는 말인데, 주소값을 맘대로 바꿔주려는 시도를 하니까 Segmentation Fault가 나타난다. 원래대로라면 &연산자가 존재하여, 주소 값 변경 없..

System Hacking 2019.07.17

[Root-me]ELF x86 - Stack buffer overflow basic 1

putty로 접속, 소스코드를 친절하게 문제에 알려줬다. 제목부터가 스택 오버플로우니까, buf에서 입력받아서 쌓이는 순간부터 int check까지의 거리를 계산하면 쉽게 풀릴 듯. 일단 어떤 파일이 있는지부터 확인한다. .passwd라는 파일이 수상함. 당연히 조회 안된다. gdb로 bp걸고 디버깅해보자.. 대충 A 20개 정도 줬다. check가 바로 보이고 거리는 A 40개면 정확하다. fgets로 받을때 버퍼 크기보다 큰 값을 인자로 줬기 때문에 스택 오버플로우가 일어나게 된다. 첫 번째 페이로드의 문제점은, 배쉬쉘이 열리자마자 닫힌다는 것이다. 그래서 권한 상승된 쉘을 붙잡아 줄 필요가 있는데, cat 명령어를 이용해서 해결했다. 이를 이용해 두 번째 페이로드를 작성, 상승된 권한으로 .pass..

System Hacking 2019.07.03