2019. 3. 24. 17:54ㆍSystem 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로 바꾸니!
문제가 풀립니다!
고생하셨습니다!
'System Hacking > [LOB] Hacker School' 카테고리의 다른 글
[어설픈] LOB 10번 vampire 문제풀이 (0) | 2019.03.28 |
---|---|
[어설픈] LOB 9번 troll 문제풀이 (0) | 2019.03.26 |
[어설픈] LOB 7번 darkelf 문제풀이 (0) | 2019.03.21 |
[어설픈] LOB 6번 wolfman 문제풀이 (0) | 2019.03.19 |
[어설픈] LOB 5번 orc 문제풀이 (0) | 2019.03.17 |