本人是十一期学员,今天在写head注入的作业的时候,用到了updatexml函数,
寻根究底之,于是有了此文。
本着能省则省的精神,去掉了concat,看看有没有啥影响,结果出现以下问题:
updatexml(0x7e,(select database()),0x7e) #不可输出
updatexml(0x7e,(select user()),0x7e) #可输出
我们发现同样的语法,为啥database() 不能输出,而user()可以输出?
因为user里面有特殊符号@,而且有没有发现 user输出的是从@开始的 前面的用户名被切掉了。
这时我们通过concat在内容前面连上0x7e 即 updatexml(1,concat(0x7e,(select user()),0x7e),1)
@前面的用户名输出出来了。
updatexml(1,concat(0x7e,(select database()),0x7e),1),也可以输出
通过上面我们发现 updatexml 可以通过特殊符号触发报错,而且只会显示特殊符号后面的内容,前面的内容会丢失,这个时候我们就体现concat的用处了,在子查询前面加上特殊符号,无论子查询的内容有没有特殊符号,都会输出,并且不会出现丢失内容的情况。
所以我们最保险的办法就是updatexml(1,concat(0x7e,(select database()),0x7e),1)
updatexml 只能通过特殊符号触发报错,并且只会从特殊符号开始输出内容。
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
veek | 30.00 | 0 | 2021-02-04 15:03:26 | 不错的小Tips |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.