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

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

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

XPath报错注入原理
Deutsh 2022-09-20 20:58:58 150076
所属地 江西省

引言

XPath报错学过的人都很熟悉,用哪些函数、如何构造等。

但我有这样一个疑问:为什么数据库(无论是MySQL还是Oracle等)可以执行对XML文档进行操作的函数,这应该不属于数据库的范畴吧?

经查询还是自己肤浅了,原来数据库为了保存XML类型的数据,并不能直接保存,而是要对这些数据进行处理,以MySQL为例,他组织XML文档的内容有以下几种方式:

使用DBMS将文档存储为文本

使用DBMS将文档存储为数据元素

设计一个用于存储本机XML文档的专用系统

从现有的关系数据库创建或发布自定义XML文档

所以为了将XML数据转换为上述数据类型,则需要在数据库中对XML文档进行操作,所以数据库中自然就包含了这些函数

原理

主要依托于两个函数extractvalue()updatexml()
⚠️ mysql要求其版本 > 5.1.5

  • extractvalue(XML_document, XPath_string): 对XML文档进行查询的函数
  • updatexml(XML_document, XPath_string, new_value): 更新XML文档的函数
    • XML_document: string格式,为xml文档对象的名称
    • XPath_string: xpath格式的字符串(XML路径)

问题主要出现在XPath_string参数

XML文档中查找字符位置是用 /xxx/xxx/xxx/…格式,如果写入其他格式(并不是所有除了/xxx/xxx/xxx的格式都会报错,有些字符会报错),会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容

https://image.3001.net/images/20220920/1663678955_6329b9eb124e2d143ade0.png!small

若我们构造一个特殊的错误

select extractvalue('anything',concat('~',(select database())));

im1age.png

这时就返回了我们要查询数据库的名字

若此处格式正确,即使查询不到也不会报错

im2age.png

具体构造

id=-1" and(select extractvalue(anything,concat('~',(select database()))))

  • anything可替换为任意值
  • '~'可以换成’#’’$'等不满足xpath格式的字符
  • 有一个特殊的select:select version() = select @@version

ima4ge.png

  • extractvalue()能查询字符串的最大长度为32,如果结果超过32,就要用substring()函数截取或limit分页,一次查看最多32位

id=-1" and(select updatexml("anything",concat('~',(select database())),"anything"))

updatexml与extractvalue用法类似

具体案例见SQLi-LABS-Basic Challenges文章

# 渗透测试 # 网络安全 # web安全 # CTF
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 Deutsh 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
Deutsh LV.5
欢迎来我的博客 www.shtwo.top
  • 45 文章数
  • 36 关注者
File Structure 基础 && PUTS 流程分析
2023-01-30
Linux 堆内存结构分析(中)| PWN
2022-12-30
Canary补充 - TLS && Canary原始值在内存中的位置
2022-12-21