Analysis amd64 바이너리임. #include #include #include #include #include int main(int argc, char* argv[], char* envp[]){ printf("Welcome to pwnable.kr\n"); printf("Let's see if you know how to give input to program\n"); printf("Just give me correct inputs then you will get the flag :)\n"); // argv if(argc != 100) return 0; if(strcmp(argv['A'],"\x00")) return 0; if(strcmp(argv['B'],"\x20\x0a\x0d")) ret..
ssh로 서버에 접속해서 문제를 풀어야 한다. 우선 접속해서 살펴본다. analysis 서버가 좀 느리다. flag를 읽어야하고 passcode 프로그램에는 set uid가 걸려있다. C 코드를 분석하고 쉘을 따면 될 것 같다. 프로그램 실행 먼저 해보면 이렇게 뜬다. passcode 코드는 생각보다 짧다. #include #include void login(){ int passcode1; int passcode2; printf("enter passcode1 : "); scanf("%d", passcode1); fflush(stdin); // ha! mommy told me that 32bit is vulnerable to bruteforcing :) printf("enter passcode2 : ");..
이전 글에서 goinfre라는 폴더를 보고, 이게 뭐지? 라는 분들도 있을 것 같습니다. 42 seoul 프로그램을 할 때 자동 삭제되는 폴더 이름이 goinfre였는데.. 프랑스어로 탐식가? 아귀? 작명 센스가 좋네요. 컴퓨터를 사용하다보면 점점 파일이 쌓여가고 지저분해지기 때문에, 주기적으로 지워주는 폴더가 필요하다고 생각했고 42를 할 때 goinfre라는 폴더가 그리웠습니다. 청소를 대신 해주는 사람이 있는 느낌이었거든요. 그래서, windows의 작업 스케줄러를 이용해서 goinfre를 구현하고자 합니다. bat 파일 만들기 작업을 수행하기 전에 어떤 작업을 수행할지를 정해야합니다. 작업을 배치파일로 한데 모아주면 편한데, 저는 배치파일을 작성한 경험이 거의 없습니다. GPT에게 물어봐서, @e..
Windows 환경에서는 IDA나 웹서핑을 해야하고, 문제는 vmware에서 푸는게 편한 상황에서. 바로바로 vm에서 생성하거나 수정하는 파일들을 windows에서도 사용할 수 있도록 공유 폴더를 설정해보고자 합니다. VM 공유폴더 세팅 우선 윈도우에서 고급 공유 설정 관리를 가줍시다. 사실 이걸 꼭 해주어야하는지는 잘 모르겠는데, 참고했던 블로그에서는 이걸 하고 윈도우 : 윈도우 공유폴더를 만들었습니다. 여기서는 윈도우 : 우분투 블로그를 만들거라 해야하는지는 모르겠지만.. 혹시 모르니 해두기로 하고, 궁금하다면 직접 끄고서 해보면 좋을 것 같습니다. 끄고 해도 되는 것 같습니당. 이후, 실행중인 VM이어도 괜찮고 바로 VM 설정에 들어갑니다. 여기서 위에 보이는 Optinons를 들어갑니다. 여기서는..
analysis 아무 보호기법도 없고, 실행하면 다음과 같이 나온다. 64bit 파일이므로 ida로 분석해본다. syscall 을 보려고 strace -i 한다. mmap을 사용한다. 동적 분석을 하다보니, mmap으로 새로 만든 공간에 기존 코드 영역을 복사하는 부분이 있다. https://b.mytears.org/2008/08/666/ 메모리 복사 코드 최적화… kldp 를 눈팅하다가 오늘 재밌는 문서를 읽게 되었습니다. 2001년도에 AMD 에서 나온 문서였는데, 그 내용이 상당히 흥미로워서 몇 가지 내용을 옮겨볼까 합니다. 메모리에서 연속된 값들을 다른 곳 b.mytears.org 돌아가서 이후 실행하는 코드를 ida로 확인하고 continue. 근데 이제 보니까 이건 리버싱 문제였다. 리버싱 문..
analysis 동적으로 실행하면 입력한 shellcode를 실행시켜주는 듯. 우리는 /home/orw/flag라는 파일을 읽어야하고 open, read, write만 사용 가능하다. 32bit이고 PIE, NX 없고 혹시나 싶어 secomp 확인 저기 나와있는 syscall에 한해 allow되고 그렇지 않은 것들은 ERRNO된다. main 함수는 이번에도 간결.. printf를 하고 read 한다. printf 부분은 shellcode 입력하라는 출력으로 보인다. 그냥 그대로 쉘코드 넣어주면 될 것 같다. shellcraft 쓰면 편할거 같은데. 쉘코드 총 0xc8바이트만큼 입력받는 것에 유의한다. exploit from pwn import * p = remote('chall.pwnable.tw', 1..
analysis 이 문제는 아무것도 걸려있지 않다. 그리고 32bit 파일이다. 실행하면 위 문장이 출려되고 입력을 받는다. 아무래도 어셈블리로 봐야할 것 같다. 어셈블리도 이게 전부인데, 매우 간단하다. 크롬 syscall에서 가져온건데 거의 다 똑같은거 같아서. int 0x80이 32bit에서는 syscall과 같은 역할을 수행한다. eax가 0x4면 write를 하는데 이건 아무래도 위에서 입력받기 전에 출력하는 부분 이후, read를 하는데 ebx를 0으로 만들어서 stdin 으로 입력받고 dl은 0x3c를 넣는다. ecx는 esp 그대로인듯. 따라서 esp에다가 0x3c만큼 입력받는다. ret를 할 때 esp에다가 0x14만큼 더하고 ret를 하니까 그 만큼 뒤에 있는 _exit 가 들어있는 부..