ChatGPT下的Java代码审计

吉祥知识星球icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247485367&idx=1&sn=837891059c360ad60db7e9ac980a3321&chksm=c0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd

《网安面试指南》icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484339&idx=1&sn=356300f169de74e7a778b04bfbbbd0ab&chksm=c0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene=21#wechat_redirect

《Java代码审计》icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484219&idx=1&sn=73564e316a4c9794019f15dd6b3ba9f6&chksm=c0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene=21#wechat_redirect

《Web安全》icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484238&idx=1&sn=ca66551c31e37b8d726f151265fc9211&chksm=c0e47a12f793f3049fefde6e9ebe9ec4e2c7626b8594511bd314783719c216bd9929962a71e6&scene=21#wechat_redirect

《应急响应》icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484262&idx=1&sn=8500d284ffa923638199071032877536&chksm=c0e47a3af793f32c1c20dcb55c28942b59cbae12ce7169c63d6229d66238fb39a8094a2c13a1&scene=21#wechat_redirect

《护网资料库》icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484307&idx=1&sn=9e8e24e703e877301d43fcef94e36d0e&chksm=c0e47acff793f3d9a868af859fae561999930ebbe01fcea8a1a5eb99fe84d54655c4e661be53&scene=21#wechat_redirect

chatGPT介绍:

ChatGPT是一个基于GPT-3.5/4.0架构的大型自然语言处理模型,由OpenAI开发。它可以执行各种自然语言处理任务,例如文本生成、语言翻译、情感分析、文本分类等。ChatGPT是目前最先进的自然语言处理模型之一,其在各种语言任务上的性能都非常优异。

ChatGPT是通过预训练技术进行训练的。在预训练过程中,模型学习大量的文本数据,并尝试通过上下文理解词汇的含义。预训练完成后,模型可以被微调用于特定任务,如问答系统、聊天机器人等。

ChatGPT的优点在于其可以产生非常自然、流畅的语言生成结果,同时可以理解上下文和语境,并从中推断出答案。这种能力使ChatGPT在问答、聊天机器人等应用中非常有用。然而,由于其需要大量的计算资源和高昂的成本,ChatGPT的应用范围仍然受到一定限制。

由于代码审计是一个静态的审计,只要我们不断的训练模型,他就能够知道更多的漏洞,指出更多的漏洞点。

chatgpt的审计

使用漏洞代码平台

JDBC-sql注入

直接将有sql注入的漏洞给chatgpt进行分析

@RequestMapping("/jdbc") public String jdbcVul(String id)
{    StringBuilder result = new StringBuilder();    
	try {        Class.forName("com.mysql.cj.jdbc.Driver");       
         Connection conn = DriverManager.getConnection(db_url, db_user, db_pass);
         Statement stmt = conn.createStatement();        // 拼接语句产生SQL注入  
         String sql = "select * from users where id = '" + id + "'";      
         ResultSet rs = stmt.executeQuery(sql);        
         while (rs.next()) {           
             String res_name = rs.getString("user");
             String res_pass = rs.getString("pass");
             String info = String.format("查询结果 %s: %s", res_name, res_pass);
             result.append(info);        }
         rs.close(); 
         conn.close(); 
        } catch (Exception e) {        // 输出错误页面,可被进行报错回显,更有利于攻击者注入 
        return e.toString();    } 
return result.toString(); }

问:你是一个代码审计专家及渗透测试专家,下面有一段代码,请分析一下是否有漏洞:

chatgpt给的回复:

这段代码存在SQL注入漏洞,原因是采用原始的Statement拼接语句的方式来构造SQL语句,容易让攻击者通过恶意构造的输入数据在SQL语句中执行恶意代码。

具体来说,当执行以下请求时:/SQLI/jdbc?id=1' and updatexml(1,concat(0x7e,(SELECT user()),0x7e),1)--%20+

攻击者在id参数的位置插入了SQL注入语句:1' and updatexml(1,concat(0x7e,(SELECT user()),0x7e),1)

由于SQL注入语句被直接拼接到SQL查询语句中,所以攻击者就可以通过查询结果中的错误回显获得敏感数据,例如数据库名、用户名等。

解决这个问题的方法是使用预编译语句(Prepared Statement)来代替拼接字符串的方式构造SQL语句,从而避免SQL注入漏洞。建议对代码进行改进。

浏览器进行验证:

Mybatis-sql注入

同上将漏洞代码直接给到chatgpt

chatgpt直接指出了漏洞所在的地方,并且给了利用的语句

当攻击者传递恶意数据时,例如 field 参数传入 id; delete from users; --,那么最终的 SQL 语句会变成 select * from users order by id; delete from users; -- ${sort},这将导致除了执行查询外还会执行删除操作。因此该应用程序存在 SQL 注入风险。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mingzhi61

你的打赏,是我创造最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值