pwnable 3

[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

libc-database 사용해보기

github에 들어가서 libc-database라고 검색해보자. 자세한 설명은 이곳에 나와있습니다. https://github.com/niklasb/libc-database niklasb/libc-database Build a database of libc offsets to simplify exploitation - niklasb/libc-database github.com # libc-database 설치 방법 위 링크에서 참고하시면 됩니다! # libc-database를 사용하는 이유 우리가 ctf문제를 풀다보면 이러한 어려움에 직면할때가 있습니다. 예를들어, ROP를 해야하는데 libc파일을 주지 않을때가 있어요. 보통 우리가 바이너리파일을 받으면, 주최측 서버에서 돌아가는 libc와 내 pc에서..

studies/pwnable 2019.10.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