본문 바로가기

분류 전체보기77

[LOB]gate gate에 들어가보니 gremlin, gremlin.c 2개 파일이 존재합니다. c언어 파일을 확인해보니 위의 사진과 같네요. argv[1]에 shellcode를 넣은 후, argv[1]주소로 프로세스가 종료될때 이동하게 만들어서 풀어보겠습니다. 사용한 shell code: \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80 argv[1]의 주소는 0xbffffb79네요 이걸 이용해서 풀어보면! 성공했습니다. 2020. 1. 24.
[LOB]초기 설정 LOB 초기 설정을 해줘야 한다네요. 그 이유는 bash 버전이 낮아서 0xff를 0x00으로 인식을해서 bash -> bash2로 설정 해줘야 합니다.! ID : root PW : hackershoolbof 로그인을 한 후 /etc/passwd에서 bash를 bash2로 변경해줍니다. 그리고 /sbin/ifconfig를 통해 ip를 확인 후 연결하면 됩니다. 2020. 1. 24.
[FTZ]level20 힌트를 봐보겠습니다. 80byte를 할당하였으나 fgets에서 79byte를 받음으로 buf overflow 버그가 먹히지 않네요. printf를 보니 포맷 스트링 버그 (FSB)가 존재합니다. 이 버그를 이용해서 풀어야할 것 같습니다. AAAA + %08x * n 을 통해 bleh와 printf의 간격이 어느정도인지 확인해보겠습니다. 4번을 써야 bleh의 내용을 볼 수 있네요. 그럼 AAAA를 입력 후 %08x를 3번 적은 후 bleh에 접근해서 %n으로 메모리 값을 써서 shell을 실행시키도록 해보겠습니다. 근데 여기서 알아야하는게 프로세스가 종료될때 이동하는 ret가 아닌, main이 실행되고 종료될때 사용되는 dtors를 이용해야 한다고 합니다. dtors의 주소 0x08049594를 알아둡시.. 2020. 1. 23.
[FTZ]level19 어..음.. EGG Shell로 풀어볼까요? 성공은 했는데 level20의 password가 아닌 level19, 지금의 password를 주네요. 어떻게 풀어야하나 고민하다가 구글링을 해보니 SetUID가 걸린 Shellcode가 존재하더라구요. 그 코드를 사용해보았습니다. 사용한 Shell code: \x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\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 (출처: https://ezbeat.tistory.com/233) 성공했습니다. 2020. 1. 23.
[FTZ]level18 힌트를 봐보겠습니다. 오우 뭔가 복잡해보입니다. gdb로 봐보니.. 네 아주 기네요... 일단은 main+91번째가 핵심 같습니다. 그리고 main+499를 보면 \xffffff9c에 string[100]을 저장하네요. 근데 여기서 보면 0xffffff9c = -100 이고, main+91의 0xffffff98은 -104 인데 어떻게 접근해야하나 고민인 중에 hint에 나온 코드를 보면 0x08을 입력할 시 백스페이스바를 하네요. 0x08을 4번 입력하고 0xdeadbeef를 맞춰줘보겠습니다. 성공했습니다. 2020. 1. 23.
[FTZ]level17 힌트를 보니까 막막하네요... 일단 gdb를 통해 봐보겠습니다. 여기에도 여기에도 shell을 어떻게 불러야할까 고민을 하다가 Egg Shell이 생각났습니다. 환경변수 EGG에 shell code를 넣고, 그 주소를 얻어서 printit의 주소와 바꿔치기 해보겠습니다. 성공했습니다. 2020. 1. 23.
[FTZ]level16 printit 함수 주소와 shell 함수 주소를 바꿔치기하면 될거같은데 해볼께요. 0xfffffff0 (-16) 에 printit의 주소인0x08048500을 넣네요. 저 위치를 shell의 주소인0x080484d0를 넣어봅시다. 성공했습니다. 2020. 1. 23.
[FTZ]level15 똑같은데 이번에는 check가 포인터네요. gdb를 통해 attackme를 보니까 deadbeef가 그대로 박혀있네요. 저 주소를 확인해보니 0x80484b2였습니다. level14가 0xdeadbeef를 넣어주는거라면 level15는 0xdeadbeef가 들어있는 주소를 넣어주는 방법 같습니다. 시도를 해보겠습니다. 성공이네요. 2020. 1. 23.
[FTZ]level14 buf overflow 버그를 이용해서 check의 값을 0xdeadbeef로 맞춰주면 되네요. main+29 줄을 잘 보면 0xdeadbeef를 비교하는 부분의 메모리 위치를 확인할 수 있습니다. 0xfffffff0 은 -16을 의미하고, 총 0x38 (56)의 크기니까 56 - 16 = 40 의미 없는 값으로 40바이트를 채우고 0xdeadbeef를 채워봅시다. 2020. 1. 23.