본문 바로가기
반응형

pwnable.kr18

pwnable.kr [Toddler's Bottle]->[memcpy] [memcpy] gcc 로 컴파일하여 gdb로 보면 Segmentation fault가 뜹니다. Segmentation fault가 나는 부분이 movntps입니다. 내용에 대해서 조사하니 movntps는 메모리가 정렬이 되어야합니다. 특정 메모리에 저장하는데 16배수로 정렬이 되어있어야 하는 거군요! 그렇다면 dest가 가르키는 주소가 정렬 되어 있어야 한다는 뜻 같습니다. 2021. 8. 11.
pwnable.kr [Toddler's Bottle]->[shellshock] [shellshock] bash의 버그래서 쉘쇼크를 검색하니깐 위키에 아주 자세히 나타나있습니다. 환경변수로 등록해서 /bin/cat flag 로 하면 실행됩니다. 2021. 8. 11.
pwnable.kr [Toddler's Bottle]->[mistake] [mistake] fd에 password 파일을 불러오는줄 알았는데 일단 실행시켜보니깐 두번 입력받습니다. 소스를 보니깐 open(0)이 되서 fd=open에서도 입력을 받습니다. 그렇다면 open에서 입력받은 값과 scanf의 입력값의 xor 1의 값이 같으면 됩니다. 무조건 입력값의 xor ^ 1이니깐 미리 python으로 계산후 입력해주면 됩니다. 2021. 8. 11.
pwnable.kr [Toddler's Bottle]->[blackjack] [blackjack] 우선 코드가 무진장 길어서 프로그램을 시켜보니깐 돈을 입력받길래 그부분 소스만 확인했습니다. if문으로 입력값을 한번만 확인하길래 두번 입력하니깐 검증없이 게임이 진행됩니다. 돈을 아주아주아주 많이 넣고 이기면 플래그가 뜹니다. 2021. 8. 11.
pwnable.kr [Toddler's Bottle]->[leg] [leg] 소스코드를 보면 흠... r3 r0?? arm??!! ARM이네요 소스코드를 보면 key1,2,3의 결과값이 사용자의 입력값이 되면 됩니다. ARM 조사해보니깐 pc(programcouter)의 값이 r0에 남는다고 하네요 (r0가 리턴) 그리고 pc는 사용된 주소의 +4 byte를 가진답니다. 힌트로 주어진 asm코드를 보면 pc값을 r3에 넣어주고 r3를 r0에 넣어주네요. 그렇다면 key1에서 r0에 8ce4가 들어가겠군요 key 2에서는 pc를 r3에 넣어준후, r3에 #4를 더한 후, r0에 넣어주네요 그렇다면 8d04 + 4 + 4 = 8d0c네요 마지막으로 key 3에서는 lr레지스터를 r3에 넣고 r3값을 r0에 넣습니다. lr은 함수 호출시 리턴될 값이므로 메인함수를 보면 8d.. 2021. 8. 11.
pwnable.kr [Toddler's Bottle]->[input] [input] 소스코드를 보고 하나씩 풀어나가면 됩니다. stage1을 만족하기 위해 argv배열을 선언한후 argv[101] = {"/home/input/input", [1 ... 99] = "A", NULL}; 각각에 인자를 넣어준다. stage3은 char *env[2] = {"\xde\xad\xbe\xef=\xca\xfe\xba\xbe", NULL}; 로 환경변수를 선언하여 execve("/home/input/input",argv,env); 로 같이 실행시켜주면된다. stage 4는 FILE* fp = fopen("\x0a","w"); fwrite("\x00\x00\x00\x00",4,1,fp); fclose(fp); 로 구현해주면된다. 2021. 8. 11.
반응형