전체 글(362)
-
리버싱 실전 | 워게임 풀이 - Ubuntu Linux
- main 파일 분석 (반복문 전) 우선 main 파일 분석이 우선일 것 같아 메모장에 적어가며 분석했습니다. s : 사용자가 입력한 문자열이 들어가는 string형 변수 0x555555755080 dest : s가 복사될 변수 0x5555557550c0 n : s의 길이가 담겨있는 변수 a : rbp-4 b : rbp-8 c : rip+0x2076c d : rip+0x2007dd 1. read 0, s, 0x31가 인자로 들어간 상태에서 입력을 받습니다. +) read 함수는 자세하게 분석 하지 않아도 될 것 같아서 딱 여기까지만 하고 끝냈습니다 2. strlen 사용자가 입력한 s라는 문자열의 길이를 반환합니다. +) 이것 역시 이정도 정의만 생각해놓고 생략 3. strcpy strcpy에 dest..
2021.05.31 -
pathtraversal 풀이
코드를 보면 Flag is here!!이라는 주석이 붙어있는 부분이 있습니다. 파일의 이름이 flag.txt 라는 정보를 얻었습니다. 또한, 문제에서는 "api/flag에 있는 플래그를 획득하세요!"라고 했으니 URL에서 맨 뒷부분을 ../flag로 바꿔줘야 플래그를 찾을 수 있을 겁니다. 우선 guest, admin, ../flag로 입력을 했을 때 각각 어떤 결과가 나오는지 보겠습니다. 이 웹사이트의 동작 구조는 위처럼 3개로 나뉜다 볼 수 있을 것 같습니다. 그리고 ../flag가 아니라 다른 입력값을 입력 해도 똑같이 undefined로 출력이 나왔습니다. 아무래도 admin이랑 guest 외에는 전부 undefined로 출력하라고 코딩이 되어있는 것 같습니다. 딱 여기까지 알아내고 5분 정도 별..
2021.05.29 -
pwndbg로 C 소스파일 분석하기 - Ubuntu Linux
- 사전 준비 #include int test(int num){ if (num == (100%260)){ return 1; } return 0; } void win(int a, int b, int c, int d, int e){ printf("good\n"); } void lose(){ printf("bad\n"); } int main(){ int num; int res; printf("Enter Num : "); scanf("%d", &num); res = test(num); if (res == 1){ win(1,2,3,4,5); } else if (res == 0){ lose(); } return 0; } 우선은 vim을 사용하여 위와 같은 내용의 소스파일을 만들고 ESC -> :wq로 저장을 해줍니..
2021.05.26 -
X64 레지스터에 대하여
- X64란? Intel, AMD의 64bit CPU가 사용하는 ISA를 뜻합니다. X86 ISA의 상위 호환이라 보면 됩니다. X64의 다른 이름은 아래와 같이 3가지가 있습니다. X86-64 AMD64 Intel64 - X64 레지스터의 크기 구조 여기서 dword(32)라고 써져있는 부분까지는 위에서 말한 X86 레지스터입니다. qword(64)까지가 우리가 주로 보고 있는 X64 레지스터입니다. X64 레지스터는 여러가지로 나눠집니다. 범용 레지스터 (범용으로 쓰이는 레지스터) 인덱스 레지스터 (주소와 관련된 레지스터) 포인터 레지스터 (특정한 위치를 가리키는 레지스터) 이 세 가지의 레지스터는 아래에서 자세하게 설명하겠습니다. 설명은 괄호 안과 뒤에 추가적으로 적어놓겠습니다. - 범용 레지스터,..
2021.05.21 -
pwndbg 명령어 정리 - Ubuntu Linux
r : 실행하기 CTRL + c : 실행 중단 q : 종료 c : continue reload : pwndbg reload ni, si : 한 줄씩 코드 진행, 함수 내부 까지 b *[주소값] : break point help all에 관해서는 추가적으로 쓰지 않겠습니다.
2021.05.17 -
실행파일이 만들어지는 과정 - Ubuntu Linux
- 리눅스란 무엇일까? 리눅스는 윈도우와 같은 OS의 한 종류입니다. 차이점이 있다면 윈도우는 사용자 친화적인 OS이고, 리눅스는 컴퓨터 친화적인 OS입니다. 윈도우는 굉장히 간편한 UI와 사용법이 특징이기에 사용자 친화적인 OS라 하는 것이고, 리눅스는 UI가 복잡하며, 거의 모든 것을 명령어로 해결해야한다고 봐도 무방합니다. 또한, 리눅스는 어셈블리 언어로 되어있기 때문에 윈도우보다 더욱 세부적인 내용을 다룰 수 있습니다. - 리눅스와 윈도우에서의 C 소스코드 컴파일 컴파일러나 환경, 앱 종류에 따라 달라지겠지만 윈도우의 Dev C++을 기준으로 설명하겠습니다. 우리가 소스코드를 작성하고 실행을 하려면 컴파일이라는 과정을 거쳐야 합니다. 그리고 컴파일을 하기 위해선 컴파일러가 필요합니다. 또한, 컴파..
2021.05.16