基本配置里主要涉及软件更新、禁用自动更新、设置zsh主题和插件等。具体配置如下:
export HOMEBREW_NO_AUTO_UPDATE=1
export ZSH="$HOME/.oh-my-zsh"
export DISPLAY=:0
DISABLE_MAGIC_FUNCTIONS=true
zstyle ':omz:update' mode disabled
ZSH_THEME="robbyrussell"
plugins=(git z sudo autojump zsh-autosuggestions zsh-navigation-tools sublime history-substring-search zsh-syntax-highlighting msfvenom)
source $ZSH/oh-my-zsh.sh
1. export HOMEBREW_NO_AUTO_UPDATE=1
禁用Homebrew的自动更新功能。当你不希望Homebrew频繁自动更新,或者希望手动控制更新时,可以使用这个设置。
2. export ZSH="$HOME/.oh-my-zsh"
设置Oh My Zsh的安装路径,安装了Oh My Zsh,这行代码是必须的,用于让Zsh知道Oh My Zsh的安装位置。
3. export DISPLAY=:0
设置
DISPLAY
环境变量,终端中运行图形界面程序(如xeyes、gedit等),或者通过SSH连接远程桌面时,需要正确设置DISPLAY变量。
4. DISABLE_MAGIC_FUNCTIONS=true
禁用Oh My Zsh中的“魔法函数”,希望减少Oh My Zsh的自动行为,或者希望手动控制这些功能,可以启用这个设置。
5. zstyle ':omz:update' mode disabled
禁用Oh My Zsh的自动更新功能。
6. ZSH_THEME="robbyrussell"
设置Zsh的主题,可以根据自己的喜好选择不同的主题,以改变Zsh的外观。
7. plugins=(git z sudo autojump zsh-autosuggestions zsh-navigation-tools sublime history-substring-search zsh-syntax-highlighting msfvenom)
启用Oh My Zsh的插件。插件列表中包含的插件及其功能如下:
git
:提供Git相关的命令补全、别名和状态显示。 z
:快速跳转到最近访问的目录。 sudo
:提供 sudo
命令的自动补全和历史记录。autojump
:快速跳转到常用目录。 zsh-autosuggestions
:在命令行中提供自动补全建议。 zsh-navigation-tools
:增强导航功能,如快速跳转到文件和目录。 sublime
:与Sublime Text编辑器集成,提供快捷命令。 history-substring-search
:通过历史记录中的子字符串进行搜索。 zsh-syntax-highlighting
:为命令行提供语法高亮。 msfvenom
:为Metasploit的 msfvenom
工具提供支持。
8. source $ZSH/oh-my-zsh.sh
加载Oh My Zsh的主配置文件。
二、软件版本配置
在mac以及Linux中会安装go、node、java、python、ruby等软件,但是设计到多版本的情况,需要使用对应管理方法。具体配置如下:
#使用gvm管理Go版本
[[ -s "/Users/cream/.gvm/scripts/gvm" ]] && source "/Users/cream/.gvm/scripts/gvm"
#使用nvm管理Node.js版本
export NVM_DIR="$HOME/.nvm"
[ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh" # This loads nvm
[ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion
#使用jenv管理java版本
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"
#java安装路径
#/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
#/Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home
#/Library/Java/JavaVirtualMachines/jdk-14.0.1.jdk/Contents/Home
#/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/bin/java
#/Library/Java/JavaVirtualMachines/jdk1.8.0_71.jdk/Contents/Home
#/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
#使用pyenv管理python版本
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
#使用rbenv管理ruby版本
eval "$(rbenv init -)"
1. 使用gvm
管理Go版本
[[ -s "/Users/cream/.gvm/scripts/gvm" ]] && source "/Users/cream/.gvm/scripts/gvm"
gvm
(Go Version Manager)的初始化脚本。你需要在开发中切换不同版本的Go时,使用gvm
可以方便地管理这些版本。export NVM_DIR="$HOME/.nvm"
[ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh" # This loads nvm
[ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"
/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-14.0.1.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/bin/java
/Library/Java/JavaVirtualMachines/jdk1.8.0_71.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
eval "$(rbenv init -)"
三、自定义函数配置
根据自己的需求配置自定义函数吧,我常用有代理相关的、编码、生成随机数、进程查询相关、IP和MAC查询等
#启用代理
function setproxy() {
export http_proxy="http://127.0.0.1:6152"
export https_proxy="http://127.0.0.1:6152"
export all_proxy="socks5://127.0.0.1:6153"
echo "Proxy enabled"
}
#取消代理
function unsetproxy() {
unset http_proxy
unset https_proxy
unset all_proxy
echo "Proxy disabled"
}
#抓取终端流量数据包
function httpproxy(){
export http_proxy="http://127.0.0.1:8080"
export https_proxy="http://127.0.0.1:8080"
echo "Start packet capture"
}
#取消抓取终端流量数据包
function unhttpproxy(){
unset http_proxy
unset https_proxy
echo "Stop packet capture"
}
#常见编码,如base64、MD5、SHA1、NTLM
function encode() {
GREEN=$(tput setaf 2)
BLUE=$(tput setaf 4)
RED=$(tput setaf 1)
YELLOW=$(tput setaf 3)
CYAN=$(tput setaf 6)
BOLD=$(tput bold)
RESET=$(tput sgr0)
if [ -z "$1" ]; then
echo "${RED}错误: 请输入要加密的字符串!${RESET}"
return 1
fi
# 将输入字符串使用 printf 避免解析为选项
base64=$(printf "%s" "$1" | base64)
hex_str=$(echo -n "$1" | od -A n -t x1 | tr -d ' n')
# 计算 32 位 MD5
md5_32=$(printf "%s" "$1" | md5sum | awk '{print $1}')
# 计算 16 位 MD5(取 32 位结果的中间部分)
md5_16=$(echo "$md5_32" | awk '{print substr($0, 9, 16)}')
# 计算 NTLM 哈希,正确传递字符串给 Python
# 注意python路径,建议使用绝对路径
ntlm=$(/Users/cream/.pyenv/versions/3.9.20/bin/python3.9 -c "import hashlib, binascii, sys; print(binascii.hexlify(hashlib.new('md4', sys.argv[1].encode('utf-16le')).digest()).decode())" "$1")
# 计算 SHA-1
sha1=$(printf "%s" "$1" | sha1sum | awk '{print $1}')
# 计算 SHA-2(SHA-256)
sha256=$(printf "%s" "$1" | sha256sum | awk '{print $1}')
# 计算 SHA-3(SHA3-256)
sha3_256=$(printf "%s" "$1" | sha3sum -a 256 | awk '{print $1}')
# 计算国密 SM3
sm3=$(printf "%s" "$1" | openssl dgst -sm3 | awk '{print $2}')
# 计算 bcrypt 哈希(10 轮)
# 使用 Python 的 bcrypt 库生成哈希,并指定 rounds=10
bcrypt_hash=$(/Users/cream/.pyenv/shims/python -c "import bcrypt, sys; print(bcrypt.hashpw(sys.argv[1].encode('utf-8'), bcrypt.gensalt(rounds=10)).decode())" "$1")
# 输出所有结果
echo -e "${BOLD}${GREEN}输入字符串: ${RESET}${CYAN}$1${RESET}"
echo -e "${BOLD}${YELLOW}Hex编码: ${RESET}${BLUE}$hex_str${RESET}"
echo -e "${BOLD}${YELLOW}BASE64 编码: ${RESET}${BLUE}$base64${RESET}"
echo -e "${BOLD}${YELLOW}MD5 (128-bit): ${RESET}${BLUE}$md5_32${RESET}"
echo -e "${BOLD}${YELLOW}MD5 (64-bit): ${RESET}${BLUE}$md5_16${RESET}"
echo -e "${BOLD}${YELLOW}SHA1(160-bit): ${RESET}${BLUE}$sha1${RESET}"
echo -e "${BOLD}${YELLOW}SHA2(256-bit): ${RESET}${BLUE}$sha256${RESET}"
echo -e "${BOLD}${YELLOW}SHA3(256-bit): ${RESET}${BLUE}$sha3_256${RESET}"
echo -e "${BOLD}${YELLOW}SM3 哈希: ${RESET}${BLUE}$sm3${RESET}"
echo -e "${BOLD}${YELLOW}NTLM 哈希: ${RESET}${BLUE}$ntlm${RESET}"
echo -e "${BOLD}${YELLOW}BCRYPT 哈希: ${RESET}${BLUE}$bcrypt_hash${RESET}"
}
#生成随机字符串
function random() {
GREEN=$(tput setaf 2)
BLUE=$(tput setaf 4)
BOLD=$(tput bold)
RESET=$(tput sgr0)
# 定义可用字符集
characters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{}|;:,.<>?"
# 生成 16 位长度的随机字符串
random_string=$(LC_CTYPE=C tr -dc "$characters" < /dev/urandom | head -c 16)
# 输出结果
#echo "随机字符串: $random_string"
echo -e "${BOLD}${GREEN}随机字符串: ${RESET}${BLUE}$random_string${RESET}"
}
#判断本地端口开放情况
function checkport() {
GREEN=$(tput setaf 2)
RED=$(tput setaf 1)
YELLOW=$(tput setaf 3)
BLUE=$(tput setaf 4)
RESET=$(tput sgr0)
if ! command -v lsof &>/dev/null; then
echo -e "${RED}未找到 lsof 命令,请先安装。${RESET}"
return 1
fi
if [ $# -eq 0 ]; then
# echo -e "${YELLOW}📡 当前监听的端口列表(TCP + UDP):${RESET}"
printf "${BLUE}%-6s %-8s %-8s %-20s %-25s${RESET}n" "协议" "端口" "PID" "进程名" "监听地址"
sudo lsof -nP -iTCP -sTCP:LISTEN 2>/dev/null |
awk 'NR>1 {
cmd=$1; pid=$2; addr=$9
gsub(/[[]]/, "", addr)
split(addr, a, ":")
port=a[length(a)]
ip=substr(addr, 1, length(addr)-length(port)-1)
if (ip == "") ip="*"
printf "TCP %-8s %-8s %-20s %-25sn", port, pid, cmd, ip
}'
sudo lsof -nP -iUDP 2>/dev/null |
awk 'NR>1 {
cmd=$1; pid=$2; addr=$9
gsub(/[[]]/, "", addr)
split(addr, a, ":")
port=a[length(a)]
ip=substr(addr, 1, length(addr)-length(port)-1)
if (ip == "") ip="*"
printf "UDP %-8s %-8s %-20s %-25sn", port, pid, cmd, ip
}'
else
for p in "$@"; do
results=$(sudo lsof -nP -iTCP:"$p" -sTCP:LISTEN 2>/dev/null |
awk -v port="$p" 'NR > 1 {
key = $1 "|" $2
if (!(key in seen)) {
seen[key] = 1
printf "✔ 端口: %s 协议: TCP PID: %s 进程: %sn", port, $2, $1
}
}')
if [ -n "$results" ]; then
echo -e "${GREEN}${results}${RESET}"
else
echo -e "${RED}✘ 端口: $p (未监听或无权限)${RESET}"
fi
done
fi
}
#根据给定的PID关闭对应的程序
function killproc() {
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
RESET=$(tput sgr0)
if [ $# -eq 0 ]; then
echo -e "${YELLOW}⚠️ 请指定一个或多个 PID。示例:killproc 1234 5678${RESET}"
return 1
fi
for pid in "$@"; do
if ps -p "$pid" > /dev/null 2>&1; then
proc_name=$(ps -p "$pid" -o comm=)
kill -9 "$pid" &&
echo -e "${GREEN}✔ 已杀死 PID: $pid 进程: $proc_name${RESET}" ||
echo -e "${RED}✘ 无法杀死 PID: $pid (权限不足或其他错误)${RESET}"
else
echo -e "${RED}✘ PID: $pid 不存在${RESET}"
fi
done
}
#根据PID找端口
function pid2port() {
if [ -z "$1" ]; then
echo "Usage: pid2port <PID>"
return 1
fi
sudo lsof -nP -i -a -p "$1" -sTCP:LISTEN
}
#根据PID找到程序的命令
function pid2command() {
if [ $# -ne 1 ]; then
echo -e " 33[1;33mUsage: pid2command PID 33[0m"
return 1
fi
local pid=$1
local command=$(ps -p "$pid" -o command=)
if [ -z "$command" ]; then
echo -e " 33[1;31m没有找到PID:$pid 对应的命令. 33[0m"
return 1
else
echo -e " 33[1;32mPID$pid对应的命令: 33[0m $command"
fi
}
#获取本地IP和MAC
function showIpMac() {
# ANSI 颜色代码
YELLOW=$(tput setaf 3)
GREEN=$(tput setaf 2)
BLUE=$(tput setaf 4)
RESET=$(tput sgr0)
echo -e "${YELLOW}InterfacetIP AddressttMAC Address${RESET}"
echo "--------------------------------------------------------"
if command -v ip &>/dev/null; then
# Linux: 使用 `ip a`
ip -o addr show | awk -v green="$GREEN" -v blue="$BLUE" -v reset="$RESET" '
/inet / {
split($2, iface, ":")
interface = iface[1]
ip = $4
}
/link/ether/ {
mac = $2
printf "%st%s%s%st%s%s%sn", interface, green, ip, reset, blue, mac, reset
}'
else
# macOS: 使用 `ifconfig`
ifconfig | awk -v green="$GREEN" -v blue="$BLUE" -v reset="$RESET" '
/^[a-z0-9]/ {
interface = $1
}
/inet / {
ip = $2
}
/ether / {
mac = $2
}
ip && mac {
printf "%st%s%s%st%s%s%sn", interface, green, ip, reset, blue, mac, reset
ip = mac = ""
}'
fi
}
1、代理相关
这里主要考虑到在终端使用代理,可以加快下载、更新等方面的测试。
在终端取消代理直接执行unsetproxy即可。
httpproxy主要是在终端抓取HTTP流量,执行完httpproxy即可将终端的HTTP请求拦截到bp中,当然curl工具也支持代理模式哈!
由于curl、wget、httpx等均支持代理,所以httpproxy函数可以删掉。
2、编码函数-encode
该函数支持Hex、base64、MD5、SHA1、SHA2、SHA3、SM3、NTLM和BCRYPT 。测试效果如下:
3、随机字符串-random
平时设置账号密码,不想打开其它工具来生成,直接在终端设置了该函数,
characters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{}|;:,.<>?"
random_string=$(LC_CTYPE=C tr -dc "$characters" < /dev/urandom | head -c 16)
两行代码即可实现生成随机字符串,当然也可以使用openssl
openssl rand -base64 12 | tr -dc "$characters" | head -c 16
4、查看端口-checkport
checkport函数支持不带参数和带参数查询两种方式。不带参数可以查询本地全部开放端口,包含TCP和UDP端口
其他相关函数有:
killproc:根据给定的PID关闭对应的程序
pid2port:根据PID找端口
pid2command:根据PID找到程序的命令
pid2command的效果如下:
5、查看本地IP和MAC地址-showIpMac
在Linux中执行ifconfig、ip add等命令查看IP、mac等信息,获取的内容比较多,这里偷个懒直接通过showipmac函数来获取本地的IP和MAC信息。
四、快捷方式配置和环境变量配置
1、快捷方式
没啥可解释的,主要看自己需求。
alias sublime="'/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl'"
alias php5="/Applications/phpstudy/Extensions/php/php5.6.40/bin/php"
alias morefind="/Users/cream/sec-tools/MoreFind"
alias fscan="sudo /Users/cream/sec-tools/fscan/fscan"
alias cscan="sudo /Users/cream/sec-tools/cscan"
alias yak="/Users/cream/yakit-projects/yak-engine/yak"
alias dismap="/Users/cream/others/dismap/dismap"
alias fofax="/Users/cream/others/fofax"
alias gogo="/Users/cream/others/gogo"
alias goofuzz="/Users/cream/others/GooFuzz/GooFuzz"
alias httpx="/Users/cream/others/httpx"
alias kscan="/Users/cream/others/kscan"
alias ksubdomain="/Users/cream/others/ksubdomain"
alias nail="/Users/cream/others/nali"
alias notify="/Users/cream/others/notify"
alias phantomis="/Users/cream/others/phantomjs"
alias subfinder="/Users/cream/others/subfinder"
alias waybackurls="/Users/cream/others/waybackurls"
alias imhex="sudo /Applications/ImHex.app/Contents/MacOS/imhex"
alias typora="sudo /Applications/Typora.app/Contents/MacOS/Typora"
alias mark="sudo '/Applications/Mark Text.app/Contents/MacOS/Mark Text'"
alias clash="sudo '/Applications/Clash Verge.app/Contents/MacOS/Clash Verge'"
alias mp-unpack="/Applications/mp-unpack.app/Contents/MacOS/mp-unpack"
alias tcpdump_go="'/Volumes/Macintosh HD/Users/cream/sec-tools/tcpdump_go'"
alias wihscan="/Users/cream/sec-tools/WIHscan/WIHscan"
alias WIH="/Users/cream/sec-tools/arl_files/wih/wih"
alias keyadd="/Users/cream/sec-tools/Keydd/keyadd"
alias zkar="/Users/cream/sec-tools/zka/zkar"
alias codeql="/Users/cream/codeql/codeql"
alias feroxbuster="/Users/cream/sec-tools/feroxbuster/feroxbuster"
alias xpoc="/Users/cream/sec-tools/xpoc/xpoc"
alias wxapp="open '/Users/cream/Library/Containers/com.tencent.xinWeChat/Data/.wxapplet/packages/'"
alias KillWxapkg="/Users/cream/sec-tools/KillWxapkg/KillWxapkg"
alias Template_scan="/Users/cream/sec-tools/Template"
alias ttmd5="query() {curl http://www.ttmd5.com/do.php?c=Api&m=crack&uid=XXXX&token=XXXX&cipher=$1;};query"
alias p1finger="/Users/cream/sec-tools/P1finger/P1finger"
2、环境变量配置
根据需求来配置。
export PATH="/Applications/phpstudy/Extensions/php/php7.3.11/bin:$PATH"
export PATH="/Users/cream/DevelopmentDependency/apache-maven/bin:$PATH"
export PATH="/Users/cream/sec-tools/xray/:$PATH"
export PATH="/Applications/Wireshark.app/Contents/MacOS:$PATH"
export PATH="/Users/cream/sec-tools/nuclei:$PATH"
export PATH="/usr/local/opt/openssl@3/bin:$PATH"
export PATH="/usr/local/opt/[email protected]/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/[email protected]/lib"
export CPPFLAGS="-I/usr/local/opt/[email protected]/include"
export PKG_CONFIG_PATH="/usr/local/opt/[email protected]/lib/pkgconfig"
export PATH="/Users/cream/sec-tools/ChkApi_0x727/chromedriver-mac-x64:$PATH"
export PATH="/Users/cream/sec-tools/ffuf/:$PATH"
export PATH="/usr/local/opt/libiconv/bin:$PATH"
五、其他配置
1、msfvenom自动补全
这里需要在plugins中配置msfvenom插件
#设置msfvenom自动补全
fpath=(~/.zsh/completion $fpath) # $fpath通过添加来包含您的目录~/.zshrc
autoload -Uz compinit && compinit -i #确保 compinit 已加载或通过添加~/.zshrc
![本地zshrc配置]()
2、全局使用rlwarp
在反弹shell的时候rlwarp的作用非常明显,这里简单配置一下。
自动应用 rlwrap
function rlwrap_auto() {
if [[ -n "$RLWRAP" ]]; then
rlwrap "$@"
else
"$@"
fi
}
# export RLWRAP=1
autoload -Uz add-zsh-hook
add-zsh-hook preexec rlwrap_auto
alias nc = 'rlwrap nc'
alias ncat = 'rlwrap ncat'
alias python = 'rlwrap python'
alias go = 'rlwrap go'
alias node = 'rlwrap node'
原文始发于微信公众号(KSA库):本地zshrc配置
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论