목록분류 전체보기 (285)
tmxklab
1. 문제 확인 파일 확인 unlink@pwnable:~$ ls -l total 20 -r--r----- 1 root unlink_pwn 49 Nov 23 2016 flag -rw-r----- 1 root unlink_pwn 543 Nov 28 2016 intended_solution.txt -r-xr-sr-x 1 root unlink_pwn 7540 Nov 23 2016 unlink -rw-r--r-- 1 root root 749 Nov 23 2016 unlink.c intended_solution.txt파일도 하나 더 있는데 쉘을 따고 나서 보자 [ unlink.c ] #include #include #include typedef struct tagOBJ{ struct tagOBJ* fd; struc..
1. 문제 확인 asm@pwnable:~$ ls -l total 28 -rwxr-xr-x 1 root root 13704 Nov 29 2016 asm -rw-r--r-- 1 root root 1793 Nov 29 2016 asm.c -rw-r--r-- 1 root root 211 Nov 19 2016 readme -rw-r--r-- 1 root root 67 Nov 19 2016 this_is_pwnable.kr_flag_file_please_read_this_file.sorry_the_file_name_is_very_loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo0000000000000000000000000ooo..
1. 문제 확인 memcpy@pwnable:~$ ls memcpy.c readme memcpy@pwnable:~$ cat readme the compiled binary of "memcpy.c" source code (with real flag) will be executed under memcpy_pwn privilege if you connect to port 9022. execute the binary by connecting to daemon(nc 0 9022). 9022포트로 접속할 수 있는 듯하다. 10번의 size범위 안에 입력 값을 받고 실행되다가 멈춘다. [ memcpy.c ] // compiled with : gcc -o memcpy memcpy.c -m32 -lm #include #i..
1. 문제 확인 [ uaf.c ] #include #include #include #include #include using namespace std; class Human{ private: virtual void give_shell(){ system("/bin/sh"); } protected: int age; string name; public: virtual void introduce(){ cout
1. 문제 확인 참고로 패스워드는 이전 문제였던 cmd1의 flag값이다. [ cmd2.c ] #include #include int filter(char* cmd){ int r=0; r += strstr(cmd, "=")!=0; r += strstr(cmd, "PATH")!=0; r += strstr(cmd, "export")!=0; r += strstr(cmd, "/")!=0; r += strstr(cmd, "`")!=0; r += strstr(cmd, "flag")!=0; return r; } extern char** environ; void delete_env(){ char** p; for(p=environ; *p; p++)memset(*p, 0, strlen(*p)); } int main(int..
1. 문제 확인 [ cmd1.c ] #include #include int filter(char* cmd){ int r=0; r += strstr(cmd, "flag")!=0; r += strstr(cmd, "sh")!=0; r += strstr(cmd, "tmp")!=0; return r; } int main(int argc, char* argv[], char** envp){ putenv("PATH=/thankyouverymuch"); if(filter(argv[1])) return 0; system( argv[1] ); return 0; } 2. 접근 방법 걍 필터링 피해서 인자 값 세팅해주면 될 듯 하다. 3. 문제 풀이 cmd1@pwnable:~$ ./cmd1 "/bin/cat ./fla*" 4...
1. 문제 확인 [ lotto.c ] #include #include #include #include unsigned char submit[6]; void play(){ int i; printf("Submit your 6 lotto bytes : "); fflush(stdout); int r; r = read(0, submit, 6); printf("Lotto Start!\n"); //sleep(1); // generate lotto numbers int fd = open("/dev/urandom", O_RDONLY); if(fd==-1){ printf("error. tell admin\n"); exit(-1); } unsigned char lotto[6]; if(read(fd, lotto, 6) != ..
1. 문제 확인 Hey! check out this C implementation of blackjack game! I found it online * http://cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html I like to give my flags to millionares. how much money you got? Running at : nc pwnable.kr 9009 위와 같이 서버에 접속하면 blackjack관한 문제가 주어지고 위에 blackjack소스코드가 주어진다. 문제에서는 백만장자가 되면은 flag값을 준다고 한다. 블랙잭 게임이 뭔지 궁금해서 찾아보니 포커 카드를 통해서 카드에 써있는 합이 2..
1. 문제 확인 nc pwnable.kr 9007 게임 내용을 요약하면 다음과 같다. 위조 동전 1개와 진짜 동전 N-1개가 존재한다. 여기서 위조 동전을 찾아야 한다. 찾을 수 있는 방법은 서버에게 동전의 인덱스 번호를 주면 동전의 무게를 반환하는데 위조 동전의 무게는 9이고 진짜 동전은 10이다. 규칙은 다음 예시를 통해 확인하자 [Server] N=10 C=2 # 전체 동전 개수 N개, 기회 4번 [Client ] 0 1 2 3 4 5 # 동전 인덱스 번호(0, 1, 2, 3, 4, 5), 기회 1번 차감(1번 남음) [Server] 60 # 0 ~ 5 인덱스의 동전의 합한 무게, 다 진짜 동전이므로 60 [Client ] 6 7 8 # 동전 인덱스 번호(6, 7, 8), 기회 1번 차감(0번 남음..
1. 문제 확인 [ 파일 확인 ] shellshock@pwnable:~$ ls -l total 960 -r-xr-xr-x 1 root shellshock 959120 Oct 12 2014 bash -r--r----- 1 root shellshock_pwn 47 Oct 12 2014 flag -r-xr-sr-x 1 root shellshock_pwn 8547 Oct 12 2014 shellshock -r--r--r-- 1 root root 188 Oct 12 2014 shellshock.c 실행 가능한 파일로 bash와 shellshock이 있다. [ shellshock.c ] #include int main(){ setresuid(getegid(), getegid(), getegid()); setresg..