[ ★ ]Study195 [Toddler's Bottle] pwnable.kr passcode 풀이 문제를 푸시기 전에 PLT, GOT를 공부해 봅시다. https://bpsecblog.wordpress.com/2016/03/07/about_got_plt_1/ 제가 제일 만족하면서 봤던 블랙펄 사이트이구요. 위 링크만 봐서는 부족하고, 따로 구글에서 찾아보면서 공부하시길 바랍니다. 보기엔 단순한 코드입니다. 과연 컴파일 할 때 어떤 경고가 나타났던 것일까요? 뭐… 소스코드를 잘보셨다면, passcode 입력 받는 부분에 & 연산자가 없습니다. 이는 변수 주소에 입력값을 넣는 행위이죠. 출력하면 쓰레기 값이 나올 겁니다. 실제로 제 환경에서는 쓰레기 음수가 출력되고, pwnable.kr 환경에서는 쓰레기 양수 값이 나오네요. 사진은 첨부하지 않겠습니다. login 함수 입니다. ebp-0x10 = pas.. 2017. 8. 17. [Toddler's Bottle] pwnable.kr flag 위 적혀있는 주소에서 파일을 다운로드 해봅시다. 리버싱을 해보라고 하네요 %_% 파일을 다운받고 hex editor로 열어보았습니다. 기본적으로 파일을 다운 받았으면, 어떤 파일인지는 알아봐야겠죠..? 리눅스 실행파일임과 동시에 UPX로 패킹되어 있음을 알 수 있습니다. UPX는 Tool과 Manual 2가지 방법을 Unpacking 할 수 있는데 간단하게 Tool로 하겠습니다. UPX 툴을 다운합니다. https://github.com/upx/upx/releases 현재 날짜 기준으로 최신으로 다운 받습니다. 현재 기준입니다. 가장 대표적인게 위 두 가지 이며, Win32라고해서 64비트에서 못쓰는 것이 아니므로, 64비트인 분들도 Win32로 다운받아줍시다. 압축 해제하고, CMD(명령 프롬프트)를 .. 2017. 8. 17. [Toddler's Bottle] pwnable.kr bof 5점짜리 bof 문제이군요. bof에 대해서 공부하고 오세요 ! 위 주소로 들어가서 파일을 다운 받고 C 코드를 보면 핵심은 key == 0xcafababe 가 되도록 하는 것입니다. func 함수로 인자가 0xdeadbeef가 넘어가고 그것이 변수 key가 받고 있으므로, bof 취약점을 이용해 deadbeef를 cafebabe로 바꾸어주면 될 것 같습니다. 여기서 gets 함수를 보고 빠르게 bof라는 것을 알아채야 되는데… gets는 온전히 user input에 관련한 함수이므로 이 함수를 그대로 사용하면 오버플로우취약점에 노출되게 되는 것이다. 이와 관련해서 strcpy, strcat … 등 여러 함수들도 취약하다는 것을 알았으면 한다. 우선, overflow 이 변수에 값을 입력하고 메모리를 한.. 2017. 8. 16. [Toddler's Bottle] pwnable.kr collision main 함수부터 차근차근 보면, 총 20길이의 입력값을 받으며, 4개씩 쪼개어 5번을 더하게 된다. 1111 2222 3333 4444 5555 각 칸을 더하게 된다. 궁금하면 GDB로 확인해보시길 바란다. 즉, 첫 번째 4개 + 그 다음 4개 + 4개 + 4개 .... = 0x21DD09EC가 성립되어야 한다. 0x21DD09EC를 5로 나누면 0x06C5CEC8 값이 나오며, 마지막 한 개의 값에는 4를 더하여 주어야 한다. 딱 나누어 떨어지지 않으니! (0x06C5CEC8 + 0x06C5CEC8 + 0x06C5CEC8 + 0x06C5CEC8 + 0x06C5CECC) 즉, 페이로드는 ./col `python -c 'print "\xc8\xce\xc5\x06"*4 + "\xcc\xce\xc5\x06".. 2017. 8. 16. [Toddler's Bottle] pwnable.kr fd 풀이 리눅스 상에서 file descriptor를 공부해야 되는 내용이네요. 소스코드를 보면 String 비교가 있습니다. LETMEWIN이랑 read로 읽은 스트링이 일치해야 되는 문제입니다.문제에 제시한 것처럼 file descriptor를 공부하셨다면 감이 오셨을 겁니다.표준 입력, 출력, 에러 3가지를 보셨을 겁니다.len = read(fd, buf, 32)의 fd값은 아래처럼len = read(0, buf, 32)이 되도록 해야 합니다.더 위로 올라가면 int fd의 값은 0이 되어야 합니다.즉, 16진수 0x1234 는 10진수로 4660이죠. 요약하자면1. fd 변수의 값이 0이 되어야 표준 입력을 할 수 있다.2. 16진수 1234는 10진수로 4660이므로, 4660을 입력하여 빼주어야 한다... 2017. 8. 16. C언어 strtok 함수 strtok 함수 프로토 타입char *strtok( char *strToken, const char *strDelimit ); 함수 원형은 위와 같습니다. MSDN 출처 사용할 예시 코드123456789101112131415161718#include #include int main(void) { int i = 1; char str[] = "C language is very easy."; char tok[] = " "; char *token; token = strtok(str, tok); while (token != NULL) { printf("%d : token is : %s\n", i, token); token = strtok(NULL, tok); i++; } return 0;}Colored by C.. 2017. 8. 16. 이전 1 ··· 13 14 15 16 17 18 19 ··· 33 다음