Yozzang의 해킹일기 💻
article thumbnail
Pwnable (18. asm)
Wargame/Pwnable 2022. 9. 13. 00:57

이번 포스트에서는 Pwnable의 asm 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include #include #include #include #include #include #include #include #define LENGTH 128 void sandbox(){ scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_KILL); if (ctx == NULL) { printf("seccomp error\n"); exit(0); } seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open), 0); seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(read), 0); seccomp_rule_add..

article thumbnail
Pwnable (17. memcpy)
Wargame/Pwnable 2022. 7. 21. 00:31

이번 포스트에서는 Pwnable의 memcpy 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include #include #include #include #include #include #include unsigned long long rdtsc(){ asm("rdtsc"); } char* slow_memcpy(char* dest, const char* src, size_t len){ int i; for (i=0; i= 64){ i = len / 64; len &= (64-1); while(i-- > 0){ __asm__ __volatile__ ( "movdqa (%0), %%xmm0\n" "movdqa 16(%0), %%xmm1\n" "movdqa 32(%0), %%xmm2\n" "movdqa ..

article thumbnail
Pwnable (16. uaf)
Wargame/Pwnable 2022. 7. 20. 00:38

이번 포스트에서는 Pwnable의 uaf 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #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

article thumbnail
Pwnable (15. cmd2)
Wargame/Pwnable 2022. 7. 13. 00:19

이번 포스트에서는 Pwnable의 cmd2 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #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..

article thumbnail
Pwnable (14. cmd1)
Wargame/Pwnable 2022. 7. 12. 00:39

이번 포스트에서는 Pwnable의 cmd1 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #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; } ## 문제 해석 : 문제 코드를 살펴 보니, "flag", "sh", "tmp"를 필터링하는 filter..

article thumbnail
Pwnable (13. lotto)
Wargame/Pwnable 2022. 7. 11. 00:13

이번 포스트에서는 Pwnable의 lotto 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #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 lot..

article thumbnail
Pwnable (12. blackjack)
Wargame/Pwnable 2022. 7. 10. 00:09

이번 포스트에서는 Pwnable의 blackjack 문제에 대해 다루겠다. ## 문제 해석 : 해당 문제는 블랙잭 게임 문제이다. 총 100만 달러를 획득하면 flag를 획득할 수 있는 것으로 보인다. 또한 문제에서 제공된 링크를 통해 해당 프로그램의 소스 코드를 확인할 수 있었고, 그 코드 중의 취약점을 통해 문제를 해결할 수 있다. 링크 : http://cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html ## 문제 풀이 : 문제 코드 중 일부는 다음과 같다. int betting() //Asks user amount to bet { printf("\n\nEnter Bet: $"); scanf("%d", &bet); if..

article thumbnail
Pwnable (11. coin1)
Wargame/Pwnable 2022. 7. 9. 00:44

이번 포스트에서는 Pwnable의 coin1 문제에 대해 다루겠다. 문제는 다음과 같다. ## 문제 해석 : 가짜 코인을 찾는 문제이다. N는 동전의 갯수이며 C는 시도 가능 횟수이다. 총 100개의 가짜 코인을 찾으면 flag를 획득할 수 있는 것으로 보인다. 해당 문제는 이진탐색 알고리즘을 통해 쉽게 해결할 수 있다. ## 문제 풀이 : 우선 임의의 정수를 넣어서 시도해보겠다. 임의의 정수 "50"을 넣었을 때 "50"의 무게값이 출력된 것을 확인할 수 있다. 이어서 "1", "2", "3", "4"를 넣었을 때 네 가지 수의 무게값의 합이 출력된 것을 확인할 수 있다. 이어서 이진탐색을 활용하여 공격코드를 작성해보겠다. ## 최종 결과 : ### 공격 코드 : from pwn import * POR..

article thumbnail
Pwnable (10. shellshock)
Wargame/Pwnable 2022. 7. 8. 00:12

이번 포스트에서는 Pwnable의 shellshock 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include int main(){ setresuid(getegid(), getegid(), getegid()); setresgid(getegid(), getegid(), getegid()); system("/home/shellshock/bash -c 'echo shock_me'"); return 0; } ## 문제 해석 : setresuid()와 setresgid()를 통해 user, group ID를 설정하고 bash를 실행하여 "shock_me"가 출력된 것을 알 수 있다. 여기서 해당 문제 이름을 보면 shellshock라고 되어있는데 이는 곧 CVE-2014-6271(Bash Shellsho..

article thumbnail
Pwnable (9. mistake)
Wargame/Pwnable 2022. 7. 7. 00:16

이번 포스트에서는 Pwnable의 mistake 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include #include #define PW_LEN 10 #define XORKEY 1 void xor(char* s, int len){ int i; for(i=0; i 0)){ printf("read error\n"); close(fd); return 0; } char pw_buf2[PW_LEN+1]; printf("input password : "); scanf("%10s", pw_buf2); // xor your input xor(pw_buf2, 10); if(!strncmp(pw_buf, pw_buf2, PW_LEN)){ printf("Password OK\n"); system("/bin/ca..