표튜터와 함께하는 Pwnable/Pwnable.kr Write-up
-
[Pwnkr] Unexploitable Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 5. 17. 03:01
오랜만에 CTF를 풀었다.ㅎㅎ 앞서 SysROP와 RTC를풀었던 것이 도움이 되었던 것 같다. 풀이가 부족하다면 아래의 링크를 참조하자링크 : SysROP, RTC 처음으로 Pwnkr의 Toddler가 아닌 문제를 풀었다는게 기분이 좋다.이번 문제는 SysROP와 RTC 그리고 Rax gadget을맞춰주는 것이 관건인 문제이다. 우선 scp로 바이너리를 가져오자~~ 문제는 NX가 걸려있고 Partial RELRO이므로Stack, Heap 영역에 실행권한이 없고Got Overwrite가 가능하다. 문제를 실행시켜보면 간단하게 사용자로부터 입력을 받는 것이 전부이다. IDA로 확인해보니 sleep(3) 이후, read함수로 입력을 받고 있었다.buf에 넉넉하게 1295개를 입력 받고 있었다. 어셈블리어 코드..
-
[Pwnkr] Input2 Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 4. 17. 16:57
이번 문제는 Input2이다.문제는 생각보다 어렵지 않았으나Payload짜는데서 조금 헤맸다..ㅎㅎ 코드를 보도록 하자이 문제의 FLAG를 얻기 위해서는 5개의 Stage를 통과해야한다. 먼저 첫 번째 Stage를 보자.우선 argc가 100이 되어야하고 넘겨지는 argv의 'A'와 'B' 번째 값이각각 "\x00" 과 "\x20\x0a\x0d"의 값이 들어가야한다. 굉장히 간단하게 넘길 수 있다. 나는 Python을 사용했고 argv는 list형태로 넘겨야한다.이런식으로 구성하였다.'A'와 'B'는 각각 65, 66을 의미하므로65번째와 66번째에 값에 요구하는 값을 넣어주었다. 다음 Stage를 보도록 하자. Stage2번이다.buf에 read를 두 번 진행하게되는데 fd를 보면 첫 번째는 0이고 두..
-
[Pwnkr] Blukat Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 4. 15. 18:49
이번 문제는 Blukat이다. 이번 문제의 힌트를 보도록 하겠다. 흠.. 때때로 포너블은 이상하다며 이 문제가 어려우면 너는 숙련된 플레이어라고??흠.. 난이도가 많이 어려운 문제는 아니며 쉽게 생각하라는 의미같다. 우선 주어진 소스코드를 보았다.코드를 보니 password를 맞추어야 FLAG를 계산하는 함수가 작동하여우리에게 FLAG를 보여주도록 되어있었다. 그렇다면 위에서 FLAG를 계산할 때 사용되는 key의 길이와 우리가 입력하는 길이의 값이 같을 것이라는 생각이 들었다. key의 길이는 33자리다. 이번에는 어셈블리어 코드를 확인해보도록 하겠다.비교를 하는 strcmp함수에 break point를 걸고 실행을 시켜보았다.strcmp이전에 들어간 인자들을 살펴보았다. 인자값은 우리가 입력할 수 있..
-
[Pwnkr] Black Jack Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 4. 15. 16:23
이번 문제는 Black Jack이다. 힌트를 보았더니 돈이 그냥 많으면 준단다. 백만장자한테 준다는데.. 코드를 보도록 하자.음... 길다... 길어서 다 보여주기 힘들다.문제에 링크가 있으니 참고하길 바란다. 일단 프로그램을 실행해보도록 하겠다.블랙잭 게임이 뭔지는 잘모르지만 돈을 배팅하고배팅한 돈의 일정한 비율로 돈을 따는 게임인 것 같다. 백만장자한테 FLAG를 준다고 했으니 돈에 관련된코드에 분명히 취약점이 있을 것 같았다. 그래서 우선적으로 눈에보이는 Bet에 대해서 검색을 해보았다.이 함수가 바로 배팅관련 함수이다. 이름이 그냥 betting( ) !!우리가 배팅하고 싶은 금액을 입력할 수가 있다. 하지만 현재 가지고 있는cash보다 배팅 금액이 클 경우 너는 가진돈보다 많은 돈을 배팅했다며메..
-
[Pwnkr] Cmd1 Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 4. 4. 03:16
이번 문제는 어렵다기보다는 비교적 쉬운 문제에 속한다.코드를 보도록 하자!! filter 함수에 우리가 넣는 argv[1]이 인자로 넘어가는데strstr함수를 이용하여 r을 return하고 있다.strstr( ) 함수의 return값은 해당 문자열의 위치 포인터인데이 문제에서는 flag , sh, tmp 중 어떠한 문자열이라도 argv[1]에 속한다면1을 return하게 된다. 하나라도 발견된다면 참이되어서 main함수에서의if문을 통과할 수가 없다. 통과하더라도 argv[1]이 system() 함수에서명령을 실행할 수 있는 문자열이여야 한다. 가장 기본적으로 생각할 수 있는 것은 일단 우리는 flag를 봐야하기 때문에 argv[1]로 "/bin/cat flag"를 생각해볼 수 있다.하지만 flag가 들..
-
[Pwnkr] Lotto Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 4. 3. 18:36
이번 문제는 Lotto이다!!이번 문제를 푸는 열쇠는 바로 Logic Bug를 찾아내는 것이다.lotto buffer가 랜덤값으로 바뀌기 때문에Brute force 공격을 이용해야했다. 우선 코드를 보도록 하자!! 이 문제의 열쇠는 빨간 산자의 play함수 내의 이중 for문이다. 취약점이라기 보다는 logic bug이다. match라는 변수의 값이 6이되면 FLAG를 볼 수 있게되는데랜덤 값인 lotto와 우리가 입력할 수 있는 submit를 비교해서같으면 match값이 증가한다. 하지만 이 부분의 logic bug는다음과 같다. 언뜻 보기에는 배열(1Byte) 하나씩 값이 같은지비교하는 것 같지만 사실은 하나만 같아도 match를 6으로 만들 ..
-
[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에서 임의의 환경변수에 특정 코드를 삽입하여실행할 수..