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함수가 진정 랜덤값을 내놓지 못한다는 것을..

pwnable.kr passcode write up

pwnable.kr passcode write up http://noisivohees.tistory.com/25

pwnable.kr flag write up

pwnable.kr flag write upH3X0R팀 소속 BoB 6기 ch4n3이번 문제에서는 소스코드가 제공되지 않는다. 대신 바이너리만 제공된다. 아싸 ㄱㅇㄷ 하면서 gdb로 열었더니 뭔가 이상하다 읭?? 근데 심볼이 없단다;; 처음엔 진심으로 어떻게 풀어야되지 풀이봐야되나 고민을 많이 했었다. 그래서 치트같지만, IDA로 바이너리를 분석했다. IDA에 upx라는 단어가 있는 것을 보고 뒤통수를 맞은 것 같았다. 보고 나서 바로 upx unpacking을 진행했다. 그랬더니 일반 바이너리처럼 굉장히 잘되었다! 참고로, 나는 디미고가 아니였다면 upx packing에 대해서 알지 못했을 것이다. 왜냐하면 동아리 시간에 리버싱을 배우면서 packing에 대해서 알게 되었기 때문이다. 한국디지털미디어고..