표튜터와 함께하는 Pwnable
-
[HackCTF] 내 버퍼가 흘러넘친다!!! Write-up표튜터와 함께하는 Pwnable/HackCTF Write-up 2019. 4. 18. 02:12
이번에 풀 문제는 "내 버퍼가 흘러넘친다!!!" 이다. 문제를 실행시켜보도록 하자~~Name과 input이 출력되고 두 번 입력을 받고 있다. 이번에는 IDA로 코드를 살펴보았다.read함수와 gets함수로 입력을 받고 있다는 것을 알 수 있다.read 함수로 입력을 받는 name의 경우 전역변수이므로 BSS영역에 존재한다. gets함수로 S 버퍼에 입력을 받기 때문에 길이제한이없으므로 이곳에서도 충분히 버퍼오버플로우를 일으킬 수 있다. 첫 번째로 시도한 방법의 Payload는 다음과 같다. S 버퍼의 크기가 존재함에도 gets함수를 사용했기 때문에s와 sfp의 크기를 더미값으로 채우고 ret를 버퍼 s 다음의 주소를 준다.그 다음 쉘코드를 넣는 방식으로 payload를 구성하였다. 첫 번째 입력 pay..
-
[HackCTF] Basic_BOF#2 Write-up표튜터와 함께하는 Pwnable/HackCTF Write-up 2019. 4. 17. 22:43
이번 문제는 Basic_BOF#2이다. 문제를 실행시켜보도록 하자!!입력했더니 뭔가 이상한 값이 출력되었다. IDA를 이용해서 코드를 보도록 하겠다ㅎㅎ음.. 값을 입력받고 v5( )를 호출한다. 어셈블리어 코드도 보도록 하자!!0x80484b4라는 주소를 ebp-0xc가 4바이트만큼 참조하는 값으로 mov해주고 있다. 그리고나서 그 값을 eax에 넣고 call 하고 있는 것으로 보아이 부분이 v5함수를 호출하는 것이라는 것을 알 수 있다. 처음에는 shellcode를 이용해서 ret를 덮으면 되나? 길이가 덮을 수 있는길이가 아니였기 때문에 다른 방법을 사용해야했다.무슨 함수가 쓰이나 한번 보도록 하겠다.또잉 shell이라는 함수가 보였다. 그렇다면?? ebp-0xc에 있는 주소가 호출되는 것 대신에 s..
-
[HackCTF] Basic_BOF#1 Write-up표튜터와 함께하는 Pwnable/HackCTF Write-up 2019. 4. 17. 22:35
Hack CTF https://ctf.j0n9hyun.xyz문제도 간간히 Write-up을 써보려고 한다.초반 문제의 난이도는 많이 어렵지 않다고 한다.한동안 포너블을 못했으니 감을 되찾을 겸 시도해보겠다. 제일 첫 번째 문제인 Basic_BOF#1이다. 문제를 보도록 하자~~ 실행을 시켜보니 그냥 입력한 buf값과 check값을 보여준다. IDA로 한번 보도록 해보자~v5가 -559038737이면 "/bin/dash"가 실행되면서flag를 실행할 수 있는 권한을 줄 것만 같다. 다음으로는 어셈블리어 코드를 보자.음 저 부분에서 ebp-0xc가 0xdeadbeef여야 우리가원하는 값을 볼 수 있다는 것을 알 수 있었다.저 위치에서 ebp-0xc에는 코드에서 볼 수 있듯이 0x4030201이 있다. "a"..
-
[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으로 만들 ..