Wargame
-
Pwnable.kr random 풀이Wargame/Pwnable.kr 2019. 7. 22. 23:13
이번엔 1pt고 웬만해서 이제 혼자 풀어볼라 그랬더니 취약점이 안 보여서 결국 풀이보고 했네요,, random입니다 코드를 보면 rand() 함수, 난수를 생성하는 함수로 입력받은 key값과 XOR 연산을 해서, 그 값이 0xdeadbeef일 경우 플래그값을 띄우는 코드라고 해석을 할 수 있습니다 그게 틀린다면 2의 32제곱만큼 경우의 수를 돌려봐야할 거라고 하는데 사실 이 rand() 함수는 취약점이 있대요 그건 난수를 생성한답시고 출력하는 수는 사실상 한정되어 있다는 것 진짜 난수를 생성하려면 time함수를 활용해서 이를 시드값으로 줘야 하는데 코드엔 그런 부분이 없으므로 이를 이용합시다 디버깅해보면 이리 나오는데, 처음에 풀이 안보고 풀라 했을땐 크랙미 풀던게 기억나서 main+59에 bp걸고 실행..
-
Pwnable.kr passcode 풀이Wargame/Pwnable.kr 2019. 7. 22. 22:36
다음 passcode 풀이입니다ㅏㅇ 우분투를 이것저것 고쳐봤어요 그중에 하나가 짠 고양이 배경화면 뭔가 지켜본다는 느낌이 들어서 강화제 역할이 되는듯 하네요 글고 깐지나잖아요 흐흫ㅎ 귀엽고 아 하고 싶은거 다해 암튼 코드를 보면 login(), welcome(), main 파트 이리 세개로 나누어져 있다는 것을 확인할 수 있습니다 뭐 귀찮았는데 이제 생각하니까 다 하나씩 살펴보고 가고 싶어졌어요 일단 맨 처음 실행되는 login 함수는 100바이트만큼의 공간을 할당해서 이름을 입력받고 안녕하냐고 묻네요 다음 login() 함수에서는 passcode1은 338150, passcode2는 13371337의 값이 만족돼야 플래그값을 출력하는데, 여기서 scanf("%d", passcode); 이렇게 짜여있습니..
-
Pwnable.kr flag 풀이Wargame/Pwnable.kr 2019. 7. 22. 16:14
이것은 flag 풀이입니다 ELF 파일이길래 아이다 켜야하는줄 알았지만 더 간단한 방법이 있었네요 그래서 일단 flag 파일을 실행시켜야겠다 했는데 실행이 안되네요 저기서 뭘 어떻게 해야될지 몰라서 별짓 다하면서 빡쳤지만 구글링을 해보니 chmod를 해주면 된다 그러더라구요 권한을 수정해주는 명령어라서.. 하하 이 멍청한 시키 ^^ 암튼 실행하면 플래그값을 malloc 함수를 실행시킨 뒤 strcpy해준다네요 malloc() 함수는 동적할당 함수고, strcpy가 문자열 복사 함수죠 일단 충분한 단서는 아니므로 디버깅하겠습니다 근데 upx 패킹되어있으므로 언패킹까지 해줘야 해요(우분투 거의 처음 쓰는거라 upx까지 설치하는 과정) 자 언패킹했으니 디버깅해봅시다 (그 와중에 gdb-peda의 존재를 알고 ..
-
Pwnable.kr bof 풀이Wargame/Pwnable.kr 2019. 7. 22. 11:21
이번엔 진짜 bof 문제를 들고 와봤습니다! 원래는 그 뭐냐 파이썬 pwntools 모듈 이용해서 푸는 방법을 써볼라 했는데 전에 쓰던 칼리 리눅스에는 그게 자꾸 안 깔리고 이것저것 문제가 많길래 그냥 쓰던 우분투로 갈아탔습니다 대회에서도 우분투를 써야할지 칼리를 좀 보완해서 써야할지 고민이 되지만 일단은 우분투로 써보겠습니다아 일단 소스코드와 실행파일(bof.c, bof)을 같은 Downloads 디렉토리에 저장한 뒤 봤더니 굉장히 익숙한 bof 코드가 보이네요 간략히 해석해보면 32바이트짜리 overflowme만 BOF 공격해서 쉘을 따주면 되는거니까, 일단 디버깅을 해서 cmp구간이랑 입력받는 구간의 거리를 구할라 그랬더니 권한이 없다네요 그럼 sudo 도 안되네 뭐 그럼 어셈블리 코드만 보고 판단..
-
Pwnable.kr collision 풀이Wargame/Pwnable.kr 2019. 7. 21. 21:50
다음 문제인 collision 풀이입니다 생각보다 간단하네요 MD5 해시값 collision 뭐 그렇다네요 코드를 이리 두 부분으로 나눌 수가 있는데 처음 for문은 5번을 반복하며 ip의 (i-1)번째 부분에 res를 차례로 더하는 역할을 하는듯 합니다. 딴건 필요없구요 두번째 사진의 세번째 if문을 보시면 hashcode가 check_password의 첫번째 인자값과 일치하면 플래그를 출력합니다. 이 두개만 잘 파악하면 되는데.. 어찌어찌 해석해보면 처음에 명시한 hashcode값을 5개로 쪼갠다는 말 같죠 이걸 하나씩 더하면 결과적으로 원래의 hashcode값이 나오겠죠? 네? 이해가 안된다구요? 그럴 수 있죠! 이걸 5로 나눈 뒤에 확인차 다시 5배를 해보면 에 처음보다 0x4가 부족하네요 그럼 ..
-
Pwnable.kr fd 풀이Wargame/Pwnable.kr 2019. 7. 21. 21:28
LOB 하다가 너무 막혀서 이대론 질리겠다 싶어 전환을 해보려고 합니다 그리하여 시작된 포너블.kr 풀이 일단 문제 보시면 ssh로 저 서버에 접속해야 합니다(그러는거 맞나) 암튼 저렇게 들가면 뿅 하고 뭔가 신기한게 뜨네요(저는 칼리로 들갔습니다) 오 신기해 그 다음은 별 차이 없어요 그 웹사이트에서 문제랑 힌트를 주면 그걸로 저 서버에서 알아서 해결하는 방식입니다 LOB 할 때보단 좀 더 쉬워지겠네요 비슷하려나 일단 fd.c를 살펴보면 fd 변수는 fd 파일을 실행한 뒤 첫 번째로 넘기는 인자에서 0x1234만큼 빼주네요. atoi 함수는 어떤 역할을 하는걸까요..? 찾아보면 문자열을 정수로 변환하는 역할의 함수라고 합니다. 아마도 큰 힌트가 될 거 같네요 그 뒤에 바로 16진수의 1234를 뺴준다는..