-
[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보다 배팅 금액이 클 경우 너는 가진돈보다 많은 돈을 배팅했다며메..
-
[백준] 연구소 14502알고리즘/백준 BAEK JOON 2019. 4. 15. 15:33
한동안 알고리즘을 하느라 블로그 글을 쓰지 못했다ㅠ오늘부터는 알고리즘 풀이에 대한 글도 써보려고 한다ㅎㅎ 그 첫 번째 문제는 연구소이다. 백준 홈페에지( https://www.acmicpc.net/ )에 가면 누구나 풀어볼 수 있다.연구소 14502 https://www.acmicpc.net/problem/14502알고리즘을 시작한지 얼마안되서 역시나 풀이가 어색할 수도 있다ㅎㅎ포너블과는 다른 매력이 있는 것 같다. (개인적으로는 포너블이 더 즐거움) 문제는 다음과 같다.N x M으로 이루어진 지도가 있고 그 곳에는 바이러스와 벽, 그리고 공간이 있다.바이러스는 벽이아닌 공간으로 점차적으로 퍼져나가는데 우리는 3개의 벽을 세울 수 있다.이 때 세우는 3개의 벽 3개는 꼭 세워야 한다. 여기까지 문제를 읽..
-
[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를 ..