분류 전체보기
-
[HackCTF] Simple_Overflow_ver_2 Write-up표튜터와 함께하는 Pwnable/HackCTF Write-up 2019. 4. 19. 03:41
이번 문제는 Simple_Overflow_ver_2이다!! 문제를 실행시켜보면 "Data: " 라는 문자열이 출력되면서입력을 받는다. 입력한 문자열과 함께 주소값이 출력되는데이 주소값은 버퍼의 주소값으로 보여졌다. 이 주소값은 프로그램이 실행될 때마다 달라진다. 또한 16자리가 넘어가면줄이 넘겨지면서 다음줄의 주소값이 나타나게 된다. "Again" 이라는 문자열이 출력되고 "y"를 입력하여 다시 진행하게되면 처음 입력받은 버퍼의 주소에 계속해서 입력을 받는다는 것을 알 수 있었다. IDA를 이용하여 소스코드를 보도록 하자예상했던대로의 코드 흐름임을 알 수 있었다~~ 그렇다면 Paylaod를 짜는 것은 간단해졌다. 우리가 필요한 것은이제 ret의 위치만 알면 Payload를 완성시킬 수 있다."a"를 4개..
-
[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이고 두..