System Hacking/[LOB] Hacker School(17)
-
[어설픈] LOB 18번succubus 문제풀이
안녕하세요!오늘은 LOB 18번 문제Succubus을 풀어보겠습니다! 소스코드는 아래와 같습니다! argv[ ]형식으로 인자 전달 받구요!buffer[40] 할당하구요char형 포인터 addr 할당하구요argument 2개보다 작으면 안되구요! addr 포인터에 strcpy함수 주소 넣어서만약 main 함수의 ret_address에 strcpy가 아니면무조건 exit( ) = 무조건 strcpy로 return해서 문제풀어라! 그리고 제일 짜증나는 부분인!buffer+48부터 4byte를 AAAA로 초기화합니다왜 짜증이 나냐? AAAA부분은 strcpy의 return address인데return address를 AAAA로 고정시켜놨어요..... 자 그러면 strcpy를 이용해서 어떻게 문제를 풀까 생각을 ..
2019.04.12 -
[어설픈] LOB 17번 zombie_assassin 문제풀이
안녕하세요!오늘은 LOB 17번 문제인 zombie_assassin을 풀어보도록 하겠습니다!소스코드는 아래와 같습니다! 근데 문제 힌트에서calling functions continuously! 라고 적혀있네요! "함수를 계속해서 호출한다!"이렇게 이해하시면 됩니다! inspector(확인하는 사람)라는 변수가 전역으로 선언되어 있네요!그 값엔 0이 있습니다! 그리고 밑에 있는도(do) 개(gye) 걸(gul) 윷(yut) 모(mo) 함수들을 하나씩 보면각각의 함수가 실행되기 전에전역변수 check의 값을 확인합니다! 그래서 도->모까지 계속 함수를 실행시켜 주면됩니다!무슨말이냐? 우리나라의 전통 윷놀이에서 도:1 개:2 걸:3 윷:4 모:5 이렇게 되어있죠? 도 함수에서 check의 값을 1로 설정합니..
2019.04.10 -
[어설픈] LOB 16번 assassin 문제풀이
안녕하세요! 오늘은 LOB 16번 문제인 assassin문제풀이를 해보도록 하겠습니다! 소스코드는 아래와 같습니다! 힌트에서 FEBP라고 적혀있네요! FEBP는 fake ebp로! 제가 FPO 풀 때도 설명드렸었는데! ebp+4의 위치에 ret_address가 있으므로 ret_address에 leave, ret gadget을 넣고! ebp 주소를 변조해서 변조된 ebp 상태서 leave 명령어(mov esp,ebp , pop ebp)가 실행되면 ret도 원래 자리에서 안하고 엉뚱한 자리에서 ret 이 이루어지는 그런 공격기법입니다! 더 자세한 부분은 구글에서 검색해보시고 공부하시면 좋을 것 같습니다! 소스코드는 별거 없는거 같습니다! argv[ ] 형식으로 인자를 전달받고 버퍼[40] 할당 argumen..
2019.04.08 -
[어설픈] LOB 15번 giant 문제풀이
안녕하세요!오늘은 LOB 15번 문제인giant 문제풀이를 해보도록 하겠습니다! 소스는 아래와 같습니다!RTL도 못하고 Stack도 사용 못한다고 적혀있네요! 1) 버퍼 [40] 선언되고 2) argument 는 2개 이상! 3) argv[1]의 48번째 값이 \xbf면 exit되고 (stack으로 return 하지마라) 4) argv[1]의 48번째 값이 \x40이면exit되고 (library로 return 하지마라) 5) 버퍼도 깔끔하게 비우네요! 저는 여기서 최대한 나에게 주어진 조건이 뭔지판단해봤습니다 1) return 뒤에 코드를 덮을 수 있고(이게 굉장히 큰 merit) 2) argv[ ]들을 초기화 안 함 근데 return 뒤에 코드를 덮을 수 있으니return에 pop pop return ..
2019.04.06 -
[어설픈] LOB 14번 bugbear 문제풀이
안녕하세요!오늘은 LOB 14번 문제인bugbear 문제풀이를 해보도록 하겠습니다! 소스는 아래와 같습니다!소스가 좀 길어지긴 했네요! 근데 사실 별거는 없습니다!주석으로 된 부분(execve구하는 코드)이 길어서 그런거죠 간단하게 보자면 똑같이 버퍼는 40byte입니다그 뒤에 다양한 포인터들 선언되는데그건 프로그램이 execve의 정확한 주소 구하는데 사용되는 거구요! argument 개수 2개 보다 작으면 안되고컴퓨터가 아래의 주석처럼 코드가 쭉 실행되서execve 함수의 주소를 execve_addr에 담죠! 그 다음에 저희가 argv[1]에 입력한 45~48번째 값들을ret 변수에 담습니다! 그리고 execve_addr이랑 ret 변수 값이랑 같으면 통과!다르면 exit! 그 다음에는 strcpy로..
2019.04.04 -
[어설픈] LOB 13번 darkknight 문제풀이
안녕하세요! 오늘은 LOB 13번 문제인darkknight 문제 풀이를 해보도록 하겠습니다! 소스에 RTL1이라고 되어 있네요!소스 자체도 매우 간단하네요! 버퍼 크기가 40이고argument 개수가 2개이상이여야 하고!스택으로 return 하면 안되고!strcpy에서 취약점 터지고요! 문제를 분석해보니 LOB gate 문제에서stack return만 막아 놓은 문제 같은데요? 근데 방법은 LOB gate와 똑같이 하면 될 거 같아요!왜냐면 그때도 return은 library에 있는 system함수로 했거든요! 자 오랜만에 ldd 명령어를 이용해서bugbear가 어떤 라이브러리 의존성을 가지고 있는지 확인! 역시 /lib/libc.so.6을 사용하네요!(주소는 0x40018000) 그리고 nm 명령어를 ..
2019.04.02