표튜터와 함께하는 Pwnable/Pwnable.kr Write-up
-
[Pwnkr] Mistake Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 4. 1. 23:30
이번 문제는 Mistake 풀다보니까 풀려버린문제다;; 우선 코드를 보도록 하자.파란상자는 주어진값들과 입력받은 값을 XOR연산하는 함수가 정의된 내용이고빨간상자는 이상하다고 느껴서 표시를 해두었다. 첫 번째 빨간상자를 보면 open을 기준으로 양쪽에 " = " 와 " " 가 있다. 흠.. 여기서 힌트를 떠올려 보게 되었다.operator priority ??? 연산자 우선순위?? 힌트를 통해 연산자 우선순위에 대한 문제라고 예상할 수 있었다. 이 문제에서 중요한 것은 우선순위이다. " 비교연산자가 대입연산자보다 우선순위가 높다!! " 첫 번째 빨간상자의 if문을 보면 password파일이 저 경로에 있기 때문에양수값..
-
[Pwnkr] Random Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 4. 1. 02:25
이번 문제는 그냥 계산 문제였던 것 같다..코드를 보도록 하자~ rand()함수를 이용해서 랜덤값을 random이라는 변수에 저장해주고내가 입력한 key 값과 random값을 XOR 연산해서 0xdeadbeef가 나오면 Flag를 볼 수 있다. 하지만 저런식으로 rand()함수를 사용하게되면 매번 똑같은 값이 나온다는 걸아주 옛날에 코딩을 하면서 알게된 적이 있었다. 그러므로 gdb로 무슨 값이 저장되는지 보도록 하자. 0x6b8b4567 = 1804289383이 계속 나오게 된다.그러므로 KEY ^ 1804289383 = 0xdeadbeef(3735928559)가 나오면 된다. 그러므로 3735928559 ^ 1804289383 == KEY가 될 것이다.3735928559 ^ 1804289383 = 3..
-
[Pwnkr] Passcode Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 3. 31. 20:42
Passcode... 갑자기 어려워졌다고 느꼈다.. 실제로도 푸는데 시간이 많이 걸렸다.. 코드를 보도록 하자많은 부분에서 입력을 받는데 일단 Bof가 일어날만한 부분은 없었다.또한 passcode1과 passcode2의 값에 조건을 걸어서 조건을 통과하면flag를 보여주는 형태이다. 한 가지 이상함을 느낀 부분은 바로scanf 함수이다. &가 없이 passcode1의 변수를 사용하고 있었다. 아마 이 부분이 취약한 부분이 될 것 같았다. 프로그램을 한 번 실행시켜 보았다.처음 name 값은 문자가 가능했지만 passcode1을 입력받을 때 숫자를 입력하니 Segmentation fault가 발생했다. 쩝.. 그래서 이번에는 문자열을 입력해보았더니 그 다음 단계로 갈 수는 있지만 Login Failed가..
-
[Pwnkr] Horcruxes -> Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 3. 29. 22:04
이번 문제는 horcruxes이다!! Py0zz1의 추천으로 먼저 풀어보게 되었다!!해리포터 시리즈를 읽어봤다면 알 수 있는 그 호크룩스의 문제였다.(몰라도 풀 수 있음 ㅋ) 볼드모트를 죽이기 위해서는 볼드모트의 영혼이 담긴 7개의 호크룩스를 부셔야하는데.. 코드를 보도록 하자!! readme 파일을 보면 우선 9032포트에 접근해서 바이너리를 실행해야함을 알 수 있었고rop를 이용해야지 flag를 읽을 수 있다는 힌트를 받을 수 있었다. 프로그램을 실행시켜보니 메뉴에 대한 입력을 받고 EXP(경험치)값을 또 받는다. 대충 1234를 입력해보니 볼트보트를 죽이기 위해서는더 많은 경험치가 필요해 보인다. 그러므로 저 경험치 값을 알아내야 이 문제를풀 수 있다는 것을 알 수 있었다. 우선 분석을 위해 바이너..
-
[Pwnkr] Flag Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 3. 28. 19:53
이번 문제는 packing에 관련된 문제였다. 파일의 정보를 보도록 하자. 64bit 형식에 statically linked가 되어있으며 stripped이다. -> stripped이므로 디버깅이 불가능하다!! 실행을 시켜보니 그림과 같은 문자열만 출력되었다. 뭐지?? 전혀감이오지 않았다.... 혹시몰라서 hex editor를 이용해서 파일을 열어보았다. 오잉? UPX?? UPX로 패킹이 되어있었다!! 아직까지 감은 안오지만 일단 upx.exe를 이용해서 언패킹해보았다. 언패킹을 하였더니 stripped가 -> not stripped가 되면서 디버깅이 가능했다. 바이너리를 gdb로 디버깅해보았더니 바로 flag라는 녀석이 보였다. 위의 사진처럼 print flag로 바로 볼 수도 있고 아래처럼 그냥 따라가..
-
[Pwnkr] Bof Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 3. 26. 01:15
이번 문제의 이름은 bof이다. 다운로드 받은 bof의 소스코드를 보도록 하자. 버퍼의 크기는 32개인데 우리가 입력할 수 있는 입력 수의 제한이 없다. 그러므로 gets함수에서 bof를 일으킬 수 있다는 것을 알 수 있었다. 이 때 key의 값이 0xcafebabe여야만 쉘을 딸 수 있는데 이 값을 우리가 입력하는 값이 아닌 이미 인자로 넘겨진 값 0xdeadbeef가 존재했다. 스택의 구조를 생각해보면 key가 버퍼인 overflowme보다 높은 곳에 존재한다.그러므로 버퍼를 오버플로우 시켜서 key값을 cafebabe로덮게되면 쉘을 따낼 수 있다는 것을 알게되었다.우리가 해야하는 것은 바로 이 key값의 위치를 알아야한다. func 함수의 어셈블리어 코..
-
[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가 되어야하며 이..