전체 글
[Wargame.kr] login_filtering 풀이 (136p)
풀이 I have accounts. but, it's blocked. can you login bypass filtering? ... 그냥 대소문자를 구분 안하니까 그 점을 이용하면 문제를 해결할 수 있다.
[Pwnable.kr] unlink 풀이 (10pt)
unlink.c #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..
[Pwnable.kr] horcruxes 풀이 (7pt)
풀이 토들러 난이도 클리어까지.. 단 1문제! 이번 문제는 소스코드가 제공되지 않는다. 그래서 그냥 gdb로 계속 까보면서 풀었는데.. 풀고 다른 분들 Write-Up 보니까 전부 파일을 받아오더라.. 나도 이젠 그렇게 해야겠다. 먼저 main 함수쪽 어셈을 봐보자. 0x0809ff62 : call 0x809fc90 0x0809ff67 : add $0x10,%esp 0x0809ff6a : call 0x80a0324 0x0809ff6f : call 0x80a0177 처음에 디버깅하다가 엄청 짜증 났던 것이, alarm 함수 때문에 일정 시간이 지나면 프로세스가 종료된다. hint 함수를 출력하고 init_ABCDEFG 함수를 출력하는데 먼저 hint 함수가 뭔지 봐보자. 0x080a0324 : push e..
[Pwnable.kr] memcpy 풀이 (10pt)
풀이 다음은 memcpy.c의 코드이다. // 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)..
[Pwnable.kr] asm 풀이 (6pt)
풀이 다음은 asm.c의 코드이다. #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(..
[Pwnable.kr] uaf 풀이 (8pt)
풀이 Use After Free 취약점을 아는지 물어보는 문제이다. (나는 뭔지 몰라서 찾아봤다.) 다음은 uaf.cpp의 코드이다. #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
[Pwnable.kr] blukat 풀이 (3pt)
풀이 다음은 blukat.c의 코드이다. #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
[Pwnable.kr] cmd2 풀이 (9pt)
풀이 다음은 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 argc, char* argv[], char** env..