ipwn
ssh 서버에 접속해보자. 이렇게 파일들이 나열된 것을 확인할 수 있다. fd는 fd_pwn의 권한으로 setuid가 걸려있고, flag 파일의 권한은 fd_pwn이다. 아마 fd파일을 실행하면 flag를 읽어와주거나 쉘을 가져올 수 있는 것 같다. 이제 fd.c를 열어보자. 코드는 이렇게 작성되어있다. 가장 중요한 flag를 읽는 부분을 보니 buf와 "LETMEWIN\n"을 비교, 같은 문자열일 경우에 flag를 출력해준다. 그 이전에는 fd의 값에 argv[1]을 받아와 atoi함수를 실행한 값에서 0x1234를 빼준 값이 들어간다. 그리고 밑 부분에는 read함수가 실행되는데 read함수의 원형은 size_t read(int fd, void *buf, size_t count); 위의 형태인데, f..
1. 포인터란? 포인터는 메모리의 주소 값을 저장하기 위한 변수를 의미합니다. 그러므로 (주소값 != 포인터) 포인터의 크기는 컴퓨터의 주소 체계에 따라 크기가 결정되는데요 , 32비트 기반 시스템에서는 4 바이트 크기 입니다. (64바이트 기반 시스템에서는 8바이트) 포인터 선언시에 사용되는 연산자는 * 인데, 자료형을 A로 하고 포인터를 선언한다고 하면 A *변수이름이 되는데 예를 들어 int *a; 라고 한다면 int형 a라는 이름의 포인터가 되는 것입니다. 즉 자료형A *b는 A타입의 b라는 포인터 변수가 생성되는 것입니다. 주소 관련 연산자(포인터)로는 &연산자와 *연산자가 있는데 & 연산자는 변수의 주소 값을 반환하는 연산자이고 * 연산자는 포인터가 가르키는 메모리를 참조하는 , 즉 직접적으로..
codeup1602.절대값 구하기 123456789101112131415#includedouble absolutevalue(double n1) { if (n1 line) { return 0; } else { starh(star); printf("\n"); return output(star + 1, line); }}int main() { int input, star = 1; scanf("%d", &input); output(star, input); return 0;}Colored by Color Scriptercs 이 코드는 반복문의 이해를 위한 공부를 할 때 배웠던 별찍기를 재귀함수로 구현해 낸 코드입니다. 이 코드의 동작 방식은 맨 처음 별을 몇개 찍을지 starh함수로 정하는데, n에 대입 된 값 ..