Linux/suExecをバイナリ直接書き換え

suExecをバイナリ直接書き換え

vimに付属のxxdを使って、バイナリファイルを編集できるようにする。

"バイナリ編集(xxd)モード(vim -b での起動、もしくは *.bin で発動します)

# vi ~/.vimrc
-------- 下記を追加 --------
augroup BinaryXXD
        autocmd!
        autocmd BufReadPre  *.bin let &binary =1
        autocmd BufReadPost * if &binary | silent %!xxd -g 1
        autocmd BufReadPost * set ft=xxd | endif
        autocmd BufWritePre * if &binary | %!xxd -r
        autocmd BufWritePre * endif
        autocmd BufWritePost * if &binary | silent %!xxd -g 1
        autocmd BufWritePost * set nomod | endif
augroup END

suexec書き換え

# cd /usr/sbin
# cp suexec suexec.test
# chmod u+w suexec.test
# vi -b suexec.test
00022d0: 29 0a 00 2d 56 00 61 70 61 63 68 65 00 2f 76 61  )..-V.apache./va
00022e0: 72 2f 77 77 77 00 20 2d 44 20 41 50 5f 44 4f 43  r/www. -D AP_DOC
    ↓
00022d0: 29 0a 00 2d 56 00 61 70 61 63 68 65 00 2f 68 6f  )..-V.apache./ho
00022e0: 6d 65 00 00 00 00 20 2d 44 20 41 50 5f 44 4f 43  me.... -D AP_DOC

確認

# ./suexec.test -V
-D AP_DOC_ROOT="/home"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="apache"
-D AP_LOG_EXEC="/var/log/httpd/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=500
-D AP_USERDIR_SUFFIX="public_html"