[어설픈] LOB 8번 orge 문제풀이

2019. 3. 24. 17:54System Hacking/[LOB] Hacker School

안녕하세요! 

오늘은 LOB 8번 문제 

orge 문제풀이를 해볼게요!


아래에 소스코드가 있습니다!

뭐 직전 문제와 달라진 점은 

두 군데 있네요!


//here is changed!

// one more! 


이 두 부분이네요!


첫 번째 바뀐 것은 argument의 갯수를 2개로 고정해라!


두 번째로 바뀐 것은 직전 문제 darkelf에서 저희가 argv[1]에 return을 했는데

더 이상 argv[1]을 사용 못하게 되었네요!

왜냐하면 argv[1]을 0으로 초기화하니까요!


나머지 조건은 똑같아요


버퍼크기, 환경변수 못 쓰는것

 argv[1]의 48번째 \xbf, argv[1]의 길이 48까지

버퍼도 초기화!

 



자 그러면 저희는 어떻게 문제를 풀어야 할까요?

간단하게 생각해보면

argv[1]은 초기화 하는데

argv[0]은 초기화를 안 했잖아?

바로 argv[0] 공략들어갑니다!


그래서 이번에는 argv[0]에다가 쉘코드를 넣으려고!

직전문제와 동일하게 symbolic link를 사용했습니다!


symbolic link에는 shellcode 25byte짜리를 사용했는데요!

아래와 같이 cannot create symbolic link이라고 뜨네요!


왜그러니 찾아보니까 쉘코드에 \x2f가 들어가있으면

\x2f를 / 로 인식을 해서 제대로 안생긴대요!



그래서 저는 \x2f가 안 들어간 48byte 쉘코드를 사용하기로 했습니다!

똑같이 심볼릭 링크를 생성해보니 이번에는 만들어지네요!

(앞에 일부로 \x90을 좀 넣었습니다!)


tmp 폴더에 하나 만들고, 원래 폴더에도 하나 만들었습니다!

그래서 아래와 같이 gdb를 실행시킬 때에도!

이렇게 파일이름을 `python -c 'print '` 이런 형식으로 출력해야하네요!


그래서 이번에도 지난번 문제와 마찬가지로 main에 breakpoint를 걸었습니다!



그리고 argv[1]에다가는 뭐 그냥 44개의 a와 shellcode라는 문자를 입력했습니다!

(어차피 breakpoint가 main 함수 시작하기전이라 main 함수내의 if문 영향 안받아요!)


argc 값 0x00000002 옆에

0xbffffac4가 argv들의 주소죠! 


이걸 x/2x로 보면!

argv[0] argv[1]의 주소가 각각 나오네요!


그래서 앞에 있는 0xbffffbbf을 string으로 확인해보니!

저희가 입력한 쉘코드가 들어가 있네요!



그래서 바로 아래와 같이 payload를 작성해보았습니다!


\x90 앞에 4개 주고 + shellcode 48 바이트 = argv[0]

a 44개 + argv[0] 주소 = argv[1]


근데 이번에도 segmentation fault가 떴네요..



그럼 바로 gdb -c core를 입력해서

코어파일을 확인해보겠습니다!


스택 위에서 부터 계속 쭉 아래로 확인해보았습니다!


계속 내리다 보니! 저희가 입력한 쉘코드가 이 위치에!

자리하고 있었군요!


0xbffffb99 이것을 저희의 ret_address로 넣으면

문제가 풀리겠네요!



그래서 바로 아래와 같이 argv[1]에서 마지막 4byte값을

0xbffffb99로 바꾸니!

문제가 풀립니다!


고생하셨습니다!