Write up (Wargame)/Pwnable
[Pwnable] Pwnable.kr Write up - [collision]
이번엔 collision이라는 문제를 풀 것입니다. 우분투 터미널에 ssh col@pwnable.kr -p2222 를 입력하고 패스워드는 guest 풀이 당연히 cat flag는 안되고 col.c를 보면 이렇게 되어있습니다. 아무래도 MD5 해시 충돌에 대한 문제라고 하는데 https://www.crocus.co.kr/1382 MD5는 해시 충돌로 인해 취약한 해싱함수이고 해시함수는 충돌이 없어야하는데~~ 대충 이런 개념을 이용해서 원래 값과 같은 값으로 충돌을 일으키는 문제인듯 합니다. 소스코드를 해석해보면. main함수에서 인자를 받고. 인자의 사이즈(문자열의 길이)는 20byte여야 합니다. 그리고 hashcode라는 값과 check_password라는 함수에 인자를 넣은 결과가 같으면 플래그를 출..
[Pwnable] Pwnable.kr Write up - [fd]
이번에 풀 문제는 fd File Descriptor(파일 디스크립터)입니다. ssh로 접속해서 확인해봅니다. Ubuntu 환경에서 terminal에 이렇게 해주고 패스워드로는 guest 그럼 접속을 하는데 여기서부터 풀이를 시작해봅시다. 풀이 사실 파일디스크립터라는 이름을 몰라도 read함수의 사용법만 알면 풀 수 있을 것입니다. read함수는 인자로 3개를 받는데 fd, buf, size 입니다. read(fd, buf, size) 다른 글에서도 이미 몇 번 설명했지만 fd = 0 : stdin (표준 입력) fd = 1 : stdout (표준 출력) fd = 2 : stderr (표준 에러) 입니다. cat flag를 그냥 하면 권한이 없어서 fd.c라는 코드를 보고 fd를 exploit합니다. fd..
[Dreamhack Wargame] SSP_001, 스택 순서의 궁금증
나름 오랜만에 롸업을 써 봅니다. 꾸준히 공부하고 싶은데.. 교양보다 내가 하고싶은 공부를 하고 싶어요. 서론 이번 문제는 Stack Canary에 관련된 문제 ssp_001입니다. 이 문제를 풀면서 어셈블리를 봐야하는 중요성을 꽤 느꼈습니다. checksec을 하면 이렇게 나타납니다. NX로 인해 쉘코드를 삽입할 수 없고, Canary found이므로 오버플로우 시에 Canary를 고려해야합니다. 또한 32비트 파일이네요. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, ..
[Dreamhack Wargame] Canary와 Return to Shellcode Write up
아무래도 기억력이 나쁜 편이라 계속해서 썼던 코드를 잊어버리네요. 그래서 블로그를 시작했지만 암튼, 문제 풀이를 해보겠습니다. 문제 이번 문제도 사실 풀이는 이미 이전에 있습니다. 그래도 그냥 해보죠.. 제 풀이는 안 보고 했으니까. shecksec 을 하면 다음과 같이 나타납니다. Canary를 찾을 수 있습니다. // Name: r2s.c // Compile: gcc -o r2s r2s.c -zexecstack #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); p..