일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 김성엽 대표님
- 백준 파이썬
- htmlspecialchars
- IF문
- sql injection
- xss game
- 파이썬
- burp suite
- python
- 배열
- 자바스크립트
- github
- suninatas 풀이
- xss game 풀이
- 메소드
- Pwndbg
- element 조회
- jQuery
- object
- document
- 조건문
- 사칙연산
- lord of sql injection
- 포인터
- window
- blind sql injection
- 백준 알고리즘
- property
- 함수
- 객체
- Today
- Total
목록War game/pwnable.kr (14)
power-girl0-0
(☞゚ヮ゚)☞ 안녕하세요 ☜(゚ヮ゚☜) 1. 문제 flag라는 바이너리 파일이 주어진다. 2. 풀이 ghidra 툴을 이용해서 디컴파일해보면, 아래와 같은 문자열을 확인할 수 있다. UPX로 패킹된 바이너리 파일이라는 의미이다. 따라서, 해당 바이너리 파일을 언패킹해야한다. 언패킹하니, 파일 사이즈가 커진 것을 확인할 수 있다. 이제, 언패킹된 바이너리 파일을 ghidra로 열어보자. 해당 파일에는 main함수가 존재하고, thunk_FUN_00400326함수의 인자값으로 flag라는 변수가 들어가 있다. flag라는 전역변수를 확인해보면, 아래와 같이 어떤 문자열이 존재한다는 것을 알 수 있다. 해당 문자열이 다 보이지 않으므로, 복사해서 메모장에 붙여보면 flag값을 확인할 수 있다. 3. flag ..
안녕하세요~~ (∩^o^)⊃━☆ 0. 풀기 전, 공부하고 오기! C언어 "포인터 배열"을 잘 이해하고 있다면, 쉽게 문제를 풀 수 있을 것이다. 1. 문제 문제에서 주어진 C언어 코드이다. #include #include unsigned long hashcode = 0x21DD09EC; unsigned long check_password(const char* p){ int* ip = (int*)p; int i; int res=0; for(i=0; i
해당 문제는 디컴파일하지 않고, c언어 코드만 보고 풀 수 있는 문제이다. 본 글에서는 간단한 풀이 방법을 작성한다. 1. 공격 code 생성전, 알아가기! (1) subprocess 새로운 프로세스를 생성하며, 이를 통해 입출력 파이프에 연결하고 반환 코드를 얻을 수 있는 모듈이다. ( 참고 : https://blog.naver.com/sagala_soske/221280201722 ) 2. 문제 코드 문제의 c언어 코드이다. #include #include #include #include #include int main(int argc, char* argv[], char* envp[]){ printf("Welcome to pwnable.kr\n"); printf("Let's see if you know..
해당 글은 공부한 것을 기록해서, 향후 참고하기 위해 쓴 글입니다. 자세한 설명이 적혀있지 않더라도 이해바랍니다. 1. Code 이해하기 전, 알고가기! (1) seccom 정의 리눅스에서 sandbox기반으로 시스템콜을 허용 및 차단하여, 공격의 가능성을 막는 리눅스 보안 메커니즘이다. (2) setvbuf 지정한 스트림을 위한, 버퍼링 형식과 버퍼 크기 제어를 허용하는 함수이다. ① _IONBF : 버퍼를 사용하지 않는다. ② _IOLBF : 행버퍼링으로, 출력할 때 버퍼가 꽉 차거나 개행문자가 입력되면 문자가 출력된다. (3) mmap 메모리 내용을 파일이나 디바이스에 대응(mapping)하기 위해서 사용하는 시스템 콜이다. 프로세스의 가상 메모리 주소 공간에 파일을 매핑한 뒤, 가상 메모리 주소에..
안녕하세요. 간결한 풀이입니다. (๑•̀ㅂ•́)و✧ 1. 문제 문제에 접속하면, 아래와 같이 코드와 바이너리를 다운로드 할 수 있는 링크가 주어진다. 코드는 아래와 같다. #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme); // smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; } 2. 풀이 func함수 코드를 살펴보면, key값이 0xcafebabe일..
안녕하세요! ლ(╹◡╹ლ) 풀이 간단히 적고 가겠습니다~~ 1. 문제 문제에 주어진대로 접속하면, 존재하는 3개의 파일을 확인할 수 있다. fd.c파일을 열어 c언어 코드를 확인할 수 있다. 2. 풀이 c코드를 분석해보면, 아래와 같은 조건을 확인할 수 있다. 1. 입력받은 인자값에서 0x1234 뺀 값을 read함수의 fd 위치에 넣어준다. 2. read함수를 통해, 입력받은 값이 LETMEWIN이라는 문자일 경우, flag를 획득한다. 즉, fd의 값을 0으로 만들어서, read함수가 표준입력 역할을 수행하도록 만들면 된다. ※ fd (file descriptor) : 리눅스나 유닉스에서 프로세스가 파일을 다룰 때 사용하는 개념 ⇨ 0 : 표준입력 ⇨ 1 : 표준출력 ⇨ 2 : 표준에러 따라서, 0x..