해킹/시스템
[bof 원정대] bugbear -> giant (RTL2, only execve)
kid1412
2012. 3. 23. 22:29
728x90
다음 문제의 소스를 봅시다.
[그림 1] giant.c
소스 분석
1. buffer의 크기는 44
2. /home/giant/assasin 파일에서 연계된(?) library에서 execve의 주소값을 얻어옵니다.
3. libc.so.6의 정보들에서 __execve의 주소값을 받아옵니다.
4. argv[1]의 45번째값부터 4byte를 ret에 복사합니다.
5. ret과 위에서 만든 execve 주소값과 같아야 합니다.
풀기위한 과정은 다음과 같습니다.
1. 소스 복사시 /home/giant/assassin -> /home/bugbear/giant로 변경
[그림 2] giant1.c
1. 지금 권한에서는 /home/giant/assassin에 접근이 안되기 때문에 변경합니다.
2. execve의 주소값 구하기
[그림 3] execve의 주소값
3. exit의 주소값
[그림 4] exit의 주소값
4. /bin/sh의 주소값 구하기
[그림 5] 앞에서 쓰던 /bin/sh 주소값 구하는 소스
[그림 6] argv[0]의 주소값
6. argv[0]에 있는 /bin/sh 주소값을 giant에 심볼릭 링크 걸기
[그림 7] argv[0]의 주소값을 심볼릭 링크 걸기
7. bof 공격
[그림 8] bof 공격
주소값이 약간의 변경이 필요합니다. (다른 곳의 블로그에서는 계산 한방에 되시던데 다시 해봐야 할듯합니다.)
소스 분석
1. buffer의 크기는 44
2. /home/giant/assasin 파일에서 연계된(?) library에서 execve의 주소값을 얻어옵니다.
3. libc.so.6의 정보들에서 __execve의 주소값을 받아옵니다.
4. argv[1]의 45번째값부터 4byte를 ret에 복사합니다.
5. ret과 위에서 만든 execve 주소값과 같아야 합니다.
풀기위한 과정은 다음과 같습니다.
0. bash2
1. 소스 복사시 /home/giant/assassin -> /home/bugbear/giant로 변경
2. execve의 주소값 구하기
3. exit의 주소값 구하기
4. /bin/sh의 주소값 구하기
5. argv[0]의 주소값 구하기
6. argv[0]에 있는 /bin/sh 주소값을 giant에 심볼릭 링크 걸기
7. bof 공격
1. 소스 복사시 /home/giant/assassin -> /home/bugbear/giant로 변경
1. 지금 권한에서는 /home/giant/assassin에 접근이 안되기 때문에 변경합니다.
2. execve의 주소값 구하기
3. exit의 주소값
4. /bin/sh의 주소값 구하기
6. argv[0]에 있는 /bin/sh 주소값을 giant에 심볼릭 링크 걸기
7. bof 공격
execve의 구조는 execve("/bin/sh",argv,null) 이런 형태로 넣어줄때는 다음과 같이 넣어야 합니다.
[buffer 40byte 쓰레기값] [sfp 4byte 쓰레기값] [execve의 주소값] [exit의 주소값] [/bin/sh의 주소값] [argv[0]에 들어간 /bin/sh의 주소] [null 값]
주소값이 약간의 변경이 필요합니다. (다른 곳의 블로그에서는 계산 한방에 되시던데 다시 해봐야 할듯합니다.)