吉祥知识星球http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247485367&idx=1&sn=837891059c360ad60db7e9ac980a3321&chksm=c0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd
《网安面试指南》http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484339&idx=1&sn=356300f169de74e7a778b04bfbbbd0ab&chksm=c0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene=21#wechat_redirect
《Java代码审计》http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484219&idx=1&sn=73564e316a4c9794019f15dd6b3ba9f6&chksm=c0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene=21#wechat_redirect
《Web安全》http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484238&idx=1&sn=ca66551c31e37b8d726f151265fc9211&chksm=c0e47a12f793f3049fefde6e9ebe9ec4e2c7626b8594511bd314783719c216bd9929962a71e6&scene=21#wechat_redirect
《应急响应》http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484262&idx=1&sn=8500d284ffa923638199071032877536&chksm=c0e47a3af793f32c1c20dcb55c28942b59cbae12ce7169c63d6229d66238fb39a8094a2c13a1&scene=21#wechat_redirect
《护网资料库》http://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 注入风险。