본문 바로가기

포맷스트링2

FTZ Hackerschool 버퍼 오버플로우, 포맷스트링 공격 정리 [포맷스트링 공격] 기본 취약 확인 - "AAAA %8x %8x %8x %8x" # 41414141 값이 나오면 뒤의 4byte X 3 = 12 바이트의 더미값이 존재하는 것, 41414141이 AAAA임. 이제 소멸자 End 주소에 셸코드 주소를 붙여넣어 주어야 공격이 가능하다. 소멸자 End 주소 확인 - nm attackme | more 또는 objdump -h attackme 또는 readelf -S attackme | grep tors Dtors라는 부분의 주소(08049594) 에서 4byte 추가한 부분이 End 주소, 낮은 주소와 높은 주소로 구별이 필요(int값 한계 때문) (낮은 주소) (높은 주소) 08049598 +(2byte) 0804959a - Dtors End 주소 그 다음 쉘.. 2023. 12. 11.
포맷스트링 공격 정리 [포맷스트링 공격 원리] 포맷스트링은 printf와 같은 함수에서 %d, %x와 같은 값을 받는 부분이다. 보통 printf("%d",string); 와 같은 방식으로 사용하는데 프로그램을 개발할 때 printf(string)와 같은 방식으로 프로그램을 개발한 상태이며 사용자 입력 값을 받게 될 경우 포맷스트링 취약점이 존재하게 된다. 이는 포맷스트링 인자를 제대로 지정해 주지 않았을 때 공격자가 포맷스트링 인자를 넘겨주면 스택의 주소가 포맷스트링으로 인해 노출되는 취약점이다. ​ [공격 방식] 여기서 공격자는 입력받는 값에 %08x와 같은 값을 넣어주어 프로그램이 취약한지 확인할 수 있다. 해당 값을 넣어주었을 때 메모리 주소값이 반환 값으로 나온다면 취약함에 해당한다. 공격 시에는 임의의 문자열과 포.. 2023. 12. 11.