분류 전체보기
1월 말에 쓰는 일기.
자체평가 : ★★★☆☆ 리버싱 ≈ 크립토라는 조금은 짜증나는 상황에 있음에도 불구하고 리버싱 공부는 계속 진행하고 있다. 오히려 포너블 공부가 소홀해질 정도... (사실 포너블 문제가 안풀려서... ㅠㅠ) 리버싱은 결국 암호화를 위한 공식을 역으로 풀어내는 것이 주요 사항인데, 이 역으로 풀어내는 공식을 수립하는게 다소 어렵게 느껴진다. 하다보면 익숙해지겠지, 라고 생각하며 공부하고 있다. 그리고 크립토 공부도 조금씩 같이하고 있다. 리버싱 문제를 보면 대놓고 크립토 문제인 경우가 많아서 어쩔 수 없이 공부할 수 밖에 없는 상황이 만들어진다. 처음엔 그냥 웹 공부로 넘어갈까 생각했는데, 그래도 올해 목표를 위해 멱살 잡고 가고 있다 ㅋㅋ (n이 어떻고 p가 어떻고... 사실 1도 모르겠다... ㅠㅠ) 포..
command injection
서론 항상 어려운 command injection. 잘 정리해둔 site를 찾았기에 복사해둔다. PayloadsAllTheThings/Command Injection at master · swisskyrepo/PayloadsAllTheThings · GitHub GitHub - swisskyrepo/PayloadsAllTheThings: A list of useful payloads and bypass for Web Application Security and Pentest/CTF A list of useful payloads and bypass for Web Application Security and Pentest/CTF - GitHub - swisskyrepo/PayloadsAllTheThings:..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCDL9c%2FbtrW7TCIxXC%2FP60KxyDLcFONimUDVCYbSK%2Fimg.png)
cmd2
1. intro 2. code 및 분석 2.1. code #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 argc, char* argv[],..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnPCgf%2FbtrWXiqwnBB%2FArkMCS8PYYKWfykI1k5k50%2Fimg.png)
cmd1
1. intro 2. code 및 분석 2.1. code #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.2. 분석 putenv를 통해 PATH 환경변수를 임의 폴더로 변경한다. 이는 곧 일반적으로 실행했던 ls, cat 등의 명령어가 그대로..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcstmfK%2FbtrW4EF2nGS%2Fkzrho7FohAX9Am4LeBK1DK%2Fimg.png)
lotto
1. intro 2. code 및 분석 2.1. code #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, lo..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTFkOw%2FbtrWZWAoLQG%2FDyUX7Yf6fTd18P4zP7iq6K%2Fimg.png)
blackjack
1. intro 2. code 및 분석 2.1. code int betting() //Asks user amount to bet { printf("\n\nEnter Bet: $"); scanf("%d", &bet); if (bet > cash) //If player tries to bet more money than player has { printf("\nYou cannot bet more money than you have."); printf("\nEnter Bet: "); scanf("%d", &bet); return bet; } else return bet; } // End Function 2.2. 분석 코드가 길기에 주요 함수만 따왔다. 입력받은 값의 크기가 cash보다 크지만 않으면 되기에 음..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FowKhC%2FbtrWWtrZaDt%2Fj39heeySl5kVy5Iies0Y1K%2Fimg.png)
flag
1. intro 2. code 및 분석 2.1. code - unpacking 후 code이다. int __cdecl main(int argc, const char **argv, const char **envp) { char *dest; // [rsp+8h] [rbp-8h] puts("I will malloc() and strcpy the flag there. take it.", argv, envp); dest = (char *)malloc(100LL); strcpy(dest, flag[0]); return 0; } 2.2. 분석 파일을 분석하려 열었더니 뭔가 좀 이상하다. packing 여부를 확인하였더니 UPX로 packing되어있었다. unpack info에 나와있는 것처럼 파일을 다운받아 unpa..