Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Javascript
- 딥러닝
- php
- 리눅스
- ChatGPT
- BOF 원정대
- BOF
- backend
- 웹해킹
- Scala
- webhacking
- c++
- flask
- Web
- 파이썬
- 챗GPT
- 러닝 스칼라
- Shellcode
- 경제
- hackthissite
- 인공지능
- c
- mysql
- hacking
- deep learning
- 러닝스칼라
- Python
- 백엔드
- hackerschool
- Linux
Archives
- Today
- Total
jam 블로그
[bof 원정대] bugbear -> giant (RTL2, only execve) 본문
728x90
다음 문제의 소스를 봅시다.
풀기위한 과정은 다음과 같습니다.
1. 소스 복사시 /home/giant/assassin -> /home/bugbear/giant로 변경
2. execve의 주소값 구하기
3. exit의 주소값
4. /bin/sh의 주소값 구하기
6. argv[0]에 있는 /bin/sh 주소값을 giant에 심볼릭 링크 걸기
7. bof 공격
주소값이 약간의 변경이 필요합니다. (다른 곳의 블로그에서는 계산 한방에 되시던데 다시 해봐야 할듯합니다.)
[그림 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. 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로 변경
[그림 2] giant1.c
1. 지금 권한에서는 /home/giant/assassin에 접근이 안되기 때문에 변경합니다.
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 공격
execve의 구조는 execve("/bin/sh",argv,null) 이런 형태로 넣어줄때는 다음과 같이 넣어야 합니다.
[buffer 40byte 쓰레기값] [sfp 4byte 쓰레기값] [execve의 주소값] [exit의 주소값] [/bin/sh의 주소값] [argv[0]에 들어간 /bin/sh의 주소] [null 값]
주소값이 약간의 변경이 필요합니다. (다른 곳의 블로그에서는 계산 한방에 되시던데 다시 해봐야 할듯합니다.)
'해킹 > 시스템' 카테고리의 다른 글
[bof 원정대] assassin -> zombie_assassin (FEBP;fake ebp) (0) | 2012.03.27 |
---|---|
[bof 원정대] giant -> assasin (no stack, no RTL) (0) | 2012.03.26 |
[bof 원정대] darkknight -> bugbear (RTL1) (0) | 2012.03.22 |
[bof 원정대] golem -> darkknight (sfp or fpo) (0) | 2012.03.22 |
[bof 원정대] skeleton -> golem (stack destroyer) (0) | 2012.03.22 |
Comments