memory leak 관점에서의 format string bug의 유용성.
·
Tips & theory
서론 개인적으로 지금까지 format string bug는 단순히 offset 확인을 위한 %p(또는 %x), 입력 길이를 위한 %c, 길이만큼 쓰기를 위한 %n 정도만 사용하고 있었는데, linked_list 라는 문제를 풀면서 조금 더 발전할 수 있는 계기가 되었다. 원리 어차피 원리는 format string bug이다. 다만, memory leak 관점에서 활용성을 극대화할 수 있어서 조금 정리해둔다. 일단 간단히 코딩. main(){ char buf[100]; while (1){ gets(buf); printf(buf); printf("\n"); } } 컴파일 시 에러가 많이 나는데 무시해도 상관없음 ㅋ 일단, 아래와 같이 %p로 출력해봤다. ┌──(kali㉿kali)-[~/Downloads] ..
Return to Shellcode
·
Wargame/Dreamhack
#include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int main() { char buf[0x50]; init(); printf("Address of the buf: %p\n", buf); printf("Distance between buf and $rbp: %ld\n", (char*)__builtin_frame_address(0) - buf); printf("[1] Leak the canary\n"); printf("Input: "); fflush(stdout); read(0, buf, 0x100); printf("Your input is '%s'\n", buf); puts("[2] Overwrite ..
ssp_001
·
Wargame/Dreamhack
이번 문제는 SSP 방어기법, 즉 canary가 보호기법으로 걸려있는 문제이다. 이를 우회하기위해서는 memory leak이 발생한다면 이를 활용해서 canary를 확인하는 방법이 최선이며, 그게 아니라면 브루트포싱해야한다. 코드를 조금 분석해보자. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh");..