본문 바로가기

악성코드

(3)
스택 프레임 변수 FS 포맷 스트링 공격 개념 -  prinf() 함수는 문자열로 구성되는 첫 번째 인자에 format string directive 허용 -  format string directive를 불명확하게 사용하여 발생하는 취약점 공격 - printf() 함수에서의 포맷 스트링 사용 예 main(){ char *buffer = "good"; printf("%s\n", buffer);} 첫 번째 인자 %로 시작되는 directive를 순서대로 처리하고, 두 번째 인자에 대응하여 순차적으로 디렉티브 처리한다.* 첫 번째 인자로서 문자열변수도 허용한다.  해당 코드에서 char *buffer = "good\n%x\n";로 수정한 경우에는 good 문자열 뒤에 804240이라는 숫자 또한 출력된다.이 숫자는 good ..
버퍼 오버플로우 BO 버퍼 오버플로우 개념- 데이터의 길이에 대한 불명확한 정의를 악용한 덮어쓰기로 발생- 해커가 의도적으로 구성한 정보로 덮어쓰는 공격 수행 가능- 버퍼 오버플로우 공격에 취약한 함수와 그렇지 않은 함수가 있음(ex. strcpy() )  버퍼 오버플로우 공격 취약한 기본 예제 코드int main()(int argc, char *argv[]){ char buffer[10]; strcpy(buffer, argv[1]); printf("%s\n", &buffer);} 예제 코드에서 오버플로우 공격은 strcpy(buffer, argv[1]) 에서 발생한다.  GDB를 통하여 본 main()으로부터 strcpy()가 호출되는 과정 프로세스 흐름도1. 스택에 ebp 값을 넣음2. 현재의 ESP 값을 EB..
포맷 스트링 공격 스택 조작 2. 포맷 스트링 공격의 원리- 포맷 스트링 문자를 이용한 메모리 열람char *buffer에 문자열을 입력할  떄 %x라는 포맷 스트링 디랙티브를 추가한 경우 #include main(){ char *buffer = "wishfree\n%x\n"; printf(buffer);} 결과값 : wishfree 문자열 외에 80440이라는 숫자 출력이 숫자는 wishfree 문자열이 저장된 다음의 메모리에 존재하는 값을 인자로 가정하여 출력된다. 포맷 스트링 디랙티브 종류 잘못된 포맷 스트링 함수 사용법#includemain(){ char *buffer = "wishfree"; printf(buffer);} 올바른 포맷 스트링 함수 사용법#include main(){ char *buffe..