최근 rop 공격을 공부하면서 난항을 겪었다. #include int main(void) { char buf[32] = {}; puts("Hello World!"); puts("Hello ASLR!"); scanf("%s", buf); return 0; } gcc -o example4 example4.c -fno-stack-protector -mpreferred-stack-boundary=2 -m32 -no-pie rop 공격을 테스트하기 위해, 위 c언어 소스 코드를 아래 gcc 명령어를 이용해 실습에 방해되는 보호 기법을 해제해준 상태로 빌드를 했다. 빌드 후 gdb로 파일을 열어 scanf 함수의 plt 코드를 확인해보면 정상적인 plt 코드가 아니라, endbr32 같은 이상한 명령어들이 보이는 ..
Old (2021.01 ~ 2021.12)/Tip
최근에 format string bug 취약점을 공부하면서 c언어 코드를 작성해 %n, %hn에 관한 실험을 많이 해봤는데, 이상하게 같은 코드라도 gcc에서는 빌드가 되지만 visual studio(2017)에서는 빌드가 안되는 현상을 발견했다. 위 코드는 "Hello World!"의 길이 값을 int형 변수 a에 넣어준 후 a 값을 출력하는 간단한 c언어 코드다. %n 서식 지정자가 길이 값을 넣어주는 역할을 하는데, 저대로 실행한다면 아래와 같은 오류가 뜬다. %hn을 써봐도 똑같은 오류가 뜨는 것을 볼 수 있다. 해결 방법은 간단하다. _set_printf_count_output(1); 이 코드를 main 함수 맨 위에 작성해주면 된다. _set_printf_count_output(1);를 써주니..