일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 한국정보보호산업협회기자단
- arrow function
- 포너블
- 국가인적자원개발컨소시엄
- pwnable.tw
- 확장 유클리드 알고리즘
- 모듈러 연산
- 개인정보보호
- 개인정보안전성
- 디오판투스 알고리즘
- package.json
- 한국산업인력공단
- node.js
- Writeup
- 마감임박
- 동적타이핑
- 무료교육
- 백엔드입문
- 덧셈 암호
- 유클리드_알고리즘
- 개인정보보호위원회
- 호이스팅
- 개인정보보호교육
- Today
- Total
짱짱해커가 되고 싶은 나
[fd] writeup 본문
ssh : secure shell protocol. 컴퓨터와 컴퓨터가 public network를 통해 서로 통신을 할 때 보안적으로(공개키 시스템) 안전하게 통신을 하기 위해 사용하는 프로토콜.
ex) 데이터 전송, 원격 제어에 사용
fd파일에 s permission이 있는 것을 통해 fd가 setuid, setgid의 권한으로 실행됨을 확인할 수 있다.
fd를 실행하면 pass argv[1] a number가 출력되고 종료된다.
fd.c를 보면 argc가 2이상이어야 하는 것을 확인할 수 있다.
argc는 메인함수에 전달되는 인자의 수 이고
argv는 메인함수에 전달되는 값이다.
argv[0]은 항상 실행경로가 들어가기 때문에 argc는 기본적으로 1이다.
read(fd, buf, 32)는 fd라는 파일디스크립터로부터 buf의 주소에 32만큼 읽어온다는 뜻이다.
그리고 이 때 buf에 LETMEWIN\n이 들어있을 경우 flag를 얻을 수 있다.
즉, 우리는 buf에 LETMEWIN\n을 넣어야 하는데 이를 위해서는 파일디스크립터의 값을 표준입력으로 바꿀 필요가 있다.
표준입력은 0으로 우리는 fd의 값을 0으로 만들면 된다. fd는 argv[1]에서 0x1234를 뺀 값이므로
argv[1]에 0x1234인 4660을 넣으면 된다.
fd에 인자로 4660(0x1234) 전달. argv[1]의 값은 4660. atoi(argv[1]) - 0x1234 = 0 임으로 fd의 값은 0.
read(0, buf, 32)가 실행되기 때문에 LETMEWIN\n을 buf에 입력 가능하게 된 것이다.
+) PHP strcmp 취약점
PHP : 서버에서 실행되는 프로그래밍 언어
배열을 인자로 넣을 경우 반환 값은 0이 된다.
PHP 5.2에서는 1또는 -1을 반환,
PHP 5.3 이상 버전에서는 NULL을 반환하는데 그럴 경우 NULL == 0 꼴이 된다.
==으로 느슨한 비교를 했을 때는 이를 true, ===으로 엄격한 비교를 했을 때는 false를 반환한다.
따라서 PHP 5.3에서 배열을 인자로 strcmp를 사용할 경우에는 ===을 사용해서 우회를 막자~
'pwnable > pwnable.kr' 카테고리의 다른 글
[random] Writeup (0) | 2020.05.21 |
---|---|
[passcode] Writeup (0) | 2020.05.21 |
[flag] Writeup (0) | 2020.05.21 |
[bof] Writeup (0) | 2020.05.20 |
[Collision] Writeup (0) | 2020.05.20 |