Write-up 55

[Dreamhack] basic_exploitation_000

개요 요즘 pwnable에 빠져있다. 간간히 임베디드와 리버싱 그리고 프로젝트를 진행하면서 블로그에 정리할 예정이다. 오늘 풀이할 문제는 Dreamhack의 Systemhackig 과정에 있는 문제이다. 전반적으로 풀면서 pwnable에 대해 익히는 계기가 됐다. 문제 파일을 다운받으면, 바이너리 파일과 소스코드를 준다. 소스코드부터 보자. 풀이 #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handl..

Write-up/Wargame 2024.03.24

[Dreamhack] ReturnAddressOverwrite

개요 수준 유지를 하고자 요즘 드림핵을 다시 시작했다. 기본적으로 바이너리 파일과 소스코드를 준다. 바이너리 파일을 보기 전에 소스코드부터 보자. // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf..

Write-up/Wargame 2024.03.22

[pwnable.kr] fd

[Pwnable.kr] fd 문제 ssh로 pwnable.kr 서버 포트 2222로 접속하라고 한다. 해주자 분석 병적으로 ls를 쳤더니 flag파일이 있었다. 그러나 저 파일은 권한이 440으로 guest로 진입한 내 계정으로는 볼 수 없는 파일이다. fd를 실행해보면 이렇게 리눅스 파일의 입출력에 대해 공부하라고 나온다. 아쉬운대로 fd.c파일을 보자 vim으로 보면 한눈에 확 들어온다. 1 #include 2 #include 3 #include 4 char buf[32]; 5 int main(int argc, char* argv[], char* envp[]){ 6 if(argc 23562 여기서는 프로그램 실행시 인자를 받을때 문자열 형태로 받으니 이를 숫자로 변환해주려고 하는 것이다. 다음은 re..

Write-up/Wargame 2023.11.12

[Dreamhack wargame] rev-basic-4

[Dreamhack] rev-basic-4 문제 분석 프로그램 실행 프로그램을 받아서 실행했더니, 역시나 바로 종료된다. ida pro ida pro를 이용해서 파일을 보자. 나는 프로그램을 실행했을 때, 나타나는 문자열을 검색해서 해당 부분의 코드들을 볼 것이다. 처음에는 start 함수가 나온다. [shift + f12]를 사용해서 문자열 검색을 해보자. "Correct"이 보인다. 더블클릭해서 들어가서, 해당 문자열을 참조하는 코드를 보기 위해 [x]키를 눌러 들어간다. 코드분석: sub_140001130() __int64 sub_140001130() { char v1; // [rsp+20h] [rbp-118h] memset(&v1, 0, 0x100ui64); sub_1400011C0("Input ..

Write-up/Wargame 2023.11.12

[Dreamhack wargame] rev-basic-3

문제 분석 프로그램 실행 프로그램을 받아서 실행했더니, 바로 종료된다. ida pro ida pro를 이용해서 파일을 보자. 나는 프로그램을 실행했을 때, 나타나는 문자열을 검색해서 해당 부분의 코드들을 볼 것이다. [shift + f12]를 사용해서 문자열 검색을 해보자. "Input:"이 보인다. 더블클릭해서 들어가보자. 여기서 Input: 부분을 누르고, 해당 문자열을 참조하는 코드를 보고 싶으므로 [x]키를 눌러보자 들어간다. [f5]을 누르면 어셈블리어가 C언어로 보기 쉽게 바뀐다. 코드분석: sub_140001120() __int64 sub_140001120() { char v1; // [rsp+20h] [rbp-118h] memset(&v1, 0, 0x100ui64); sub_1400011B..

Write-up/Wargame 2023.09.04

Abex's Crackme #4

문제 분석 프로그램이 실행되는 Entry 부분부터 보자 여기서 한줄 실행 F8을 누르며 실행을 하다보면 창이 뜨게 된다. 그 창에는 어떤 값을 입력해도 Registered 버튼이 활성화되지 않는다. 예측 버튼이 활성화하기 위해선 시리얼번호가 어느 형식과 비교하여 유효한 시리얼번호라면 Registered 버튼이 활성화되고 원하는 결과를 띄우는 창이 나타날거 같다. 풀이 시리얼번호를 비교할 만한 함수들을 찾아본다. 문자열비교 함수는 Strcmp이므로 해당 함수를 찾아서 보자. 바로 이 부분인데, 프로그램을 실행을 해보자 이렇게 시리얼을 입력하려하면 ECX의 값이 순간 바뀌게 된다. 아마도 EAX는 시리얼입력값이고 ECX는 시리얼비교하는 값인 것 같다. 2223100을 시리얼번호란에 넣으면 될 것 같다. ) 완료

Write-up/Wargame 2021.04.27

백준 1002번 - 터렛

문제 풀이 이 문제는 크게 4가지의 경우로 나뉜다. 두개의 원이 두 점에 접할 경우(2) 두개의 원이 한 점에 접할 경우(1) 두개의 원이 접하지 않을 경우(0) 두개의 원이 같을 경우(∞) 1. 두개의 원이 두 점에 접할 경우 문제에 나와있는 예제 입력을 가지고 그래프를 그릴 수 있다. 이렇게 두 원점 사이의 거리(distance)가 두 원의 반지름 길이의 합(radius)보다 짧을때 두개의 원이 두 점에 접할 수 있다. 2. 두개의 원이 한점에 접할 경우 외접할 때 두 원점 사이의 거리(distance)이 한 원의 반지름(r1) + 다른 원의 반지름(r2)일 경우 외접하면서 두개의 원이 한 점에 접한다. 내접할 때 두 원점 사이의 거리(distance) + 한 원의 반지름 = 다른 원의 반지름일 경우..

Write-up/백준 2021.01.10