본문 바로가기

Security

[pwnable.xyz] WriteUp 보호되어 있는 글입니다. 더보기
ALLES! CTF 2021 writeup 보호되어 있는 글입니다. 더보기
KakaoTalk Hooking 보호되어 있는 글입니다. 더보기
[Reversing.kr] ImagePrc [주의] 해당 글에는 풀이 및 정답이 적혀있습니다. 스스로 해결하고 싶으신 분들은 문제를 해결한 후, 이 페이지를 참고하셨으면 합니다 : ) 프로그램을 실행해보면 무언가를 그릴 수 있는 화면과 Check 버튼이 나온다. Check 버튼을 눌러보면 Wrong 메시지 박스가 호출된다. 디버깅해보도록 하자. 일단 Wrong 문자열이 출력되는 메시지박스 구문부터 찾았다. 근데, 특이한 점은 틀렸다고 알려주는 부분은 있는데 정답일 때 맞았다고 해주는 부분을 찾지 못했다. 계속 분석해보면 GetDIBits 함수를 호출한다. 검색해보니 지정된 호환 비트맵에서 비트열을 뽑아내서 지정된 포맷을 사용하는 DIB로 버퍼에 복사한다고 한다. 아마 그린 이미지를 비트맵으로 읽어서 비트열을 뽑아내서 메모리 어딘가에 저장하는 것 .. 더보기
[Reversing.kr] Replace [주의] 해당 글에는 풀이 및 정답이 적혀있습니다. 스스로 해결하고 싶으신 분들은 문제를 해결한 후, 이 페이지를 참고하셨으면 합니다 : ) 프로그램을 실행해보면 숫자만 입력할 수 있는 박스와 Check라는 버튼이 있습니다. 내부 루틴을 통해 맞는 숫자인지 검사하는 프로그램 같아 보입니다. "Replace" 프로그램을 분석해보기 위해 디버거에 올리면 다음과 같이 바로 EP를 확인할 수 있습니다. 하나씩 실행하며 분석해보면 "CALL 0x401000" 명령이 있는데 따라가면 DialogBoxParamA 함수를 호출하는 것 같습니다. 그 아래에도 여러 코드가 있는데 살펴보니 GetDlgItemInt, SetDlgItemTextA 함수가 존재하고 SetDlgItemTextA 함수에서는 "Wrong" 인 문자열.. 더보기
[Reversing.kr] Easy Unpack [주의] 해당 글에는 풀이 및 정답이 적혀있습니다. 스스로 해결하고 싶으신 분들은 문제를 해결한 후, 이 페이지를 참고하셨으면 합니다 : ) Easy_UnpackMe.exe 파일과 함께 준 ReadMe.txt를 읽어보면, OEP를 찾으라고 합니다. 디버거로 열면 Entry Point를 찾을 수 없다는 경고 메세지를 띄어줍니다. 일반적인 프로그램의 모양새는 아닌 거 같습니다. 문제 이름에서 유추할 수 있듯이 패킹된 프로그램 같습니다. 문제 자체만 해결하면 크게 어렵지 않지만, 조금의 분석을 하면서 프로그램을 디버깅해봅시다. 첫 번째 반복문입니다. DS:[ECX]와 10,20,30,40,50을 XOR 연산하고 ECX를 1 증가시키고 ECX와 EDX를 비교해서 같을 때까지 반복하고 같다면 0x0040A0C3으.. 더보기
[Dice CTF 2021] flippidy Binary 분석 Canary, NX가 설정되어있고, Full RELRO가 되어있다. Full RELRO이므로, GOT 영역을 쓸 수 없다. 다른 글들을 참고해보면 여러 방법이 있지만 __malloc_hook이나 __free_hook의 주소를 덮어서 공격을 했다. 프로그램을 실행하면, notebook의 크기를 입력받고 2가지의 기능을 선택할 수 있다. "add notebook", "flip notebook"이다. IDA로 각 기능을 분석하겠다. main 함수에서 notebook의 크기(=note_size)를 입력받았고, 해당 크기에 맞게 malloc( ) 함수를 통해 heap_addr를 저장한다. v1에 heap_addr + 8 * idx 값을 저장하고, 해당 주소에 0x30 만큼 동적 할당한다. 생성된.. 더보기
[Dice CTF 2021] babyrop 0. Binary 분석 64bit 바이너리에 NX bit가 설정되어 있고, 그 외의 보안 기법은 설정되어 있지 않다. write( ) 함수로 "Your name: "을 출력하고, gets( ) 함수로 변수를 입력받고 프로그램이 종료되는 간단한 함수다. 1. 취약점 분석 gets( ) 함수에서, 변수에 길이제한 없이 입력받기 때문에 "버퍼 오버플로우" 취약점이 발생한다. 80글자의 문자열을 입력하면 RIP를 덮어서 흐름을 제어할 수 있다. 2. Exploit 작성 문제 이름처럼, ROP를 이용하면 될 것 같다. 취약점 자체는 쉬웠지만, 익스플로잇을 작성하는데 어려움을 겪었다. 일단 쉘을 획득하기 위해 write( ) 함수를 이용하여, write나 gets의 주소를 leak해서 system( )이나 exec.. 더보기