1. 기본 도커 구축
현재 docker hub 이미지 이름 : greedun/rd_pwn:240629_2
[환경 구성]
ubuntu버전
- (24.06.29) 24.10
설치할 패키지
- net-tools, gdb -> beta-gef, python3, python3-pip, one_gadgets, adduser, sudo, git, wget,
openssh-server, curl, vim, fontconfig
1-1. zsh 설정
(1) zsh, oh my zsh설치
=> https://blackinkgj.github.io/zsh-installation/
(설치 : zsh -> oh my zsh)
# zsh설치
sudo apt install -y zsh
chsh -s `which zsh`
# oh my zsh설치
curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh
(zsh 테마 설정)
=> https://devocean.sk.com/blog/techBoardDetail.do?ID=165667&boardType=techBlog
테마 : Powerlevel10k
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc
source ~/.zshrc
(2) 폰트 설정
=> https://velog.io/@osk3856/UbuntuFonts
(설치 : naver 나눔 -> d2coding)
# naver 나눔 설치
curl -o nanumfont.zip http://cdn.naver.com/naver/NanumFont/fontfiles/NanumFont_TTF_ALL.zip
# d2coding설치
wget https://github.com/naver/d2codingfont/releases/download/VER1.3.2/D2Coding-Ver1.3.2-20180524.zip
sudo unzip -d /usr/share/fonts/d2coding D2Coding-Ver1.3.2-20180524.zip
rm D2Coding-Ver1.3.2-20180524.zip
(폰트 캐시 갱신 및 목록 확인)
// 폰트 캐시 갱신
sudo fc-cache -f -v
// 사용가능한 폰트 목록 확인
fc-list | grep -i nanum
fc-list | grep -i d2c
(3) vim 설정
(vim plugin 설치)
=> https://khd0801.com/31?category=991537
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
(.vimrc 설정 - 테마 : gruvbox)
=> custimization
(https://khd0801.com/entry/vim-morhetzgruvbox-플러그인)
([https://github.com/morhetz/gruvbox](https://github.com/morhetz/gruvbox))
// /root/.vimrc
코드 길이가 너무 길어서 부록(1)에 옮겨놓음
1-2. 분석 도구 설치
1 - gdb_gef(bata24)설치
2 - pwntools설치
3 - one_gadget설치
(1) gdb_gef(bata24) 설치
=> https://github.com/bata24/gef
wget -q https://raw.githubusercontent.com/bata24/gef/dev/install.sh -O- | \
sed -e 's/pip3 install/pip3 install --break-system-packages/g' | sh
(주의점 : bata24는 root권한으로 실행되어야지 작동됨)
(2) pwntools 설치
apt-get install python3 python3-pip
pip3 install pwntools
=> but Error(2)가 발생했지만 구글에서 관련 사례를 찾아 해결
(https://velog.io/@mystic/맥북-Homebrew-python설치시-pip-문제)
(3) one_gadget 설치
apt-get install ruby
sudo gem install one_gadget
1-3. sudo 권한있는 유저 생성
adduser --disabled-password --gecos "" rd \
&& echo 'rd:rd' | chpasswd \
&& adduser rd sudo \
&& echo 'rd ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
=> rd라는 유저가 생성되고 sudo명령어를 쓸 수 있는 권한을 갖게 된다.
1-4. openssh-server 설치 후 컨테이너 내에 자동 실행 설정
[시행착오]
1 - systemctl
2 - /root/.bashrc내에 설정
=> 2가지 시행착오가 있었는데 둘다 성공은 했지만 2번째 방법이 더 간단하여 해당 방법으로 수행했다.
(1) systemctl
sudo systemctl enable ssh.service
but 일반적인 도커 환경에서는 systemctl이 막혀있음
-> 따라서 Error(4)방법으로 systemctl 작동 허용
(2) root폴더의 .bashrc설정(간편)
=> https://avangs.tistory.com/entry/우분투-부팅시-자동-웹서버서비스-실행하기
service ssh start
=> /root/.bashrc 파일 마지막에 해당 문구를 넣으면 됨
2. 도커 이미지 생성 후 docker hub에 업로드
1 - docker container를 image로 변환
2 - 생성한 image를 hub에 push
(1) docker container를 image로 변환
docker commit local_pwn greedun/rd_pwn:240629_2
(2) 생성한 image를 hub에 push
(docker hub에 로그인)
docker login
=> docker hub에 id,pw입력해서 로그인
(user id 변수 지정)
export DOCKER_ID_USER="greedun"
(docker images 태그 달기)
docker image tag bbdfeb98a771 greedun/rd_pwn:240629_2
(docker push)
docker push greedun/rd_pwn:240629_2
(주의점 : hub에 push할때 로그인된 사용자이름과 이미지에 들어간 이름이 동일해야한다.)
=> Error(3)에 해결과정 작성
3. 도커 이미지를 이용해서 가져와 컨테이너 구축
- 이미지 : "greedun/rd_pwn:240629_2"를 통해 컨테이너 구축
- 컨테이너 내부에
=> 해당 이미지 이름으로 도커를 바로 구축하면 됨
(test하기 위한 명령어)
- docker build -t {이미지 이름} .
- docker run -d -it -p {외부포트}:22 {이미지 이름}
- ssh rd@localhost -p {외부포트}
4. 환경 구축 확인
[체크리스트]
- rd유저가 존재하고 sudo su했을때 root권한으로 바뀌는지 확인
- sudo gdb => gef(bata24)로 실행되는가?
- python3내에 pwntools 실행가능?
(확인하는 사진 업로드)
Error list
1 - ssh 접속 에러
2 - python3-pip pwntools 설치 에러
3 - docker push 에러
4 - docker에서 systemctl 동작 안함
Error(1) - ssh 접속 에러
(ssh 접속 에러)
> ssh rd@localhost -p 24822
kex_exchange_identification: Connection closed by remote host
Connection closed by ::1 port 24822
=> ubuntu내에 ssh작동이 안되어 위 같은 에러가 발생한 거였다.
-> openssh-server 재작동 후 외부에서 ssh로 접속하면 된다.
Error(2) - python3-pip pwntools 설치 에러
❯ python3 -m pip install --upgrade pip ─╯
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.
See /usr/share/doc/python3.12/README.venv for more information.
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
=> 해결법 : https://velog.io/@mystic/맥북-Homebrew-python설치시-pip-문제
Error(3) - docker push 에러
The push refers to repository [docker.io/library/rd_pwn]
1cff55bd9f15: Preparing
af9a3aa7655a: Preparing
denied: requested access to the resource is denied
=> 해결법 : https://nirsa.tistory.com/53
=> 해당 에러가 발생한 이유는 push하려는 이미지 이름이 일치 하지 않았기 때문
Error(4) - docker에서 systemctl 동작 안함
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
sudo docker run -it -d --privileged=true --name "test_pwn" greedun/rd_pwn:240629 /sbin/init
=> --privileged=true를 옵션을 넣어서 컨테이너를 동작시키면 systemctl명령어가 동작된다.
부록
(1) - .vimrc파일(gruvbox)
"-----------------------------------------------------------------------"
" Vundle 환경설정
"------------------------------------------------------------------------"
filetype off " required!
set shell=/bin/bash
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle
" required!
Plugin 'VundleVim/Vundle.vim'
" vim 하단에 파일 정보 띄우기
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
"vim corlor/scheme
Plugin 'morhetz/gruvbox'
"
" ...
call vundle#end()
filetype plugin indent on " required!
"
" Brief help
" :BundleList - list configured bundles
" :BundleInstall(!) - install(update) bundles
" :BundleSearch(!) foo - search(or refresh cache first) for foo
" :BundleClean(!) - confirm(or auto-approve) removal of unused bundles
"
" see :h vundle for more details or wiki for FAQ
" NOTE: comments after Bundle command are not allowed..
"-----------------------------------------------------------------------"
"vim 환경설정
"-----------------------------------------------------------------------"
" Vim 전용 기능 사용
set nocompatible "Vim Using
"파일 타입 설정
set encoding=utf-8
set fencs=utf-8,cp949,cp932,euc-jp,shift-jis,big5,ucs-2le,latin1
" 명령어 기록 갯수
set hi=1000
" 백스페이스 사용
set bs=indent,eol,start
" 오른쪽 하단 커서 위치 항상 보이기
set ru "same ruler
" 줄번호 표시
set nu
" 줄 번호 표시 너비 설정
set nuw=5
" 탭 크기 설정
set ts=4 "same tabstop
set sw=4 "same shiftwidth
set sts=0 "same softtabstop
autocmd FileType make setlocal noexpandtab "Makefile은 tab 문법이기 때문에 스페이스 대체 안함.
" 탭 >> 공백 변환 사용안함
"set noet
" 자동 줄바꿈 안함
"set nowrap
set linebreak
set showbreak=+++\
" 들여쓰기 설정
set autoindent
set cindent
" 스마트 셋팅
set smartcase
set smarttab
set smartindent
" magic 기능 사용
set magic
" 이동 동작시 줄의 시작으로 자동 이동
set sol
" 비쥬얼 모드 동작 설정
set sel=exclusive
" 괄호짝 찾기에서 <> 도 찾도록 추가
set mps+=<:>
" 검색어 강조
set hls
" 검색시 파일 끝에서 되돌리기 안함
set nows
" 스마트한 대소문자 구별 기능 사용
set scs
"대소문자 구분(구분 없이 할 때 i 옵션 또는 ignorecase)
set noignorecase
" 항상 status 라인을 표시
set ls=2
"파일 형식에 따른 신택스 하이라이팅 켜기
sy enable
"괄호 매치
set showmatch
"마우스 자동
set mouse=a
"클립보드 복사
"set clipboard=unnamed "use OS clipboard
set clipboard=unnamedplus "use OS clipboard
" 키워드 입력시 점진적 검색
set incsearch
"----------------------------------------------------------------------"
" AirLine
"----------------------------------------------------------------------"
set laststatus=2
let g:airline#extensions#tabline#enabled = 1 "버퍼 목록 켜기
let g:airline#extensions#tabline#left_sep = ' '
let g:airline#extensions#tabline#left_alt_sep = '|'
" 파일명만 출력
let g:airline#extensions#tabline#fnamemod = ':t'
let g:airline_highlighting_cache = 1
let g:airline_powerline_fonts = 1
let g:airline_theme= 'minimalist'
"let g:airline_section_y = ''
"let g:airline_section_warning= '' "마지막 status창 사용 안함
" 버퍼 목록 켜기
" 이 옵션은 버퍼를 수정한 직후 버퍼를 감춰지도록 한다.
" 이 방법으로 버퍼를 사용하려면 거의 필수다.
set hidden
"----------------------------------------------------------------------"
" gruvbox 설정
"----------------------------------------------------------------------"
set background=dark
let g:gruvbox_contrast_dark = 'soft'
"let g:gruvbox_contrast_light = 'soft'
"let g:gruvbox_transparent_bg = '1'
let g:gruvbox_italic = 1
"let g:gruvbox_underline=1
"let g:gruvbox_undercurl=1
"let g:gruvbox_termcolors=16
"let g:gruvbox_number_column='aqua'
"let g:gruvbox_sign_column='aqua'
"let g:gruvbox_color_column='aqua'
" Force to use underline for spell check results
augroup SpellUnderline
autocmd!
autocmd ColorScheme *
\ highlight SpellBad
\ cterm=Underline
\ ctermfg=NONE
\ ctermbg=NONE
\ term=Reverse
\ gui=Undercurl
\ guisp=Red
autocmd ColorScheme *
\ highlight SpellCap
\ cterm=Underline
\ ctermfg=NONE
\ ctermbg=NONE
\ term=Reverse
\ gui=Undercurl
\ guisp=Red
autocmd ColorScheme *
\ highlight SpellLocal
\ cterm=Underline
\ ctermfg=NONE
\ ctermbg=NONE
\ term=Reverse
\ gui=Undercurl
\ guisp=Red
autocmd ColorScheme *
\ highlight SpellRare
\ cterm=Underline
\ ctermfg=NONE
\ ctermbg=NONE
\ term=Reverse
\ gui=Undercurl
\ guisp=Red
augroup END
set termguicolors
colorscheme gruvbox
'환경구축 & Tip > Dorker' 카테고리의 다른 글
Docker - sudo권한 있는 사용자 추가하기 (0) | 2024.04.09 |
---|