표튜터와 함께하는 Pwnable
-
[Pwnkr] Collision Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 3. 26. 00:32
이번에 풀어볼 문제는 Collision이다.문제를 먼저 보았더니 힌트로 추정되는 문장이 보였다. MD5 hash collision?? MD5는 단방향 암호화이기 때문에 출력값으로부터 입력값을 복원할 수 없다.같은 값을 입력값이면 항상 같은 출력값이 나오며 서로 다른 값을 입력할 경우 같은 출력값이나올 확률을 매우 낮지만 같은 값이 나올 가능성은 존재한다. 예를 들어 "ABCD"와 "EFGH"를 MD5 했는데 해시값이 똑같을 수도 있다는 것이다. 이러한 가능성을 이용하여 MD5로 암호화했을 때 같은 MD5 해시값을 갖는 문자열이발생하는 상황을 바로 MD5 hash collsion이라고 한다. 소스코드를 보도록 하자!!코드를 보게되면 hashcode라는 값을 주어줬고 우리가 넘기는 인자의 길이가20byte가..
-
[Pwnkr] Fd Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 3. 25. 23:55
이제부터는 pwnable.kr을 풀어보도록 하겠다~ 새로운 시작!!ㅎㅎ 그 첫 번째 문제는 fd이다 fd.c의 소스코드를 보도록 하겠다. 코드를 보면 atoi함수를 이용해서 argv[1] 값을 인자로 넘겨준다. 이 코드의 의미는 즉, string을 숫자형태로 바꾸겠다는 의미이다. 그 값을 fd에 저장하고 이 fd는 read함수의 인자로 넘겨준다. read함수의 첫번째인자는 fd = file descriptor를 의미하며 파이프 ,FIFO, 소켓, 터미널 디바이스, 파일 등 종류에 상관없이 모든 열려있는 파일을 참조할 때 사용한다고한다. 이 코드에서는 read함수를 이용해서 buf에 입력을 진행하기 때문에 fd값이 stdin을 의미하는 0이 되어야한다. 그러므로 argv[1]은 0x1234가 되어야하며 이..
-
[LOB] Xavius -> Death_knight Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 24. 16:42
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 드디어 마지막 문제이다! 코드를 보도록 하자!!힌트는 Remote BOF이다. 버퍼의 크기는 40인데 입력할 수 있는 크기는 256이므로 아주 쉽게 BOF취약점을 가진 코드를 찾을 수 있다. 이제 이 코드를 어떻게 이용하느냐에 따라 이 문제를 풀 수 있을 것 같다.우선 프로그램을 실행시켜보겠다! 참고로 나는 두 가지 방법으로 풀기위해서 포트번호가 6667로 death_knight파일을 하나 더 빌드해놓았다. 또잉?? 이미 실행중이다.. 실행 중인 것을 확인했다. 소스코드에서 해당 포트번호가 6666이란걸 알았기때문에 접속해보도록 하겠다. 일단은 포트 6667파일로 실행시켜보았다.입력창이 나왔고 버퍼에 값을 입력할 수 있었다. 이 입력(recv)을 ..
-
[LOB] Nightmare -> Xavius Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 19. 23:51
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 이번문제는 음.. 어려웠당... 우선 코드를 보자스택(0xbf...) binary_image(0x08...) 라이브러리 이번 문제의 코드를 보면 스택영역과 바이너리영역을 모두 사용할 수 없다.leave와 ret gadget을 이용할 수도 없고 이 의미는 라이브러리 함수가leave와 ret로 끝나므로 라이브러리도 사용할 수 없다는 뜻이다.그렇다면 이 문제는 대체 어떻게 푸는 것일까??하는 생각이 들었다..ret를 제외한 모든 부분이 초기화되기 때문이다.. 이전 문제들과 달랐던 점은 fgets()을 이용해서 인자를 받는다.그리고 라이브러리 함수를 사용하지 못하게 하는 방법은다른 조건들 처럼 0x40를 확인하면 되는데 왜 굳이 0x90를 비교하는 방법을..
-
[LOB] Succubus -> Nightmare Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 19. 19:53
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 이번문제는 Succubus에서 Nightmare로 갈 수 있는 문제이다~생각보다 쉬운문제였다. 우선 코드를 보자코드를 보면 PLT를 이용하라는 듯한 힌트를 주고있다.또한 strcpy의 주소값을 ret에 덮지않으면 조건이 성립되지않아서 다음 코드로진행할 수 없다는 것을 알 수 있다. 그러므로 우리가 구해야할 것은 일단strcpy의 주소를 알아야한다는 것을 알 수 있다.또한 우리는 결과적으로 쉘을 따야하기 때문에 system함수와 그 인자로 "/bin/sh"을 사용할 것이다.이 3가지를 어떻게 사용할 수 있을까를 고민해보고 다음과 같은 Payload를 생각해냈다. Payload = system주소 + dummy(4) + "/bin/sh"주소 + dum..
-
[LOB] Zombie_Assassin -> Succbus Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 14. 02:17
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 이번 문제는 생각보다 너무 쉬웠당~우선 코드를 보자~ Main 함수를 보게되면 우선적으로 공유라이브러리를 사용할 수 없도록'\x40'을 검사하는 제약을 걸어두었고 addr가 DO 함수의 주소가 아닌 경우에이 또한 프로그램을 더 이상 진행하지 못하도록 하였다.또한 ret부분을 제외한 나머지 버퍼들을 초기화 시켰다. ret값에 DO함수의 주소값과 비교해서 다르면 더 이상진행할 수가 없었으므로덮어쓸 ret에 넣어줄 DO함수의 주소값을 가진 녀석이 필요하다는 것을 알 수 있었다. 함수들의 정의를 보니 전역변수 check값으로 조건문을 통과할 수 있음을 알 수 있었다.연쇄작용처럼 DO, GYE, GUL, YUT, MO 함수가 진행되어야하며마지..
-
[LOB] Assassin -> Zombie_Assassin Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 5. 03:47
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 이번 문제를 풀기위해서는 이전 문제와는 비슷하지만 새로운 개념이 필요하다!!우선 코드를 보자!이전의 문제와 거의 같으나 이번에는 입력되는 값을 버퍼에 저장할 때길이 제한이 걸려있다. 또한 힌트로 주어진 것은 바로 FEBP이다.FEBP는 Fake ebp를 의미하는데 이번에는 ret gadget뿐만아니라 leave gadget도 이용해야한다. Fake ebp의 원리는 그림과 같다.sfp에 &buffer-4값을 넣어주고ret에는 leave gadget주소를 넣어준다.버퍼에는 쉘코드 주소와 nop으로 채워준다. 그렇게되면 에필로그 진행 시 공격이 시작되며(1)leave gadget 진행 시,(2)[pop ebp]가 진행되면서 pop으로 인해 esp가 +4..
-
[LOB] Giant -> Assassin Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 4. 03:12
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 이번 문제는 ROP를 알기전에 해두면 도움이되는 Ret Sled를 배울 수 있는 문제이다.(나는 ROP를 먼저했었다..ㅎㅎ) 이 문제를 풀려먼 에필로그에 대한 이해가 필요하다.에필로그는 보통 leave와 ret gadget으로 이루어져있으며 * leave gadget의 경우 *[ mov esp, ebp][ pop ebp] * ret gadget의 경우 *[ pop eip ][ jmp eip ] 형태로 이루어져있다.ret gadget이 진행되면 esp는 + 4가 되며[ pop eip ]의 eip에는 esp의 값이 저장되어지는데ret주소에 ret gadget을 넣어주고 그 뒤에 쉘코드를 넣어주게되면ret gadget이 한 번 더 일어나게되면서 esp가..