본문 바로가기

CTF/picoCTF

(11)
got-2-learn-libc vuln.c 포인트 라이브러리 라이브러리란? 다시 사용할 수 있도록 미리 컴파일된 함수들의 묶음 대개 /lib와 /usr/lib에 저장되어 있음 아카이브(정적 라이브러리) : .a 확장자 공유 라이브러리 : .so 확장자 공유 라이브러리란? 동시에 여러 응용프로그램이 동일한 라이브러리 함수를 사용할 경우 사용한다. 실행 시에 사용 가능한 공유 코드를 참조하는 방식으로 공유 라이브러리를 링크시킨다. 필요한 경우 메모리에 로드된다(그래서 library가 heap영역에 존재) 자신을 사용하는 응용프로그램과 독립적으로 갱신될 수 있다. 이 공유 라이브러리의 심볼을 확인해보면필자의 32bit용 라이브러리는 /lib32내에 있다.readelf -s /lib32/libc-2.27.so 이렇게 각 함수의 오프셋이 나온..
echooo echo.c 포인트format String Bug *format String Bug에 자세한 건 따로 정리한 글 참고 printf를 호출하기 직전 스택상태* flag.txt는 임의로 만들었다. 정답 1. %s이용알다시피 "%s"는 문자열의 주소를 참조하는 포맷이기 때문에flag문자열의 시작주소를 찾으면 된다. 스택을 확인해보면esp에서 8번째 뒤에 있다."%8$s" 입력 정답 2. %x이용%x는 4byte씩 16진수 출력esp에서 27번째 뒤에 flag문자열이 있다. "%x "를 27번 입력하면 번거롭고 buf길이(=64byte)를 초과하기 때문에"%27$x"부터 '}'의 16진수인 7d 까지 출력해서 확인
bof2 보다시피 main에도 vuln에도 win호출하는 코드가 없다. 포인트1. win(0xDEADBEEF,0xDEADC0DE) 을 호출2. gets로 bof 1. win 주소 확인 readelf -s vuln0x80485cb 2. gets(buf) 후 buf 확인 108byte+4byte(ebp) 아무거나 채우면 된다. 3. ret를 win주소로 bof "a"*112(dummy)+"\xcb\x85\x04\x08"(win 주소)+"a"*4+"\xef\xbe\xad\xde"(arg1)+"\xde\xc0\xad\xde"(arg2) 왜 "a"*4? win의 리턴 주소 vuln 함수에서 ebp, esp vuln함수 leave 이후 win함수 mov ebp, esp 이후 gets(buf) 이후 스택 상태 자 이제 실행해..