포맷스트링 버그 2

[Format String Bug] 포맷스트링 버그 (fsb) - 2

포맷스트링 버그 2차시입니다 ㅎㅎ 저번시간에는 포맷스트링버그의 기본적인 원리를 알아보았습니다. 이번에는 포맷스트링으로 메모리값을 변조하는 법을 알아보겠습니다. 바이너리 파일 하나를 한번 볼까요? #include #include void shell(); int main() { char buf[100]; int len; read(0, buf, 100); printf(buf); exit(0); } void shell() { system("/bin/sh"); } Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000) 이 프로그램은 BOF로 Exploit 하는것이 불가능합니다. 그러니..

studies/pwnable 2020.04.23

[Format String Bug] 포맷스트링 버그 (fsb) - 1

이번 시리즈에서는 포맷스트링 버그를 이용한 공격방법을 배워볼건데요 그 전에 먼저 포맷스트링에 대해 알아봅시다. 1. 포맷스트링 포맷 스트링은 우리가 주로 사용하는 c언어에 있는 printf함수에서 사용되는 것입니다. 이 코드를 봅시다. 1 2 3 4 5 6 7 #include int main() { int a = 0; printf("%d" ,a); return 0; } cs 여기에서 사용되는 이 "%s"가 바로 포맷스트링입니다. 즉, printf의 인자에 대응해서 그 인자의 자료형에 맞게 포맷스트링을 지정해주어서 출력해줄수 있습니다. 포맷스트링은 대표적으로 이러한 것들이 있습니다. 인자 입력 타입 출력 %d 값 일반적인 10진수 %s 포인터 포인터에 위치하는 문자열 %x 값 16진수 %u 값 부호없는 1..

studies/pwnable 2019.10.02