본문 바로가기

분류 전체보기

(177)
gdb 활용 코드 분석 (1) 분석할 코드 코드를 짧게 설명해보면 function에서는 buffer1이 15크기를 가지고 buffer2가 10크기를 가지게 만들어주고 있고, 메인에서는 function에 매개변수로 1, 2, 3을 넣어주고 있다. (2) 분석 내용 gcc로 32비트 컴파일 해주고 gdb를 실행시켰다. [기타 배경지식] 어셈블리어 sub에 esp가 인자로 오면 공간을 확보해주는 것이고, add에 esp가 인자로 오면 공간을 반환해주는 것이다. 프롤로그와 에필로그가 있는데, 프롤로그는 push ebp, move ebp,esp 이고, 에필로그는 leave, ret 이다. function을 디스어셈블해줬더니 위와 같이 나왔다. 위에 2줄이 프롤로그 부분이고, 코드 부분 맨 밑 2줄이 에필로그인 걸 알수 있다. 프롤로그 ..
GDB 사용방법 [1] GDB란? -> GNU Debugger의 약자로 오픈소스로 공개되어 있는 무료 디버거이다. -> 설치 방법은 sudo apt-get install gdb 입력 *gdb-peda를 이용하면 더 편리하게 볼 수 있다. 설치방법은 git clone https://github.com/longld/peda.git ~/peda echo "source ~/peda/peda.py" >> ~/.gdbinit 위 2줄을 입력하는 것이다. [2] 명령어 -> b *[메모리 주소/함수이름/offset] : breakpoint를 거는 명령어 -> continue : 다음 breakpoint까지 실행하는 명령어 -> info b : breakpoint 정보를 확인하는 명령어 -> d (brdakpoint 번호) : bre..
[pwnable.kr] collision 문제 풀이 ssh col@pwnable.kr -p2222 (pw:guest) 로 우분투에서 접속했다. 그 후 ls -li로 어떤 파일들이 있는지 확인했다. 3개가 있는데 flag는 col 계정으로는 못 읽는다. 짐작해보면 특수 권한이 있는 col 파일로 flag를 읽어야 할 것 같다. 일단 col.c가 col의 소스코드로 보이니 cat으로 읽어보자. 일단 hashcode가 0x21DD09EC 이다. check_password(const char* p) 함수에서는 반복문으로 int형 4byte씩 더해주어 res변수에 저장하고 있는 걸 알 수 있다. main에서는 조건문들을 봤을 때 매개변수의 길이가 20이 아닌 걸 입력하면 "passcode length should be 20 bytes"를 출력할 것 같고, hash..
setuid 개념 정리 -- 과제1 -- Setuid란? - 사용자가 실행 파일을 실행할 때 소유자의 권한으로 실행하는 권한이다. set-user-id로 ls -l로 볼 때 s로 표시된다. setuid가 설정된 파일 실행 시, 일시적으로 파일 소유자의 권한을 얻어 실행할 수 있게 된다. - 사용법 예시 #chmod u+s 파일이름 #chmod 4755 파일이름 - 대표적인 setuid 파일 : /usr/bin/passwd ->비밀번호 변경을 할 수 있는 명령어 - 실행권한을 확인했을 때 대문자 S일 경우 setuid만 있고 실행권한 x / 소문자 s일 경우 setuid와 실행권한 둘 다 o -- 과제2 -- which id로 어디에 있는지 찾는다. -> cp로 id_1이라는 이름으로 복사해온다. -> ls로 잘 복사되었는지 확..
[2주차 과제] swing_pwn_chall 풀이 apt-get update apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential python3 -m pip install --upgrade pip "pip
pwntools 사용법 및 기능 (1) pwntools란? - 리눅스 환경에서 익스플로잇을 쉽게 짤 수 있도록 해주는 파이썬 라이브러리이다. - 공식 Github 주소 : https://github.com/Gallopsled/pwntools (2) pwntools 설치 sudo apt update sudo apt install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential sudo python3 -m pip install --upgrade pip "pip < 21.0" sudo python3 -m pip install --upgrade pwntools 4줄을 차례대로 리눅스 터미널 창에 입력해주면 된다. 3번째 줄에서 "pip < 21.0" 코드를 꼭..
리눅스 메모리 구조 (1) 코드(텍스트) 영역 -> 유저가 작성한 소스코드가 들어가는 영역으로 이곳의 명령 실행 순서는 차례대로 진행되지 않는다. 그*순서를 맞추기 위해 EIP(명령 포인터) 레지스터를 이용한다. -> 이곳에는 진짜 코드만 저장하고 있기 때문에 쓰기가 불가능하고 읽기만 가능하다. (2) 데이터 영역 -> 초기값이 있는 전역(global)변수와 정적(static)변수 등이 할당된다. -> 프로그램 시작과 동시에 할당되며, 프로그램이 종료될 때 메모리가 소멸된다. (3) BSS 영역 -> 초기값이 없는 전역(global)변수와 정적(static)변수, 0이나 NULL로 초기화된 변수들이 할당된다. -> 이변수들에게 어느 정도의 메모리를 할당할 것이라는 정보를 저장한다. -> 이후 런타임 시스템이 여기 변수들을 ..
[Reversing] CodeEngn Basic RCE L17 보호되어 있는 글입니다.