write up
-
[HackCTF] Unexploitable #1, Unexploitable #2 Write-up표튜터와 함께하는 Pwnable/HackCTF Write-up 2019. 7. 18. 13:24
요즘 다른거 하느라 바빠서 진짜 오랜만에 포너블을 풀었다.. ㅠㅠ많이 까먹었을까봐 걱정했는데 그래도 새록새록 떠올라서 다행이다.이번에 풀어볼 문제는 Unexploitable #1과 Unexploitable #2 라는 문제이다.두 문제가 같은 방식으로 풀리므로 한 번에 진행하도록 하겠다.기준은 Unexploitable #1을 기준으로 설명을 진행하도록 하겠다. 음.. 푸는 방법은 쉽게 떠올랐지만 뭔가 gadget을 사용하는 센스가늦게 떠올라서 생각보다 시간이 걸렸다... 우선 바이너리를 보도록 하겠다. 64bit이며 dynamically linked 방식을 이용하고 있다. Mitigation의 경우 NX bit만 걸려있어서 .data, stack, heap 영역에실행권한이 없고 Partial RELRO이기..
-
[HackCTF] Pwning Write-up표튜터와 함께하는 Pwnable/HackCTF Write-up 2019. 5. 3. 23:50
이번 문제는 Pwning이다. HackCTF에서 가장 많은 삽질을 한 문제인 것 같다.. 허허..풀었으니 너무나 다행이다. ㅎㅎ 바이너리에는 NX가 걸려있고 Partial RELRO이다.Data, heap, stack 영역에 실행권한이 없고got overwrite가 가능하다~~ 사용자로부터 읽어올 바이트 길이를 물어보았다.나는 11을 입력했고 내가 입력한 값을 보여주었다.내가 처음 입력한 길이값만큼을 보여주는 것같다. IDA를 이용해서 코드를 보도록 하자! "취약하다"라는 의미의 vuln함수를 호출하고 있다. get_n이라는 함수를 두 번 호출하고 있으며 처음 입력받은v2(길이)값이 32보다 크면 사이즈가 너무 크다는문자열이 출력된다는 것을 알 수 있었다. g..
-
[HackCTF] 1996 Write-up표튜터와 함께하는 Pwnable/HackCTF Write-up 2019. 4. 29. 11:08
이번 문제는 1996이다. 굉장히 쉬운 문제에 속하는 편이다. NX가 걸려있어서 스택, 힙, 데이터 영역에 실행권한이 없고Partial RELRO기 때문에 got overwrite가 가능하다. 문제를 실행시켜보았더니 그림과 같은 문자열이 출력되고사용자에게 입력을 받고 있었다. 문제는 또한 바이너리와 cpp 코드도 주어줬다.단순히 BOF로 충분히 풀 수 있는 문제같아 보였다.getenv 함수로 buf에 값을 입력하도록 되어있었는데역시 입력받는 길이를 확인하지 않기 때문에 BOF가 가능했고BOF를 통해 ret를 spawn_shell로 덮는다면 해당 함수가실행되면서 "/bin/bash"로 인해 쉘을 딸 수 있을 것이다. main함수에서의 getenv 함수 호출 전을 살펴보면rbp-0x410에 인자 buf가 존..
-
[HackCTF] Poet Write-up표튜터와 함께하는 Pwnable/HackCTF Write-up 2019. 4. 29. 00:45
이번 문제는 Poet이다. 생각보다 쉬웠다. NX만 걸려있었고 RELRO는 Partial이었다.힙, 스택, 데이터 영역에 실행권한이 없었고got overwrite는 가능하다는 걸 알 수 있었다. 문제를 실행시켜보도록 하겠다.뭔가 값을 입력받고나서 저자가 누구인지 물어본다.총 2번의 입력을 사용자로부터 받고 있었고출력된 문자열을 보니 1000000점을 획득해야한다는 것을 알 수 있었다. 이번에는 IDA를 이용해서 코드를 보도록 하겠다.main함수를 보니 총 4가지의 함수가 돌고 있었고각각의 함수를 살펴보기로 했다. 또한 dowrd 6024E0이라는변수는 1000000이여야 while문을 탈출하고 reward 함수를호출하는 것으로 보아 점수에 해당하는 변수임을 알 수 있었다. 첫 번째로 호출되는 get_po..
-
[HackCTF] RTL_Core Write-up표튜터와 함께하는 Pwnable/HackCTF Write-up 2019. 4. 23. 18:10
이번 문제는 RTL_Core 입니다. 해당 바이너리는 NX만 걸려있다. 문제를 실행시켜보면 패스코드를 입력하라는문자열이 출력된다. 그래서 뭔가 입력해보았는데정답이 아니기 때문에 분석을 통해서 정답을 맞춰야했다. IDA를 이용해서 코드를 보도록 하자.hashcode를 맞춰야 다음단계로 넘어갈 수 있다. hashcode는 0x0C0D9B0A7 이라는 것을 확인했다.우리가 입력한 값은 check_passcode함수의 인자로 넘어가고거기서 계산된 값이 바로 위에서 찾은 hashcode와 같아야한다. 그럼 check_passcode함수를 보도록 하자.동작원리는 간단했다. 기준이되는 메모리부터 4바이트씩커진 위치의 메모리 위치(+4, +8, +12, +16)의 값을 읽었고그 값들을 계속해서 더한 값이 바로 hash..