일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 무료교육
- 개인정보보호
- 포너블
- 한국정보보호산업협회기자단
- 모듈러 연산
- 개인정보보호위원회
- 확장 유클리드 알고리즘
- 백엔드입문
- function scope
- package-lock.json
- 곱셈 암호
- pwnable.tw
- Writeup
- 개인정보안전성
- package.json
- 웹 프레임워크
- 백엔드
- 덧셈 암호
- 동적타이핑
- 개인정보보호교육
- 디오판투스 알고리즘
- 가명정보처리
- node.js
- arrow function
- 마감임박
- 유클리드_알고리즘
- 호이스팅
- 한국정보보호산업협회
- 한국산업인력공단
- 국가인적자원개발컨소시엄
- Today
- Total
짱짱해커가 되고 싶은 나
[bof] Writeup 본문
이번 문제는 앞선 문제와 달리 nc로 접근한다.
ssh : 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일 복사
nc : netcat은 TCP/UDP 프로토콜을 사용하는 네트워크 연결에서 데이터를 읽고 쓰는 간단한 유틸리티 프로그램.
cat이 파일에 쓰거나 읽듯이 nc는 network connection에 읽거나 쓴다.
즉, ssh는 직접 그 원격 시스템에 로그인해서 시스템 안에 들어가서 명령어를 실행 할 수 있는 것이고
nc는 cat을 이용해서 network connection에 읽거나 쓰는 것이다.
그리고 문제 코드의 주소가 있는데 wget 명령어를 통해 다운받을 수 있다.
main함수는 func(0xdeadbeef)를 한다.
func()함수를 보면 overflowme[32] 배열에 gets() 로 문자를 입력받는다.
그리고 인자인 key (앞의 0xdeadbeef) 의 값과 0xcafebabe가 같다면 /bin/sh 를 할 수 있다.
gets()는 입력 받는 글자 수의 제한이 없기 때문에 overflowme 32를 넘겨서 buffer over flow로 key의 위치를 0xcafebabe로 덮어 씌우며 된다.
key와 overflowme[]의 위치를 찾기 위해 gdb를 이용했다.
func+12를 보면 ebp-0xc가 overflowme[]의 위치임을 확인할 수 있고
func+40을 보면 ebp+0x8이 key의 위치임을 확인할 수 있다.
overfloweme[]와 key의 차이는 20 만큼 있고 overflowme[]의 크기가 32이므로
"A"*32 + "\xbe\xba\fe\xca"를 하면 된다.
+ 앞서 말했듯이 nc는 cat을 이용해서 네트워크에 입력할 수 있기 때문에 gets()로 넣어줄 값과 ;를 이용해 cat 명령어를 함께 사용한다. 또 pipe를 이용해 그 결과를 nc pwnable.kr 9000에 넣을 수 있다.
+ 여기서 든 의문점은 bof 파일을 실행하지 않았는데 알아서 bof의 gets()에 들어갔다는 점이다.
이를 이해하기 위해 데몬에 대해 설명하겠다.
데몬 : 사용자의 요청을 기다리고 있다가 요청이 발생하면 이에 적절히 대응하는 리스너와 같은 역할 수행.
즉, 메모리에 상주하면서 특정 요청이 오면 즉시 대응 할 수 있도록 대기중인 프로세스
시스템소프트웨어보안이론 및 실습 수업에서 init이 init을 fork하고 getty가 사용자의 입력을 기다리다가 입력을 받으면 login shell을 수행한다고 배웠다. 이 pwnable.kr에서는 입력을 기다리다가 bof를 수행하는 셈인 것이다.
'pwnable > pwnable.kr' 카테고리의 다른 글
[random] Writeup (0) | 2020.05.21 |
---|---|
[passcode] Writeup (0) | 2020.05.21 |
[flag] Writeup (0) | 2020.05.21 |
[Collision] Writeup (0) | 2020.05.20 |
[fd] writeup (0) | 2020.01.01 |