일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- WarGame
- 생활코딩
- HTML
- c++
- BOJ
- 풀이
- Javascript
- SWEA
- PHP 웹페이지 만들기
- Sookmyung Information Security Study
- 숙명여자대학교 정보보안 동아리
- Python
- hackerrank
- lob
- c
- 머신러닝
- 드림핵
- CSS
- 파이썬
- The Loard of BOF
- 웹페이지 만들기
- 백준
- hackctf
- 숙명여자대학교 정보보안동아리
- C언어
- 자료구조 복습
- XSS Game
- BOJ Python
- 기계학습
- siss
- Today
- Total
혜랑's STORY
[LOB RedHat] Lv 4. goblin -> orc 본문
문제를 풀기 위해 xshell로 로그인 해 주었다.
ID : goblin / PW : hackers proof |
역시 가장 먼저 존재하는 파일들을 알아보기 위해 ls -l 명령어를 실행하였다.
orc.c 파일의 내용을 확인해 보자.
앞의 문제에선 보지 못하였던 "egghunter"라는 주석과 함께 "memset()" 이라는 함수가 새롭게 등장한 것을 알 수 있다. 여기서 egghunter는 전역 선언된 environ을 memset()을 사용하여 초기화 한다. 즉, 환경 변수에 SHELLCODE를 넣고 취약한 함수의 return address를 환경 변수의 주소로 바꾸어도, egghunter에 의해 환경 변수가 초기화되기 때문에 환경 변수를 이용할 수 없게 된다.
또한 if문을 통해 argv[1][47]가 "\xbf"가 아니면 종료한다고 한다. 일단 gdb를 사용하여 스택의 구조를 살펴보자.
gdb를 통해 살펴본 스택 상황은 아래와 같다고 생각해 볼 수 있다.
buffer | SFP | RET(return) |
40 | 4 | 4 |
따라서 RET의 마지막 주소값엔 "\xbf"가 있으면 된다.
버퍼의 시작 주소를 알아내기 위해 strcpy 함수의 인자로 buffer가 전달되는 부분에 bp를 걸고 실행해서 분석을 진행하였다. (권한 문제로 복사한 바이너리로 진행)
역시 48byte 자리의 값이 "\xbf"가 아니면 실행되지 않는 것을 볼 수 있었고, 실행 결과는 다음과 같다. 메모리가 앞서 넣어준 "A"로 도배된 것을 확인할 수 있었고, 그 끝에 "B"가 쓰여있었다. 즉, "A"가 시작하는 영역인 "0xbffffab0"가 버퍼의 시작주소인 것을 알 수 있었다.
이제 다음과 같이 공격 코드를 구성할 수 있다.
./cporc `python -c 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" + "\x90"*20 + "\xb0\xfa\xff\xbf" '` |
Segment fault가 발생하고, 코어덤프가 되었다.
보기쉽게 A로 버퍼를 채운 뒤 core 파일을 살펴보자.
gdb가 실행되며 EIP가 0xbffffabc로 점프해 segment fault가 발생했다는 것을 알 수 있었다. 메모리가 앞서 넣어준 "A"로 도배되어 있었고, 그 끝에 역시 "B"가 있었다. 다시 주소를 고르고, 공격 코드를 구성해 보았다.
./cporc `python -c 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" + "\x90"*20 + "\xc0\xfa\xff\xbf" '` |
정상적으로 쉘이 실행된다. 원본 파일에 공격을 시도해 보자.
성공이다.
'2021 SISS 21기 활동 > 겨울방학 System' 카테고리의 다른 글
[Lazenca] Protection Tech : NX bit (0) | 2021.02.07 |
---|---|
[LOB RedHat] Lv 5. orc -> wolfman (0) | 2021.02.07 |
[LOB RedHat] Lv 3. cobolt-> goblin (0) | 2021.01.30 |
[LOB RedHat] Lv 2. gremlin -> cobolt (0) | 2021.01.30 |
[LOB RedHat] Lv 1. gate -> gremlin (0) | 2021.01.20 |