[어설픈] LOB 6번 wolfman 문제풀이

2019. 3. 19. 18:19System Hacking/[LOB] Hacker School

안녕하세요!

오늘은 LOB 6번문제

wolfman을 풀어보도록 하겠습니다!


소스코드는 아래에 나와있습니다!

직전 문제인 orc과 다른 점이 딱 한 군데 있네요!  


//check the length of argument 이 부분이요!

argv[1]의 길이가 48보다 크면 안돼요!


나머지 조건들은 다 동일해요!

버퍼가 40인 것! int형 변수 i가 선언된 것!

argument 갯수!

환경변수 못 쓰는 것!

argv[1]의 48번째 값이 \xbf이여야 하는 것!

버퍼값이 0으로 초기화 되는 것!

(자세한 설명은 직전 문제풀이들을 참고해 주세요! :) )


우선 tmp 폴더를 만들고

지난 문제처럼 

tmp 폴더에 프로그램을 복사해줍니다!

저희가 로그인한 wolfman 소유로 

파일을 실행시켜야 gdb가 돌아가니까요!



그리고 이번에도 똑같이 main의 시작점에다가

breakpoint를 걸어요!

main이 시작하기 전에 들어가는 인자 값들을

확인하려구요!


Question: 어?! 직전문제에서도 이렇게 똑같이 풀었는데

이렇게 그대로 풀어도 되나요?


A: 48byte에 딱 맞춰서 payload 작성할 거 같아서요!


잘 안보이시겠지만 gdb 맨 앞에

breakpoint 걸구요!


직전문제와 같이! 19개의 \x90 넣고!

그 뒤에 25byte 쉘코드 넣었습니다!

그리고 48번째 값에 \xbf넣은거  보이시나요?

45,46,47,은 bbb인데 48만 \xbf으로 해놨죠?




직전문제에서 풀이했듯이!

0x00000002는 argc 값이고!

0xbffffb04는 argv주소들을 담아 놓은 공간이에요!


그래서 밑에 x/2wx 0xbffffb04라고 입력하면

argv[0] argv[1]의 주소값들이 나오게 됩니다!


저희는 뒤에 있는 0xbffffc1d값(argv[1] 주소)을 확인해보니

아래와 같이 저희가 입력한 값이 들어가있죠?

return address를 찾았습니다!



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

\x90 19개 + 쉘코드 25byte+ ret address (0xbffffc1d) = 총 48byte 딱 맞죠?


그래서 원래 문제에서 실행시키니!

바로 아래와 같이 비밀번호가 뜨네요!

고생하셨습니다!