표튜터와 함께하는 Pwnable
-
[Pwnkr] Leg Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 4. 2. 19:12
이번 문제는 leg였다. 역시나 조금 어려웠던 것 같다.거의 다 풀었는데.. 까비..주어진 코드를 보도록 하자. 코드를 보면 우리가 입력할 수 있는 key값을 각각의key1( ), key2( ), key3( )의 리턴값들을 더한 것과 같으면 FLAG를 볼 수 있다는 것을 알 수 있다. 즉 코드를 분석할 줄알아야한다. 또하나 주어진 코드를 보도록 하자. 어셈블리어 코드를 주었다.코드가 너무 길어서 짤랐다. main의 어셈블리어 코드를 보면 함수가 끝나고난 뒤 r0의 값을 가지고 모으는 것을 알 수 있다. 이를 통해 r0가 함수의 리턴값이라는 것을예측할 수 있었다. key1( )과 key2( )가 끝나고 나온 리턴값 r0를 각각r4와 r3에 저장했고 add를 ..
-
[Pwnkr] Shellshock Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 4. 1. 23:31
이번 문제는 Shellshock 문제이다. 감이오지 않아서 우선 힌트를 보았다. 그리고 코드를 보았다.코드를 보았더니 그냥 문득 들었던 생각은 FTZ문제들이 떠올랐다. 뭔가 FTZ 초반에 나왔던 연속적인 명령어 실행이나 어떠한 실행파일이 실행시에 지니는 권한을 이용하는 문제같다는 느낌이 들었다. 해볼 것도 없었지만 shellshock 실행파일을 실행시켜보았더니shock_me라는 문자열이 출력되었다. 뭔가 내가 모르는 어떠한 취약점을 이용한 공격이라는 생각이 들었고shellshock를 검색해보았다. 그랬더니 역시나 shellshock bash shell 취약점이존재한다는 것을 알게 되었다. 그래서 이 취약점을 공부해보았다. 이 취약점은 bash shell에서 임의의 환경변수에 특정 코드를 삽입하여실행할 수..
-
[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 함수의 어셈블리어 코..