2019. 3. 17. 23:39ㆍSystem Hacking/[LOB] Hacker School
안녕하세요!
오늘은 LOB 5번
orc 문제풀이를 해보겠습니다!
아래에 문제의 소스코드가 주어졌습니다!
직전 goblin 문제와 다른 점이
딱 하나 있죠?
맨 밑에 buffer를 0으로 초기화 해주는거요!
goblin에서 소스코드 해석 다 했지만
간단하게만 짚고 넘어가면!
1) 크기가 40인 버퍼, 정수 i 스택에 선언
2) argument 갯수 2개 이상으로 맞춰라!
3) 환경변수 못 쓴다!
4) argv의 48번째 값 \xbf이여야 한다!
5) 그리고 이 문제에서 추가된!
버퍼도 초기화 해주니 exploit 할 때 버퍼 쓰지마!
일단 tmp 폴더를 만들고
tmp 폴더에
wolfman 프로그램을 복사합니다!
왜냐?
wolfman은 저희가 로그인한
orc 소유가 아니기에
gdb로 실행을 못시켜요 ㅠㅠ
자 그리고 이제 gdb를 킵니다!
그리고 무엇을 할 꺼냐?
breakpoint를 걸어야죠!
어디에?
main 바로 시작하는 곳이요!
gdb의 맨 첫 부분이요!
왜 하필 거기?
왜냐면 저희가 버퍼를 이용못하니
다른 곳을 이용해야 겠죠?
그 공간은 바로 argv[1] 공간이에요!
저희가 argv에 값을 입력하면
이 또한 stack 어디에 load가 되는데
저희는 그 부분을 찾을 꺼에요!
다행히 argv 의 값을 초기화 하는 부분은
없더라구요!
그래서 아래와 같이 breakpoint를 제일 앞에 잡고
argv[1]에는 shellcode를 입력해 봤습니다!
자! breakpoint가 걸린 상태에서!
스택 상황을
확인해보죠!
맨 앞에
0x00000002와 0xbffffb44가 보이시나요?
0x00000002는 argc의 갯수를 의미하고
0xbffffb44는 argv들의 주소가 담겨있어요!
(여기의 경우 argv[0]과 argv[1]의 주소가 담겨있겠죠?)
이걸 어떻게 알았냐?
main 함수의 인자로 argc와 argv가 들어가잖아요!
앞에 있는 0x400309cb는 main 함수가 끝나고
향하는 return 주소일거에요!
이후에 명령어로
x/2x 0xbffffb44 이렇게 입력하면
(1) argv[0] 주소 (2) argv[1] 주소
이렇게 두 개가 뜨는데!
여기서 argv[1]의 주소를 gdb에 입력하면
argv[1]에 입력한 쉘코드가 나옵니다!
(여기에선 argv[1]의 주소가 0xbffffc54)
저희가 return해야 할 주소가 나왔으니!
payload를 작성하면 되겠죠?
쉘코드 25byte + nop 19byte = 44byte
그리고 45,46,47,48 byte 부분은
return address!
그래서
일단 tmp 폴더에
쉘코드 + nop + ret address 했는데
illegal instruction이 떳네요!
그래서 이번엔 바꿔서
nop+ 쉘코드 + ret address 해서
원래 문제에다가 하니
아래와 같이 쉘이 따지네요!
고생하셨습니다!
'System Hacking > [LOB] Hacker School' 카테고리의 다른 글
[어설픈] LOB 7번 darkelf 문제풀이 (0) | 2019.03.21 |
---|---|
[어설픈] LOB 6번 wolfman 문제풀이 (0) | 2019.03.19 |
[어설픈] LOB 4번 goblin 문제풀이 (0) | 2019.03.15 |
[어설픈] LOB 3번 cobolt 문제풀이 (0) | 2019.03.13 |
[어설픈] LOB 2번 gremlin 문제풀이 (0) | 2019.03.11 |