본문 바로가기

pwnable.kr

(7)
random 소스 코드 #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; } 설명: rand()는 seed값에 변화를 주지 않으면 실행마다 같은 값을 반환한다. main()을 disassemble한 결과이다 random = rand();// random value! 해당 코드는 에 해당한다. ..
passcode 해당 문제의 write-up을 이해하기 위해선 함수가 호출 및 종료(return) 됐을 때, 스택에 어떤 변화가 일어나는지 알아야 한다. 이를 위해 아래 게시글을 참조하자. http://www.tcpschool.com/c/c_memory_stackframe 코딩교육 티씨피스쿨 4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등 tcpschool.com 소스 코드 #include #include void login(){ int passcode1; int passcode2; printf("enter passcode1 : "); scanf("%d", passcode1); fflush(stdin); // ha! mommy told me that 32bit is vulner..
pwnable.kr (ssh) 바이너리 다운 받기 & pwntools 이용하기 바이너리 로컬로 다운받아오기 https://c0wb3ll.tistory.com/entry/pwnablekr-%EB%B0%94%EC%9D%B4%EB%84%88%EB%A6%AC-%EB%B0%9B%EA%B8%B0 pwnable.kr 바이너리 받기 딜레이랑 gdb-peda 등등 로컬에서 간편하게 분석하기 위해 바이너리를 받아오는 방법을 찾아보았다. 그리고 앞으로 풀이는 pwntools 사용법도 익힐겸 로컬에 바이너리를 받아와 분석 후 pwntools를 이 c0wb3ll.tistory.com pwntools 이용하기 https://oz1ng019.tistory.com/31 [PWN] Pwntools ssh접속 후 특정 바이너리 실행 및 argv 입력 pwnable.kr을 풀려다가 pwntools을 사용하지 않고는..
flag 해당 문제는 리버싱 문제로 바이너리만이 주어진다. 바이너리 실행 결과는 다음과 같다 --------------------------------- 여담이 길어요 죄송합니다.. --------------------------------- 그래서 나는 바이너리를 리버싱 해야겠구나 생각하고 IDA를 켜서 수십 시간 동안 꼬리에 꼬리를 무는 함수들을 타고 내려가며, '아니 Toddler's Bottle'이라면서 너무 어려운 거 아니야..?' 라고 생각하며, 엄청난 삽질을 했다. 그러나 아무리 생각해도 뭔가 이상했다. main함수는 보이지도 않고 해당 함수들을 타고 들어가면 이상한 내용의 코드들과, 꼬리에 꼬리를 무는 또 다른 이상한 함수들을 호출하는 것의 연속이었다. pwndbg로 확인해도 결과는 똑같았다. ma..
bof [소스코드] #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme); // smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; } (1) main함수에서 인자로 0xdeadbeef를 주며 func함수를 호출한다. (2) func함수에선 gets를 이용해 값을 입력받아 overflowme에 저장하고 (3) 인자인 key와 0xcafebabe를 비교하여 일치하면 ..
collision [소스코드] #include #include unsigned long hashcode = 0x21DD09EC; unsigned long check_password(const char* p){ int* ip = (int*)p; int i; int res=0; for(i=0; i
fd [소스코드] #include #include #include char buf[32]; int main(int argc, char* argv[], char* envp[]){ if(argc