최근 CTF 들에 bash trick 이 너무 많이 올라오는 것 같아서 이참에 한 번 정리해놓고 가야겠다. - sh, bash, dash 등이 필터링 되어있는 경우 : $1 을 붙이는 것으로 우회 가능 (s$1h) * $1 에는 아무런 내용이 없기 때문에 bash에서는 sh 만 인식하게 된다. * 동일한 원리로 다음과 같은 상황도 가능하다. - vi가 필터링 되어있지 않은 경우 : * vi안에는 :! [command]로 쉘을 실행시킬 수 있는 기능이 있기 때문에 이것으로 쉘을 획득할 수 있다. (Layer7 Talmoru Party 문제에서 처음 알게 되었다.) - flag 등 파일 이름이 필터링 되어있는 경우 : * bash에서 기본으로 제공하는 regex 를 이용하면 된다. 다음과 같은 형식으로 우회..
레드벨벳 웬디 CTF 문제를 풀 때 ROP를 이용해서 공격하는 문제들이 항상 나오는데, 이번에 Layer7 CTF talmo_party 문제와 사이버가디언즈 2회차 문제들을 풀어보면서 입력받는 함수가 없을 때 어떤 식으로 ROP exploit 코드를 구성하는지 알게 되어 블로그에 글을 남긴다. 만약 입력받는 함수에서 stdin을 통한 fgets() 함수를 사용했을 경우, 우리는 ROP chain에서 fgets()를 사용할 수 없게 된다. 왜냐하면 stdin을 인자로서 넘겨줄 수 있는 방법이 없기 때문이다. 실제 코드에서 stdin을 인자로 넘겨줄 때는 libc 상의 실제 주소로 들어가기 때문에 우리는 libc leak 이라는 것을 통해서 stdin을 사용해야한다. (그런데 libc leak 을 하게 되면..
아이린 움짤로 간단하게 시작하는 블로그 포스팅 포너블 공부를 코드게이트 주니어 본선 이후로 완전히 놓아버렸더니, 감이 너무나 많이 떨어져서 요즘 다시 포너블을 공부하고 있다. 내가 놓기 전에도 FSB 같은 경우는 '어떤 취약점이고 어떻게 공격하면 된다'라는 것만 알고 있고 실제로 CTF 문제를 풀거나 직접 해본 적이 없어서 지금 하고 있다. 사실 FSB라는 건 정말 공격자 입장에서는 어이없는 공격 중 하나이다. 이건 정말로 프로그래머가 귀찮은 작업을 하기 싫어서 나는 취약점이기 때문이다. 위의 소스를 보면 FSB 취약점이 바로 보이게 된다. printf(buffer); 에서 취약점이 발생한다. argv[1] 로 %p를 입력하면 printf는 ESP 뒤의 스택을 보여주게 된다. %p 가 printf 로 전..