| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- XAMPP
- PHP 개발환경
- 피자나눠먹기2
- phpreg
- 네트워크
- 드림핵
- 나머지구하기
- XAMPP설치
- dreamhack
- 리버싱
- 프로그래머스
- 리눅스마스터2급
- 파이썬
- 웹
- 문제풀이
- 리눅스마스터
- 리눅스
- 웹해킹
- 더 메뉴
- php
- 피자나눠먹기3
- web
- 아파치
- sql_injection
- OSI 7계층
- XSS
- webhacking
- 짝수는싫어요
- 중앙값구하기
- 피자나눠먹기1
- Today
- Total
목록전체 글 (49)
이것저것
문제 설명이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요! 획득한 입력값은 DH{} 포맷에 넣어서 인증해주세요. 예시) 입력 값이 Apple_Banana일 경우 flag는 DH{Apple_Banana}exe 파일 실행먼저 제공된 exe 파일을 명령 프롬프트로 실행하였다.프로그램을 실행하자 Input : 이라는 문구와 함께 문자열을 입력받는 것을 확인할 수 있었다. 임의의 문자열인 apple을 입력하자 Wrong이 출력되었다.IDA를 이용한 바이너리 분석정답 문자열을 찾기 위해 IDA를 실행하고 문제에서 제공된 EXE 파일을 불러왔다.파일을 분석하자..
1. 스택이란?스택(Stack)은 데이터를 임시로 저장하기 위해 사용하는 메모리 영역이다.함수가 호출될 때 함수의 반환 주소, 저장해야 하는 레지스터, 지역 변수 등의 정보를 관리하는 데 사용된다.스택은 일반적으로 높은 주소에서 낮은 주소 방향으로 성장한다.높은 주소┌─────────────────┐│ ││ Stack ││ │├─────────────────┤│ ││ ↓ ││ 낮은 주소 │└─────────────────┘스택의 현재 위치를 가리키는 레지스터가 RSP다.RSP → 현재 스택 위치2. 스택 프레임이란?함수가 실행되면 해당 함수가 사용할 공간이 스택에 만..
1. 함수 호출 규약이란?프로그램에서 함수가 호출될 때는 단순히 call 명령어만 실행되는 것이 아니다.함수에 전달할 값을 어디에 넣을지, 반환값은 어디에 저장할지, 함수 실행이 끝난 뒤 스택을 누가 정리할지 등에 대한 규칙이 필요하다.이러한 함수 호출에 대한 약속을 호출 규약(Calling Convention)이라고 한다.리버싱에서는 호출 규약을 알고 있어야 다음과 같은 코드를 보고 함수의 인자와 반환값을 추측할 수 있다.함수 호출 ↓인자 전달 ↓함수 실행 ↓반환값 전달 ↓호출 이후 정리2. cdeclcdecl은 전통적인 32비트 x86 환경에서 많이 사용되는 호출 규약이다.함수의 인자는 일반적으로 오른쪽 인자부터 스택에 넣는다.예를 들어 다음과 같은 함수가 있다.int add(int a..
1. x86 레지스터 구조레지스터는 CPU 내부에서 데이터를 임시로 저장하거나 주소와 실행 위치 등을 관리하는 매우 빠른 저장 공간이다.x86 계열에서는 CPU의 발전에 따라 레지스터가 16비트, 32비트, 64비트로 확장되었다. 대표적으로 AX → EAX → RAX와 같은 관계를 가진다.RAX└── EAX └── AX ├── AH └── AL64비트 환경에서 자주 사용하는 레지스터는 다음과 같다.레지스터주요 역할RAX계산 결과, 함수 반환값RBX일반적인 데이터 저장RCX데이터 저장, 함수 인자RDX데이터 저장, 함수 인자RSI데이터 및 함수 인자RDI데이터 및 함수 인자RSP현재 스택의 위치RBP스택 프레임의 기준점RIP다음에 실행할 명령어의 위치특히 리버싱에서는 RSP,..
프로그램은 어떻게 실행이 되는가C언어로 프로그램을 작성했다고 해서 바로 실행할 수 있는 것은 아니다. 우리가 작성한 소스 코드는 사람이 이해하기 쉬운 형태이기 때문에 CPU가 바로 실행할 수 없다. 그래서 소스 코드를 CPU가 실행할 수 있는 형태로 차례대로 변환하는 과정이 필요한데, 이것이 프로그램의 빌드 과정이다.전체적인 순서는 다음과 같다..c↓전처리↓.i↓컴파일↓.s↓어셈블↓.o↓링크↓.exe 전처리가장 먼저 전처리(Preprocessing)가 진행된다. 예를 들어 다음과 같은 코드가 있다.#include int main() { printf("Hello"); return 0;} 여기서 #include처럼 # 으로 시작하는 전처리 지시문을 처리하고, #define 같은 매크로나 조건부 컴..
컴퓨터는 크게 3가지로 구성되어 있다. CPU, 메모리, 디스크 CPUCPU(중앙처리장치)는 컴퓨터에서 실제 연산과 명령어 처리를 담당하는 핵심 장치이다. 핵심 개념역할 : 프로그램의 명령어를 해석하고 실행하는 컴퓨터는 두뇌 역할클럭(Clock) : CPU 속도는 헤르츠(Hz) 단위의 클럭 수로 표현되며, 1초에 몇 번의 명령어 사이클을처리할 수 있는지를 나타냄 오버클럭(Overclock)제조사가 설정한 기본 클럭보다 강제로더 높여 성능을 끌어올리는 것처리 속도는 빨라지지만, 발열 및 전력 소모가 늘고 CPU에 과부화가 걸릴 위험이 있음 CPU와 다른 구성요소의 관계CPU는 메모리에서 명령어와 데이터를 읽어와 처리하고, 결과를 다시 메모리나 디스크에 저장한다. 즉, CPU 단독으로 동작하는 게 아니라 메..
문제 설명어딘가 이상한 로그인 서비스입니다.SQL INJECTION 취약점을 통해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다.chatGPT와 함께 풀어보세요!문제 화면문제 코드 분석로그인은 아래 코드에서 처리된다.userlevel = request.form.get('userlevel')res = query_db(f"select * from users where userlevel='{userlevel}'") 사용자가 입력한 userlevel 값이 SQL문에 그대로 삽입된다.예를 들어 0을 입력하면 실제 서버에서는 다음과 같은 SQL이 실행된다.SELECT * FROM users WHERE userlevel='0' 하지만 입력값을 조작하면 원하는 SQL 구문을 삽입할 수 있다...
문제 설명로그인 서비스입니다.SQL Injection 취약점을 통해 플래그를 획득하세요.플래그는 flag.txt, FLAG 변수에 있습니다.플래그의 형식은 DH{...} 입니다.문제 화면 문제 코드 분석로그인 기능은 아래 코드에서 처리된다.res = query_db(f'select * from users where userid="{userid}" and userpassword="{userpassword}"') 사용자가 입력한 userid 와 userpassword 값이 그대로 SQL 쿼리에 삽입되는 것을 확인할 수 있다.예를 들어 아래와 같이 입력하면userid = adminuserpassword = admin 실제로는 다음과 같은 SQL이 실행된다.select * from users where user..
