본문 바로가기

wri te-ups/pwnable.kr

(13)
pwnable.kr uaf use after free 취약점을 이용한 공격을 하면 된다. 내가 생각한 익스플로잇 과정은 이렇다. 1. use - free - after - use 순으로 실행시킨다. 2. after 할 때 힙에 할당되는데 이 때 name과 age를 덮고 introduce() 함수 포인터에 give_shell() 함수 포인터로 덮는다. 3. 쉘 개이득 잔치 오늘은 이 정도만 하고 잔다.
[pwnable.kr] passcode write up 포너블에 대한 감을 키우기 위해서 다시 포너블.kr 문제들을 풀어보고 있다. 예전에 풀 때와 느낌이 확실히 달라서 기록하려고 글을 쓴다. passcode #include #include void login(){ int passcode1; int passcode2; printf("enter passcode1 : "); scanf("%d", passcode1); fflush(stdin); // ha! mommy told me that 32bit is vulnerable to bruteforcing :) printf("enter passcode2 : "); scanf("%d", passcode2); printf("checking...\n"); if(passcode1==338150 && passcode2==13..
pwnable.kr coin1 write up pwnable.kr coin1 write upH3X0R팀 소속 BoB 6기 ch4n3 후욱,,, 후욱,,,, 코딩으로 포너블 문제를 처음으로 풀었다는 사실에 감격했다. Mommy, I wanna play a game!(if your network response time is too slow, try nc 0 9007 inside pwnable.kr server) Running at : nc pwnable.kr 9007 ---------------------------------------------------- Shall we play a game? ----------------------------------------------------You have given some gold coins in ..
pwnable.kr cmd2 write up pwnable.kr cmd2 write up H3X0R팀 소속 BoB 6기 ch4n3 #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 arg..
pwnable.kr blackjack write up pwnable.kr blackjack write upH3X0R팀 소속 BoB 6기 ch4n3 그냥 하다보면 된다. 베팅할 때 자신이 갖고 있는 돈보다 작으면 if로 다시 받는데, while로 다시 받는 것이 아니므로 취약하다.
pwnable.kr cmd1 write up pwnable.kr cmd1 write upH3X0R팀 소속 BoB 6기 ch4n3 #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=/fuckyouverymuch"); if(filter(argv[1])) return 0; system( argv[1] ); return 0; } pwnable.kr의 cmd1 문제의 소스코드이다. 별거 없다. 그냥 flag, sh, tmp라는 문자열이 argv..
pwnable.kr mistake write up pwnable.kr mistake write upH3X0R팀 소속 BoB 6기 ch4n3 #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/cat fla..
pwnable.kr random write up pwnable.kr random write upH3X0R팀 소속 BoB 6기 ch4n3#include int main(){ unsigned int random; random = rand(); // random value! unsigned int key=0; scanf("%d", &key); if( (key ^ random) == 0xdeadbeef ){ printf("Good!n"); system("/bin/cat flag"); return 0; } printf("Wrong, maybe you should try 2^32 cases.n"); return 0; } 위 소스는 pwnable.kr의 random 문제의 소스이다. 일단 다들 C언어를 배우면서 random함수가 진정 랜덤값을 내놓지 못한다는 것을..