분류 전체보기
-
[HackCTF] x64 Simple_size_BOF Write-up표튜터와 함께하는 Pwnable/HackCTF Write-up 2019. 4. 18. 21:48
이번 문제는 x64 Simple_size_BOF이다~~ 문제를 실행시켜보았다!버퍼의 주소로 보이는 것이 출력되고 있고사용자가 값을 입력할 수 있게되어있다~ 소스를 보도록 하자버퍼의 크기는 0x6D30 => 27952이다. 프로그램을 실행해보면 알겠지만버퍼의 주소는 항상 바뀐다. 하지만 버퍼의 주소를 출력해주기 때문에우리는 버퍼의 주소를 알 수 있다. 그렇다면 일단 ret위치를 확인해보자 rsp에서 27960떨어진 부분이 바로 ret값이다. 그러므로 우리는다음과 같은 Payload를 구성할 수 있다. Payload는 다음과 같다~우선 출력되는 버퍼의 주소값을 인자로 받아온다. 받아온 이 버퍼의 주소는ret에 덮어쓸 것이다. 그 다음 64bit용 Shellcode(31)을 넣고 나머지 27929만큼을dumm..
-
[HackCTF] x64 Buffer Overflow Write-up표튜터와 함께하는 Pwnable/HackCTF Write-up 2019. 4. 18. 16:57
이번 문제는 x64 Buffer Overflow이다.이전에 풀어봤던 문제와 흡사하며 64bit라는 차이점을 가지고 있다. 프로그램을 실행시켜보면 내가 입력한 값과 hello라는 문자열이 출력된다. 코드를 보도록 하자.누가봐도 이 부분에서 BOF를 일으킬 수가 있다. (길이제한이 없음) 그러므로 간단하게 풀 수 있는데 그렇다면 쉘은 뭘로 딸까??이전에 이러한 비슷한 문제가 있었기 때문에 바로 함수를 확인해보았다.ㅋㅋㅋ역시나 사용하라고 준비한 의심스러운 함수가 존재했다. 해당 함수는 역시 execve 함수를 호출하고 있었고 ㅎㅇ 하고 "/bin/bash"를 인자로 받고 있었다. IDA를 이용해서 한번 더 확인해보았다. 확신을 할 수 있었기 때문에이제는 ret를 찾아서 callMeMaybe 함수 주소로 덮어씌..
-
[백준] 퇴사 14501알고리즘/백준 BAEK JOON 2019. 4. 18. 03:53
이번 문제는 퇴사이다.https://www.acmicpc.net/problem/14501 생각보다 어려웠는데 그 이유는 아직 재귀함수를 잘 못다루는 것 같다ㅎㅎ 이런 문제는 문제를 풀기전에 어떻게 설계하느냐에 따라 달라지는 것 같다.(사실 모든 문제가 그렇다 ㅎㅎ..) 재귀함수에 대한 문제를 조금 더 풀어봐야겠다. 우선 day와 pay를 나란히 입력받는다.그 뒤 함수를 호출할 것인데 이 때 들어가는 인자는 sum과 idx이다. idx가 입력받은 n과 같아지면 정상종료되야한다고 판단하며문제에서 최대이익을 원했으니 sum과 ans중 최대값을 비교하여 ans에 저장한다. n보다 idx보다 커질 경우 상담을 할 수 없는 것이기 때문에이 경우에도 종료시키는 것이 맞다. idx==n이 되지 않았다면 방금 상담한 날..
-
[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이전에 들어간 인자들을 살펴보았다. 인자값은 우리가 입력할 수 있..