본문 바로가기

스터디/SWING 포너블

(9)
[pwnable.kr] bof 접속해보니 아무것도 뜨지 않았고, 무언가를 입력하니 overflow me: 라는 글과 함께 Nah.. 가 뜨고 접속이 끊겼다. 전처럼 바로 파일을 확인할 수 있는 것이 아니라 wget(Web Get)을 사용해서 웹 상의 파일을 다운 받아 봐야겠다. 다운을 받았으니, 당연히 소유자는 나이고, bof.c의 소스코드를 보고, bof를 실행해봐야겠다. bof에 실행권한을 주고, 실행해보니 살짝 아까랑 다른 것 같았다.... 접속 후 입력해준 값을 넣어서 bof 를 실행하는 것 같다. 소스코드를 보니, key가 cafebabe가 되도록 해줘야 하는데, gets로 overflowme배열에 값을 받아주는 곳에서 오버플로우를 발생시켜서 공격하면 된다고 친절히 설명이 있었다. 메모리 내에서 overflowme배열로부터의..
GDB로 분석하는 과정 분석할 코드 main함수를 실행하고, main함수 내에서 1, 2, 3 인자 값을 가지고 function함수를 실행한다. func함수 내에서 buffer1과 buffer2를 선언한다. (char변수는 1byte 씩이니까 buffer1은 15 bytes, buffer2는 10 bytes크기를 가진다.) GDB로 분석 main함수 부분의 어셈블리 코드(리눅스 메모리 구조에서 코드가 들어가는 Text영역에 존재) 이 코드도 코드 세그먼트 위치에 있음. 정리해보자면, 현재상태는 Stack 환경변수, argc, argv 포인터 전역변수를 선언해준 적이 없으므로 Data 영역에는 아무 것도 없는 상태. Text영역에는 위의 코드들(main함수의 코드들과 function함수의 코드들)이 있는 상태 EIP : 앞으로 ..
GDB 사용방법 GDB(GNU Debugger) : 오픈소스로 공개되어 있는 무료 디버거 디버거 : 명령어가 실행될 때, 어떤 값이 어떤 메모리 주소에 올라가고, 어떤 레지스터가 사용되고 있고, 어떻게 동작하는지를 보여줌. GDB 명령어 b *[메모리 주소/함수이름/offset] breakpoint 걸기 continue 다음 브레이크 포인트까지 실행 si 명령어 한 줄씩 실행 info b breakpoint 정보 확인 info register 모든 범용 CPU 레지스터의 내용 표시 d (breakpoint 번호 ex. 1, 2, 3, ) breakpoint 삭제 run(혹은 r로 사용) gdb 내부에서 프로그램을 실행(break point가 걸려있다면 그 지점 전까지만 실행됨) disass (함수의 이름 혹은 주소) 함..
collision 문제 풀이 문제 MD5해시의 충돌..일단 접속해보자. 풀이 접속해보니 프로그램(col), 소스코드(col.c), flag 가 있었다. flag파일의 소유자는 col_pwn이고, 권한 설정이 4550이므로 root와 col_pwn만 flag파일을 읽을 수 있는데, col 파일이 Set-UID 프로그램이므로 col의 실행 시, col 파일의 소유자인 col_pwn의 권한으로 실행된다. 따라서 col의 실행내용 중에 flag를 읽는 과정이 있다면, 원래 flag파일을 읽을 권한이 없는 col이 col파일 실행을 통해 일시적으로 col_pwn의 권한을 갖게되어 flag를 읽을 수 있다. col.c 파일을 확인해보면, 조건 만족 시 flag를 읽는 코드가 있다. 따라서 col파일 실행 시 flag를 출력하는 조건을 만족시키..
Set-UID 프로그램으로 만들기 - id 명령, cat 명령 id 명령 현 시점에 시스템 사용자의 정보를 보여준다. 1. id 의 위치를 which를 이용해서 찾는다 2. 해당 파일을 바탕화면으로 복사해온다.(현재 파일의 소유자 : yeji) 3. chown root myid로 myid파일의 소유자를 root로 바꾼다.(현재 파일의 소유자 : root) 4. chmod 4755 myid로 myid에 특수권한을 부여(Set-UID프로그램으로 설정)한다.(현재 파일의 상태 : setuid) [결과] myid를 실행하면, real user id는 yeji(프로그램을 실행한 사용자)이고, effective user id(myid의 프로세스가 가진 권한)는 root(값은 0)이다. RUID != EUID cat 명령 1. cat 의 위치를 which를 이용해서 찾는다 2...
setuid 개념 정리 프로세스 구성 요소 PID : 프로세스를 구별 PPID : 부모 프로세스(프로그램을 실행한 프로세스)의 PID UID(RUID) : 프로그램을 실행한 사용자 ID [ GID(RGID) : 프로그램을 실행한 사용자의 기본 그룹의 GID ] EUID : 프로세스가 가지는 권한. 대개는 UID와 EUID가 동일. [EGID] Set-UID 프로그램 X (setuid를 설정하지 않은 파일) UID(RUID) : 파일을 실행하는 사용자에 따라 변경됨 EUID : 파일을 실행하는 사용자에 따라 변경됨 RUID == EUID Set-UID 프로그램 (setuid를 설정한 파일) UID(RUID) : 파일을 실행하는 사용자에 따라 변경됨 EUID : 해당 파일의 소유자 RUID != EUID root가 owner인 S..
swing_pwn_chall 풀이 풀이1> 풀이2> 한 번만 읽기
pwntools 사용법 및 다양한 기능 정리 pwntools pwntools에는 취약점이 있는 함수를 찾아내고, 프로그램 메모리 구조를 이용한 공격을 수행하기 위한 함수가 있어, 시스템해킹을 비교적 간단하게 할 수 있도록 돕는다. pwntools는 원래 exploit writing DSL로 사용되었다. 2.0으로 재설계하면서 다음 두 가지로 모듈을 나눴다고 한다. pwn - CTF에서 사용 pwnlib - 일반적인 python 라이브러리. *DSL (domain-specific language, mini-language) : 특정 영역에 특화된 언어로, HTML, SQL 이 그 예시에 속한다. 반대 개념은 GPL(general-purpose language)로 마크업 언어로는 XML이, 프로그래밍 언어로는 C, C++, Java, PHP, Pyth..