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
- node.js
- python3
- bytecode
- 자바
- 파이썬3
- 개발
- Python
- 웹
- 데이터베이스
- 웹 개발
- django
- HTTP
- 자료구조
- JPA
- Spring Boot
- mysql
- rabbitmq
- db
- java
- 스프링 부트
- 디자인 패턴
- BCI
- 스프링
- 보안
- 파이썬
- 스프링부트
- Spring
- ORM
- 장고
- 안드로이드
Archives
- Today
- Total
semtax의 개발 일지
pwnable.kr fd 풀이 본문
반응형
소개
이번 시간에는 pwnable.kr 에 있는 fd 라는 문제를 풀어보도록 하겠습니다.
풀이
먼저, 아래 주소에 ssh를 이용해서 접속해줍니다.
ssh fd@pwnable.kr -p2222
접속해서 파일들을 살펴보면 아래 파일들이 있는것을 볼 수 있습니다.
fd fd.c flag
먼저 문제 코드를 읽어 보도록 하겠습니다.
문제 코드는 아래와 같습니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buf[32];
int main(int argc, char* argv[], char* envp[]){
if(argc<2){
printf("pass argv[1] a number\n");
return 0;
}
int fd = atoi( argv[1] ) - 0x1234;
int len = 0;
len = read(fd, buf, 32);
if(!strcmp("LETMEWIN\n", buf)){
printf("good job :)\n");
system("/bin/cat flag");
exit(0);
}
printf("learn about Linux file IO\n");
return 0;
}
우리의 목표는, 저 system 함수를 실행시키는 겁니다.
과연 어떻게 하면 될까요?
자, 시스템 프로그래밍 시간때 배운 내용을 떠올려 봅시다.
리눅스에서는 기본적으로 아래 3개의 파일 디스크립터를 열어 놓습니다.
파일 디스크립터 번호 | 분류 |
0 | 표준 입력 |
1 | 표준 출력 |
2 | 표준 에러 |
이 사실들을 종합해보면 저 fd를 0으로 맞춰 주고, "strcmp"을 이용해서 비교하는 값을 넣어주면 문제가 풀리게 되는겁니다.
그리고, read 함수는 지정된 파일 디스크립터에서 내용을 읽어 들일수 있습니다.
아래와 같이 실행해줍시다
./fd 4660
LETMEWIN
이렇게 하면 정답을 얻을 수 있습니다.
반응형
'보안 > 시스템 해킹' 카테고리의 다른 글
운영체제론 : 가상메모리 내용 간략 정리 (0) | 2020.04.23 |
---|---|
ARM 메모리 관리기법 분석 (1) | 2020.04.23 |
인텔 메모리 관리 기법 분석 (0) | 2020.04.23 |
Comments