분류 전체보기(82)
-
[어설픈] 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 -
[어설픈] LOB 12번 golem 문제풀이
안녕하세요!오늘은 LOB 12번 문제인golem 문제풀이를 해보도록 하겠습니다! 문제의 소스는 아래와 같습니다!이번에 keyword에 FPO라는게 있네요!-----------------------------------------------------※FPO(Frame Pointer Overflow)1. ebp(=frame pointer)에서 1byte overflow가 일어나야함2. 서브함수(=main 함수 말고 또 다른 함수)가 필요함 1의 이유는 1byte overflow가 일어난다면ebp의 첫 번째 byte가 영향받죠! ebp근처에 있는 버퍼나, ebp 근처의 이웃으로 ebp의 조작이 가능함! 왜 그러냐? 직전 문제 vampire에서 저희가 ret address에\x99\xff\xff\xbf를 줬죠..
2019.03.30 -
[어설픈] LOB 10번 vampire 문제풀이
안녕하세요!오늘은 LOB 10번 문제Vampire 문제풀이를 해보도록 하겠습니다! 문제의 소스코드는 아래와 같이 나와있습니다!직전 문제와 바뀐 게 몇 개 있네요! 그치만 순서대로 주어진 조건을 살펴볼게요! 1) argument 개수는 2개보다 작으면 안된다! 2) egghunter라는 놈으로 환경변수를 못 쓰게 막는다 3) 입력값의 48번째 값이 \xbf이여야 한다(=스택으로 return 하세요) 4) argument[1]의 길이가 48보다 길면 안돼요! 5) 버퍼는 당연히 초기화 할꺼구요(=못써요 ) 6) 이번에는 argv들도 모두 초기화 할꺼에요! (= argv[0] argv[1] argv[2] ... 모든 걸..) 솔직히 조건들을 봤을 땐 좀 절망적이였습니다아니 argv[ ]들까지 초기화 시키면....
2019.03.28