포맷스트링 2

fsb

보호기법 프로그램 실행%6$llx를 쳐보면 입력한게 문자열로 출력됨.입력한 값이 6번째 인덱스에 있는걸 알았음. %6$llx 해석%6$ → **6번째 인자(argument)**를 참조llx → 그 인자를 unsigned long long (8바이트) 정수로 간주하고→ 그걸 **16진수(lowercase)**로 출력IDA분석 1. fsb가 가능해 첫번째 read에서 got주소를 넣어서 leak해주고2. 두 번째 read에서 got overwrite로 puts_got를 system으로 바꿔서 system("/bin/sh")가 실행되게 함.Exploit1. read_addr leak프로그램 실행에서 6번째 인덱스에 내가 입력한 값이 있는걸 알았으니까7번째 인덱스에 주소를 넣어주고6번째 인덱스를 사용해 %s로..

메모리를 지키는 방법: C/C++ 포맷 스트링 취약점과 버퍼 오버플로우

포맷 스트링프로그래밍에서 텍스트의 형식을 지정하는 데 사용되는 문자열이다.포맷 스트링은 일반 텍스트와 특수 형식 지정자(format specifiers)로 구성됨.형식 지정자는 '%'로 시작하고 출력할 데이터의 유형과 형식을 지정한다. 그 중에도 버퍼 오버플로우 공격에 취약한 주요 포맷스트링은 이렇다.위험 함수들strcpy(dest, src):대상 버퍼(dest)의 크기를 확인하지 않고 소스 문자열(src)을 복사.src가 dest보다 크면 오버플로우가 발생.strcat(dest, src):대상 문자열(dest)의 끝에 src를 추가하지만 결과 문자열이 버퍼 크기를 초과하는지 확인하지 않음.sprintf(buffer, format, ...):형식화된 문자열을 버퍼에 기록하지만 버퍼 크기를 검사하지 않음...