wJa丨Java闭源项目的自动化测试
本文为i春秋论坛作家「Wker」表哥分享的技术文章,旨在为读者提供更多的入检学习方法与技能技巧,文章仅供参考。入检
WJa支持反编译Java生成的入检jar包文件,整理成语法树,入检根据调用链进行污点分析,入检ddraw应用源码通过cheetah脚本语言编写测试脚本,入检确定可能存在的入检漏洞调用链,生成测试链接,入检进行fuzzer测试。入检
以下是入检对网络上一个Spring靶场进行SQL注入的分析测试。
环境准备
1、入检测试靶场
2、入检Java运行环境
3、入检wJa
wJa分析流程
解析jar包
解析class文件结构
反编译得到AST
优化AST
生成Java代码
编写调用链追踪
过滤函数剪枝
黑盒测试Fuzzer
运行靶场
搭建好靶场环境,入检这里使用的靶场是在网上寻找到的,里面有创建数据库的脚本文件,环境一切准备就绪后。运行靶场,使用命令跑起jar包:java -jars shootingRange.jar
使用wJa打开jar文件
使用命令:java -jar wJa.jar运行起程序,程序运行之后会要求选择待分析的jar程序,这里选择shootingRange.jar。
起来之后可以看到程序的主界面了。
左侧部分:
Decompile:对jar包反编译的java资源管理器。
cheetahLanguage:脚本管理器,包含支持库介绍,以及编写好的cheetah脚本。
中间部分:
Decompile:对jar包反编译的java代码显示部分。
cheetahLanguage:编写cheetah脚本代码,运行测试。
界面相对比较简单。
我们可以先看整个靶场的一个框架结构,从control层进行分析(Spring默认路径为BOOT-INF/classes)。可以看到control层都是提供对外开放的接口,所以我们可以确定这是兰博基尼ps源码入口类,所以我们可以将其确定为入口点。从其中的一个入口点(one)根据一步步的调用追踪,我们可以得到如下调用链:
最终进入的危险函数:
当然,这是我们手动跟踪的,但是如何使用工具自动帮助我们进行追踪呢?
编写白盒污点跟踪代码
污点分析
污点分析可以抽象成一个三元组〈sources, sinks, sanitizers〉的形式, 其中, source即污点源, 代表直接引入不受信任的数据或者机密数据到系统中;
sink即污点汇聚点, 代表直接产生安全敏感操作 (违反数据完整性) 或者泄露隐私数据到外界 (违反数据保密性);
sanitizer即无害处理, 代表通过数据加密或者移除危害操作等手段使数据传播不再对软件系统的信息安全产生危害。
污点分析就是分析程序中由污点源引入的数据是否能够不经无害处理, 而直接传播到污点汇聚点。如果不能, 说明系统是信息流安全的; 否则, 说明系统产生了隐私数据泄露或危险数据操作等安全问题。
对于SQL注入这种漏洞,可以将污点分析的三元组实例化为下面三组内容:
source:Spring的接口入口点的参数;
sink:jdbc的query方法;
sanitizer:类似于Integer.value此类方法。
代码编写
在检测类似于SQL注入类漏洞,我们需要的是跟踪调用链,所以需要使用的是TrackVarIntoFun函数。
TrackVarIntoFun
1、起始类是我们需要分析的类,这里是 com/l4yn3/microserviceseclab/controller/IndexController
2、起始方法是入口方法,也是这个类下面的所有接口方法
3、起始方法参数下标是要检测的入口参数下标
4、目标方法类是jdbc,这里是 org/springframework/jdbc/core/JdbcTemplate
5、目标方法是query,jdbc查询数据的方法
6、目标方法的参数下标是第一个参数,sql语句
返回值是一个node执行流数组,node包含次node所在的class和node的AST。
我们设置开头的包名,那如何获取所有的方法名呢?
GetAllMethodName可以获取所有的方法名称,但是这里有一个注意的地方是,如果方法名是和的需要跳过,因为这两个方法是构造方法和静态代码块。
node中的AST可以通过GetJavaSentence方法得到对应生成的java代码。
还有一点需要注意的是,TrackVarIntoFun方法只是跟踪流,只是期刊类网站源码到目标方法就停止,如果没有到目标方法就停止了那么也是会返回所有的执行流,所以这里我们需要自己进行过滤。
所以现在的思路已经完成,通过GetAllMethodName获取所有的方法,然后对方法中的第一个参数进行追踪,查看其最终流向的是否是jdbc,并且判断流动过程中是否有类似于Integer.value()方法的存在,如果不存在,那噩梦非常可能就是一条可以被污染的链条。
最终我们可以编写出如下代码:
如果对cheetah语法不熟悉,那么可以到 github.com/Wker/Demo中了解cheetah的详细语法,里面含有+的渗透测试脚本可供学习。最终我们白盒审计可以打印出如下内容:
可以看到我们对没有过滤的调用链都进行了高亮显示,对有过滤的用红色进行显示。
编写黑盒Fuzzer测试代码
SQL注入检测函数
我们可以使用简单or 1=1与or 1=2进行判断,为什么不能用and呢?因为我们没有默认值,所以需要通过or进行判断。
如果你想要了解更多的cheetah编写sql注入的代码,可以看cheetah的GitHub,里面是有一个非常完整的SQL注入脚本代码的。
组成测试链接
因为Spring中使用大量注解进行设置,对于注解的解析,wJa提供了获取注解的方法。
1、GetClassAnnotation获取类注解
2、GetClassMethodAnnotation获取方法上的注解
3、GetClassMethodArgAnnotation获取参数上的注解
4、GetAnnotationArgListValue获取注解中list数据
5、GetAnnotationArgSingValue获取注解中的数据
通过上述的注解方法我们可以构造完整的测试链接,当然我们可以编写一个参数进行解析注解参数数据。
根据Spring的的注解,我们得到路径中的某一个值。
因为我们已经开启了端口的javaWeb服务,所以可以直接进行拼接组合成测试链接。生成网页源码软件
白盒+黑盒 自动化测试
有了白盒测试和黑盒测试的代码部分,我们可以进行组装拼接,当白盒测试代码发现没有过滤函数,并且最终进入了危险函数,那么我们就启动黑盒测试进行真正意义上的Fuzzer。
这里附带完整的白盒+黑盒 自动化测试脚本。
让我们运行一下,看一下最终执行的结果:
可以看到我们最终找到了两处白盒与黑盒完全符合要求的调用链,这样子的调用链是有极大可能存在漏洞的。
以上为今天分享的内容,小伙伴们看懂了吗?
站在 java 的角度探讨 SQL 注入原理
在Java开发中,SQL注入是一个不容忽视的安全问题。尽管早期曾对web安全领域有所忽视,但随着Java技术的广泛应用,安全开发的重要性日益凸显。在一次项目中,作者遇到一个SQL注入漏洞严重的DAO层,这促使作者重新审视并深入研究SQL注入原理。
首先,作者通过创建一个使用Springboot和Jersey的简单web服务,以及一个包含管理员信息的MySQL数据库,构建了一个SQL注入的靶场。正常情况下,通过管理员用户名查询接口,可以获取预期结果。然而,当输入恶意构造的SQL查询时,如name='xxxx'or'a'='a',会触发错误或返回意外数据,揭示了SQL注入的存在。
SQL注入源于开发者直接将用户输入拼接到SQL语句中,使得黑客可以通过精心构造的参数执行非预期的SQL操作。例如,通过注入的新闻评论管理源码参数,黑客可以轻易获取到管理员的密码哈希,利用常见弱口令轻易破解系统。理解了这一原理,关键在于防止用户输入转化为可执行的SQL代码。
避免SQL注入的一个有效方法是使用预处理语句,如JDBC的PreparedStatement。通过这种方式,参数被正确转义,即使恶意输入也无法执行SQL注入。MyBatis和JPA这样的ORM框架也提供了预处理功能,但需注意${ }形式的参数传递可能导致SQL注入,应尽量避免。
最后,虽然ORM技术如JPA能减少SQL注入的风险,但完全依赖框架并非万全之策。在代码层面上,如进行参数验证、前端静态化和流量过滤,也能在一定程度上防止SQL注入。总的来说,随着技术进步,Java开发者应更加重视SQL注入的防范,保持代码安全是保障系统安全的关键。而无论使用哪种语言,理解和应用防范SQL注入的策略始终是核心。
年最佳 SQL 注入检测工具
SQL 注入 (SQLi) 是一种访问敏感或私有数据的隐蔽攻击形式,最早在上世纪末被发现。顶级 SQLi 检测工具有 Netsparker、SQLMap、jSQL Injection、Havij、Burp Suite、BBQSQL、Blisqy、Acunetix Web 漏洞扫描程序、Blind SQL Injection via Bit Shifting、Damn Small SQLi Scanner、Leviathan、NoSQLMap、Tyrant SQL 和 Whitewidow。这些工具包括 Web 漏洞管理解决方案、自动化工具、漏洞扫描器、Python 工具、GUI SQL 注入工具等。
Netsparker 是一个 Web 漏洞管理解决方案,用于检测 SQLi 及其他漏洞,具备扩展性、自动化和集成特性。SQLMap 是一个自动 SQLi 和数据库接管工具,具备检测引擎、渗透测试工具和用于数据库指纹识别、数据提取、访问底层文件系统以及操作系统 (OS) 命令执行的工具。jSQL Injection 是一种基于 Java 的工具,协助 IT 团队远程服务器查找数据库信息。Havij 是一个图形用户界面 (GUI) 工具,支持多种 SQLi 技术。Burp Suite 中的 Web 漏洞扫描器使用 PortSwigger 的研究自动发现 Web 应用程序中的各种漏洞。BBQSQL 是一个基于 Python 的工具,简化处理更复杂的 SQL 注入漏洞。Blisqy 通过使用位移方法执行 SQL 盲注入。Acunetix Web 漏洞扫描程序识别常见的 Web 服务器配置问题,特别是针对 WordPress。Blind SQL Injection via Bit Shifting 使用位移方法执行 SQL 盲注入。Damn Small SQLi Scanner 是一个紧凑的 SQLi 漏洞扫描器,由 SQLMap 的创建者之一组成。Leviathan 包含用于服务发现、暴力破解、SQL 注入检测和运行自定义漏洞利用功能的工具。NoSQLMap 是一个用于审计的 Python 工具,用于发现 NoSQL 数据库和使用 NoSQL 从数据库中披露或克隆数据的 Web 应用程序中的默认配置漏洞。Tyrant SQL 是一个基于 Python 的 GUI SQL 注入工具。Whitewidow 是一个开源 SQL 漏洞扫描程序,提供自动文件格式化、随机用户代理、IP 地址、服务器信息和多 SQL 注入语法。Explo 是一个基本工具,用于以人类和机器可读的格式描述 Web 安全问题。
SQL 注入是利用基于 SQL 的应用程序中存在的漏洞,黑客将代码注入 SQL 查询,以便添加、修改和删除数据库项目。这种攻击可能导致敏感信息泄露、Web 内容修改和数据删除。为防止 SQL 注入,可以进行漏洞扫描、渗透测试,评估应用程序可能面临的风险。常见的缓解和预防措施包括了解哪些应用程序可能易受攻击,评估 SQL 数据库交互的网站,使用安全工具检测漏洞。
SQL注入:各种绕过检测的姿势
这一篇主要总结一下sqlilabs中advanced injection中的用到的各种绕过,也就是less-less。
1)数据编码
在普通注入的基础上,使用响应的编码方式编码payload即可,如sqlilabs上的靶站使用base编码。
2)特殊字符、语法关键字过滤
过滤与绕过方式包括:
1. 注释符号被过滤:采用以 or 'a'='b 结尾的方式绕过。
2. 空格被过滤:使用%a0来替代空格分割语句。
3. and和or被过滤:使用&&和||来替代,解决副作用是双写or,改用passwoorrd。
4. union和select等被过滤:根据过滤的具体实现方式,尝试用sElect,uniOn等来代替。
3)存储型注入(二次注入)
存储型注入指的是将注入语句存入数据库,再通过查询等方式触发注入语句执行,达到注入效果。例如,在sqlilabs中,通过创建账户并修改密码,将admin'#拼接进sql语句,导致密码被修改。
4)特殊字符转义与宽字节注入
常见的转义方式包括自定义转义函数、调用函数addslashes()和调用函数mysql_real_escape_string()。宽字节注入可以绕过这些转义方式。
5)防火墙保护与 Explorer。这种攻击导致浏览器不检查结果框架的目的网站,允许任意代码跨框架访问。为防范此类攻击,建议在应用程序中使用命名框架,并在每个会话中使用不同的框架。
七、文件上传漏洞
文件上传漏洞通常由于网页代码中的文件上传路径变量过滤不严造成。攻击者可以利用此漏洞上传任意文件,包括网站后门文件,从而远程控制网站服务器。为防范此类漏洞,建议在开发网站及应用程序过程中严格限制和校验上传的文件。
八、应用程序测试脚本泄露
应用程序测试脚本泄露漏洞是由于测试脚本对提交的参数数据缺少过滤,攻击者可以利用此漏洞查看任意文件内容。为防范此类漏洞,建议严格过滤提交的数据。
九、私有IP地址泄露漏洞
私有IP地址泄露漏洞主要发生在局域网内。攻击者可以通过Ping指令或IP版QQ等方式获取IP地址。为防范此类漏洞,建议使用代理隐藏IP地址,或安装能够自动去除发送数据包包头IP信息的软件。
十、未加密登录请求
未加密登录请求漏洞主要由于Web配置不安全,登录请求将敏感信息如用户名和密码未加密传输。为防范此类漏洞,建议进行加密传输,如使用SSH。
十一、敏感信息泄露漏洞
SQL注入、XSS、目录遍历、弱口令等漏洞可能导致敏感信息泄露。针对不同原因,防御措施也不同。建议综合采取各种措施,确保网站安全。
年最佳 SQL 注入 (SQLi) 检测工具
面对SQL注入这一隐蔽且常用的攻击手段,市面上出现了多种高效的检测工具,帮助企业和安全团队有效应对。其中,Netsparker作为一款全面的Web漏洞管理解决方案,不仅专注于SQLi检测,还提供可扩展性和自动化功能,支持第三方工具集成,并附带SQL注入指南。它的扫描技术基于证明,能精准识别和确认漏洞,包括XSS和其他Web应用漏洞。
SQLMap是GitHub上的开源工具,专门针对SQLi和数据库接管,拥有自动检测和利用漏洞的能力,涵盖多种攻击方法和数据库指纹识别等高级功能。而jSQL Injection作为Java工具,适用于多种操作系统,被集成到多种安全产品中,支持多种数据库引擎的自动注入检测。
Havij和Burp Suite通过图形用户界面或Web漏洞扫描器,简化了SQLi的检测过程,前者尤其适合Windows用户,后者如Burp Collaborator能发现异步SQL注入和盲目的服务器端请求伪造。Blisqy针对HTTP头上的盲SQL注入提供解决方案,而Acunetix Web漏洞扫描器不仅扫描SQLi,还特别关注WordPress等特定应用。
还有一些工具,如BBQSQL、Leviathan和NoSQLMap,通过Python或大规模审计集合提供不同的SQLi检测策略,如盲SQL注入、服务发现和NoSQL数据库审计。Tyrant SQL提供GUI界面以降低学习门槛,而Whitewidow则通过自动化功能快速扫描潜在漏洞。
这些工具都强调了对SQL注入威胁的认识和预防,通过漏洞扫描、渗透测试以及自动化工具,帮助保护数据库和Web应用免受SQL注入的侵害。同时,预防SQLi的关键在于理解应用程序的潜在漏洞,定期进行安全评估,并遵循良好的编程实践,比如参数化查询和输入验证。
2024-12-24 08:24
2024-12-24 07:56
2024-12-24 07:34
2024-12-24 07:26
2024-12-24 06:34