2019. 3. 11. 21:51ㆍSystem Hacking/[LOB] Hacker School
안녕하세요!
오늘은 LOB의 두 번째 문제!
gremlin을 풀어보도록 하겠습니다!
우선 코드를 보니 아래와 같네요!
버퍼의 크기가 gate에 비해서
현저하게 줄었네요!
16 byte 밖에 안되네요 ㅠㅠ
그리고 argument가 2개보다 작으면
argv error라고 뜨네요!
그리고 argv[1]의 값을
buffer에 복사하네요!
(여기서 취약점이 발생하죠! 얼만큼 copy할지 크기 지정이 없으니....ㅎㅎ)
그리고 printf함수가 buffer에 저장된 값을 출력하네요!
gate에서도 보셨듯이,
red hat linux 6.2에서는
스택 사이에 dummy값이 존재하지 않습니다!
[gremlin의 스택구조]
buffer (16byte)
EBP(4byte)
RET_ADDR(4byte)
.....(이후 스택)
근데 저희가 gate에서 풀었던 것처럼
buffer랑 ebp를 합쳐도 20byte 밖에 안됩니다 ㅠㅠ
shellcode를 저기에 올리는 것
무리인 것 같고...
그러면 ret_addr 이후 스택에 넣으면 되겠네요!
저기는 뭐 무주공산이니
저기에 shell code 마음껏 쓰고
RET_ADDR에 shell code 시작주소 넣으면!
끝나겠네요!
그래서 마음껏 쓸 수 있는
RET_ADDR 뒤에 주소를 알기 위해
20개의 \x90 값과
ret_addr 0xbffffab0 값으로
(0xbffffab0이 결국 저희가 찾아야 할 값인데.. 문제다풀고 풀이하는거라...)
채우고 gdb로 어디가 시작점인지
확인해 봤습니다!
breakpoint는 main+74에 걸었습니다!
main함수가 return 하기 직전에
ret_addr가 존재할 것이고
그 ret_addr 뒤로 저희가 shellcode를
입력했기 때문이죠!
그랬더니 아래와 같이 저희 shellcode가 저기 있네요!
x/x $esp+4를 해서 보니
바로 깔끔하게
shellcode 앞에 4byte가 나오네요!
(25 byte 쉘코드 사용했습니다)
그래서
아래와 같이 payload를 작성했습니다!
a*24 (ret_addr 전까지)+0xbffffab0 (ret addr=쉘코드 처음 시작주소)+쉘코드 (25byte)
근데 segmentation fault가 뜨고
shell이 따지질 않았습니다!
물론 아래와 같이 core 파일 까본다음
실제로 프로그램 상에선
어디에 우리의 shellcode가 위치해있는지
주소 위치 찾으면 되지만!
(gdb -c core로 오픈가능)
그래도 이 방법으로 무식하게 계속 시도했습니다!
그러다가 4,5번 정도 try 했는데
안돼서 그냥 RTL로 풀어버렸습니다...
RTL하려면 제가 FTZ 풀이할 때
적어놨는데 스택을 아래와 같이 바꿔야 합니다
[gremlin의 스택구조]
buffer (16byte)
EBP(4byte)
RET_ADDR(4byte)
aaaa(4byte)
/bin/sh주소(4byte)
RET_ADDR에는 system함수 주소가 들어가고!
aaaa는 system 함수의 return 주소인데
어차피 저희가 먼저 쉘을 따기때문에 system 함수의 ret_addr은
상관이 없죠?
( system 함수 호출 -> 쉘이 따짐 -> 다 종료되면 system함수 ret_addr 호출)
그래서 제가 FTZ에서 풀이 했던 것과 마찬가지로
아래와 같이 진행했습니다!
ldd로 어떤 라이브러리 사용하나 봤더니
/lib/libc.so.6을 사용하네요!
그래서 nm으로 아래와 같이 system 함수를 찾았습니다!
strings -tx 명령어로 /bin/sh 명령어 주소값도 찾았습니다!
그리고 바로 아래와 같이 payload를 짰습니다!
ret addr 전까지 a로 20개 + system함수 주소로 return하는 주소 + aaaa+ /bin/sh 주소
그랬더니 아래와 같이 shell이 따지고
비밀번호가 나오네요!
고생하셨습니다!
'System Hacking > [LOB] Hacker School' 카테고리의 다른 글
[어설픈] LOB 6번 wolfman 문제풀이 (0) | 2019.03.19 |
---|---|
[어설픈] LOB 5번 orc 문제풀이 (0) | 2019.03.17 |
[어설픈] LOB 4번 goblin 문제풀이 (0) | 2019.03.15 |
[어설픈] LOB 3번 cobolt 문제풀이 (0) | 2019.03.13 |
[어설픈] LOB 1번 gate 문제풀이 (0) | 2019.03.04 |