group_concat在注入中的优点

本文介绍在SQL注入攻击中使用group_concat函数的优势。相较于concat函数,group_concat能更高效地获取多个字段数据,无需调整limit参数进行多次查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般在注入中因为回显得位置有限我们一般使用concat函数把不同的字段连起来,例如

select concat(username,0x7e,password,0x7e) from admin limit 0,1

 

但是这样我们需要每次修改limit的值,来进行遍历比较麻烦,这时候group_concat就体现了它的价值,

select group_concat(username,0x7e,password,0x7e) from admin 

 这两段代码其实就只是吧concat函数替换成了group_concat函数,但是执行的结果大不相同

在注入中我们使用group_concat函数去连接的话,我们就可以一次性将结果都显示出来,而不需要修改limit的值去遍历。

转载于:https://www.cnblogs.com/sonneay1/p/9493475.html

-- 1. 修正动态列生成 SET @sql_columns = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(CASE WHEN t2.cost_cycle = ''', cost_cycle, ''' THEN ', 'CASE t1.expense_code ', 'WHEN ''A'' THEN current_period_adjustment_amount ', 'WHEN ''B'' THEN current_period_adjustment_amount ', 'WHEN ''C'' THEN current_period_adjustment_amount ', 'WHEN ''D'' THEN current_period_adjustment_amount ', 'WHEN ''E'' THEN current_period_adjustment_amount ', 'WHEN ''F'' THEN current_period_adjustment_amount ', 'WHEN ''F1'' THEN current_period_adjustment_amount ', 'WHEN ''F2'' THEN current_period_adjustment_amount ', 'WHEN ''G'' THEN current_period_adjustment_amount ', 'ELSE NULL END ', 'ELSE NULL END) AS `', cost_cycle, '`' ) ORDER BY cost_cycle DESC SEPARATOR ', ') INTO @sql_columns FROM copro_commerce_standard_est_total_revenue_adjustment_summary WHERE bill_state = 'PASSED' AND deleted = 0; -- 2. 安全处理空列 SET @sql_columns = COALESCE(@sql_columns, 'NULL AS dummy_column'); -- 3. 修正并构建主SQL(关键修复点) SET @sql_main = CONCAT( 'SELECT t1.expense_code as expenseCode, t2.project_id as projectId, t2.org_id as orgId, t2.tenant_id as tenantId, MAX(t1.subject_content) AS subjectContent, MAX(t1.contract_amount) AS contractAmount, MAX(t1.quantity_check_adjustment_amount) AS quantityCheck, ', -- 注意这里的逗号 @sql_columns, ',', -- 添加逗号分隔符 ' MAX(t1.total_amount) AS totalAmount FROM copro_commerce_standard_revenue_adjustment_summary_detail t1 INNER JOIN ( SELECT MAX(id) AS max_id, project_id, org_id, tenant_id, cost_cycle FROM copro_commerce_standard_est_total_revenue_adjustment_summary WHERE bill_state = ''PASSED'' AND deleted = 0 GROUP BY project_id, cost_cycle ) t2 ON t1.revenue_adjustment_summary_id = t2.max_id WHERE t1.expense_code IN (''A'', ''B'', ''C'', ''D'', ''E'',''F'',''F1'',''F2'',''G'') GROUP BY t1.expense_code ORDER BY FIELD(t1.expense_code, ''A'', ''B'', ''C'', ''D'', ''E'',''F'',''F1'',''F2'',''G'')'); -- 5. 执行SQL PREPARE stmt FROM @sql_main; EXECUTE stmt; DEALLOCATE PREPARE stmt; 这是我的sql,请帮我处理下,不要使用存储过程,不要现在这种方式实现,我最终要在java中通过Hutool执行。在这个sql中cost_cycle列是动态的,无法指定。我的数据库是mysql,版本是5.7.39。请帮我拆分成两个sql执行,第一个sql返回所有动态列,第二个sql根据第一个sql的动态列实现行转列
最新发布
07-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值