목록Wargame/pwnable.kr (21)
cgy12306
[horcruxes] readme 파일을 읽어보자. 9032 포트에 붙어서 실행하라고 한다. 7개의 호크룩스를 찾아서 파괴하라고 한다. 메뉴를 선택하고 얼마나 많은 경험치를 얻었냐고 한다. 아무런 힌트가 없어서 직접 gdb로 분석하다가 이번 cykor 세미나 때 이 문제는 scp 명령어로 바이너리 다운받아서 풀어야 한다고 한다. scp -P 포트번호 ID@주소:바이너리경로 로컬경로 이런식으로 입력해주면 다운로드가 된다. 아이다로 열어보자. 메인 함수의 부분이다. init_ABCDEFG() 함수로 들어가보자. 랜덤한 값을 읽어와서 특정한 연산을 한 후 a, b, c, d, e, f, g에 저장을 한다. 그리고 다 더한 값을 sum에 저장한다. 빠져나와서 ropme 함수 부분을 보자. int ropme() ..
[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
[memcpy] // compiled with : gcc -o memcpy memcpy.c -m32 -lm #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" "m..
[blukat] #include #include #include #include char flag[100]; char password[100]; char* key = "3\rG[S/%\x1c\x1d#0?\rIS\x0f\x1c\x1d\x18;,4\x1b\x00\x1bp;5\x0b\x1b\x08\x45+"; void calc_flag(char* s){ int i; for(i=0; i
[unlink] #include #include #include typedef struct tagOBJ{ struct tagOBJ* fd; struct tagOBJ* bk; char buf[8]; }OBJ; void shell(){ system("/bin/sh"); } void unlink(OBJ* P){ OBJ* BK; OBJ* FD; BK=P->bk; FD=P->fd; FD->bk=BK; BK->fd=FD; } int main(int argc, char* argv[]){ malloc(1024); OBJ* A = (OBJ*)malloc(sizeof(OBJ)); OBJ* B = (OBJ*)malloc(sizeof(OBJ)); OBJ* C = (OBJ*)malloc(sizeof(OBJ)); // doubl..
[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(ctx, SCMP_ACT_ALLOW, SCMP_SYS(write), 0); se..
[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 argc, char* argv[], char** envp){ delete_env..
[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; } putenv로 PATH 환경변수값을 thankyouverymuch로 변경한다. PATH 환경변수는 명령어를 사용할 때 이곳을 참조한다. filter함수를 호출하게되는데 argv[1]을 ..