일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬신경망
- BOJ
- 머신러닝
- 소프트맥스함수
- 딥러닝
- 신경망구현
- 스트림암호
- C알고리즘
- 보안
- C언어 알고리즘
- FTZlevel10
- 정보보안
- 백준
- 신경망 학습
- 파이썬
- 밑바닥부터시작하는딥러닝
- 버퍼오버플로우
- 8086CPU레지스터
- 달고나bof
- 알고리즘
- C언어알고리즘
- 인공지능
- BOF
- 신경망파이썬
- 딥러닝파이썬
- 항등함수
- 활성화함수파이썬
- 신경망
- c언어
- 백준알고리즘
- Today
- Total
HeeJ's
fd :: pwnable.kr 본문
fd 문제에 접속했다.
실습 환경 : KaliLinux 2021.3
dir 명령어를 통해 현재 있는 디렉터리를 확인했다.
flag라는 파일을 발견해 cat을 통해 flag를 확인하려 했다.
하지만 권한이 없어 거부되었다.
fd.c를 읽어보니, flag를 직접 실행시키는 것이 아닌 조건을 맞추어 system으로 실행시키는 문제인 것 같다.
*atoi()
* atoi()
a to i 로 읽을 수 있다.
즉, char to int. 문자열을 정수타입으로 바꿔주는 함수이다.
우선 함수를 실행시킬 때 값을 입력해주어야 한다.
이 입력 값을 정수타입으로 바꿔준 후, 0x1234를 빼준다.
그리고 그 값(fd)이 read 함수의 인자로 들어가게 된다.
그 후, 입력한 문자열이 'LETMEWIN'과 동일하다면, flag를 보여주는 것 같다.
* read()
*read()
#include<unistd.h>
ssize_t read(int fd, void *buf, size_t len);
[입력 인자]
int fd - open() 시스템 콜로 열린 파일을 가리키는 파일 지정 번호
void* buf - 파일에서 읽은 데이터를 저장할 메모리 공간
len - 읽을 데이터의 크기(byte 단위)
[반환 값]
ssize_t
- 파일 읽기 성공 : 0보다 큰 수
- 읽을 데이터가 없을 시 : 0 (EOF)
fd가 0이라면 read()를 실행하지 않고 그냥 넘어갈 것같다.
fd가 0이려면, 0x1234가 되어야한다.
0x1234는 10진수로 4660이다.
fd를 실행시킨 후, 처음 인자로 4660, 두 번째 인자로 LETMEWIN을 넣으면
flag를 얻을 수 있을 것이다.
flag를 얻고 문제를 해결할 수 있었다.
'<CTF> > <pwnable.kr>' 카테고리의 다른 글
collision :: pwnable.kr (0) | 2021.09.22 |
---|