문제분석void get_shell() { system("/bin/sh");}int main(int argc, char *argv[]) { char buf[0x80]; initialize(); read(0, buf, 0x80); printf(buf); exit(0);}read(0, buf, 0x80)에서 길이에 대한 검증을 수행하고 있다. 따라서 일반적인 BOF는 발생하지 않는다. 그렇다면 어떤 취약점이 존재하는 것일까?printf(buf);위 코드에서 Format String Bug 취약점이 발생한다. printf 함수를 사용할 때, 포맷스트링을 지정하지 않고 buf를 1번째 인자로 사용하도록 코드를 작성한 상황이다. 이는 출력함수를 잘못된 방식으로 사용한 경우다. 포맷스..
문제분석코드 분석1. bleh[80] 선언2. 최고관리자 권한으로 변경 후, fgets()로 사용자에게 입력값을 받고 79바이트 만큼 bleh[80]에 저장3. bleh[]을 출력 분석한 내용을 보면 fgets()로 입력 시 bleh[]에 79바이트 만큼만 저장하도록 지정되어있다. bleh[80]는 80바이트이고 79바이트만 저장할 수 있도록 되어있기 때문에, 이전 문제들 처럼 BOF를 하는 것은 불가능하다. 그렇다면 어떻게 상위 계정의 셸을 얻어낼 수 있을까? 이번 문제에서는 BOF와는 다른 취약점이 존재한다. 코드를 다시 한번 봐보자. printf()를 사용하는 방식이 좀 이상하다는 것을 알 수 있다. 보통 printf() 사용시에는 printf("%d",num); 처럼 기본적으로 포맷스트링을 인자로..