In this write up, some hints related to this challenge only will be mentioned.
여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.
Level13
About
There is a security check that prevents the program from continuing execution if the user invoking it does not match a specific user id.
관련 사항.
이 프로그램을 실행시키는 사용자의 UID가 지정된 값이 아니라면, 이후 내용이 진행되지 않도록 보호하는 보안 점검 장치가 있다.
To do this level, log in as the level13 account with the password level13. Files for this level can be found in /home/flag13.
level13(pw: level13) 계정을 이용한다. 관련 파일은 /home/flag03에 있다.
Source code. 소스코드.
About
There is a security check that prevents the program from continuing execution if the user invoking it does not match a specific user id.
관련 사항.
이 프로그램을 실행시키는 사용자의 UID가 지정된 값이 아니라면, 이후 내용이 진행되지 않도록 보호하는 보안 점검 장치가 있다.
To do this level, log in as the level13 account with the password level13. Files for this level can be found in /home/flag13.
level13(pw: level13) 계정을 이용한다. 관련 파일은 /home/flag03에 있다.
Source code. 소스코드.
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <string.h>
#define FAKEUID 1000
int main(int argc, char **argv, char **envp)
{
int c;
char token[256];
if(getuid() != FAKEUID) {
printf("Security failure detected. UID %d started us, we expect %d\n", getuid(), FAKEUID);
printf("The system administrators will be notified of this violation\n");
exit(EXIT_FAILURE);
}
// snip, sorry :)
printf("your token is %s\n", token);
}
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <string.h>
#define FAKEUID 1000
int main(int argc, char **argv, char **envp)
{
int c;
char token[256];
if(getuid() != FAKEUID) {
printf("Security failure detected. UID %d started us, we expect %d\n", getuid(), FAKEUID);
printf("The system administrators will be notified of this violation\n");
exit(EXIT_FAILURE);
}
// snip, sorry :)
printf("your token is %s\n", token);
}
There are two important features of the "LD_PRELOAD" environment variable.
"LD_PRELOAD" 환경 변수에는 중요한 특징이 2 가지가 있다.
The first is that programs with setUID set are not applied to this environment variable.
첫 번째는, setUID가 설정된 프로그램은 이 환경 변수에 적용받지 않는다는 점이다.
The second is that if there is a function with the same name as the existing library(duplicate), the function of the library registered in this environment variable is called.
두 번째는, 기존의 라이브러리에 있는 함수와 동일한 이름의 함수가 존재한다면(중복), 두 함수 중, 이 환경 변수에 등록된 라이브러리의 함수가 호출된다는 점이다.
level13@nebula:/tmp$ ./flag13
your token is b7057■■■■■■■■■■■■■■■■■■■ac58
level13@nebula:/tmp$ su flag13
Password:
sh-4.2$
sh-4.2$ getflag
You have successfully executed getflag on a target account
your token is b7057■■■■■■■■■■■■■■■■■■■ac58
level13@nebula:/tmp$ su flag13
Password:
sh-4.2$
sh-4.2$ getflag
You have successfully executed getflag on a target account