00:00
加载中……请稍等……

一、前提

PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。

这些超全局变量是:
$_REQUEST (获取GET/POST/COOKIE) COOKIE在新版本已经无法获取了
$_POST (获取POST传参)
$_GET (获取GET的传参)
$_COOKIE (获取COOKIE的值)
$_SERVER (包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组)

$_SERVER功能强大。
常用的:
$_SERVER['HTTP_REFERER'] 获取Referer请求头数据
$_SERVER["HTTP_USER_AGENT"] 获取用户相关信息,包括用户浏览器、操作系统等信息。
$_SERVER["REMOTE_ADDR"] 浏览网页的用户ip。

二、原理

updatexml() 更新xml文档的函数
语法:updatexml(目标xml内容,xml文档路径,更新的内容)

updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)
实际上这里是去更新了XML文档,但是我们在XML文档路径的位置里面写入了子查询,我们输入特殊字符,然后就因为不符合输入规则然后报错了
但是报错的时候他其实已经执行了那个子查询代码!
[0x7e 实际是是16进制,Mysql支持16进制,但是开头得写0x 0x7e是一个特殊符号,然后不符合路径规则报错]

三、用法

updatexml () 这个函数一般是配合and 或者是or 使用的,他和联合查询不同,不需要在意什么字段数
eg: select username from security.user where id=1 and (updatexml(‘anything’,concat(‘~’,(select database())),’anything’))
1766530082.jpg

但是要注意,and 情况下只要一个为False,就会判定是False,所以如果and前面的条件不成立的情况下,就不会执行之后的语句。所以使用的时候建议使用or

某些没有回显盲注也可以用这个updatexml()做出来。

但是报错一般有长度限制,不能输出太长的数据,尽量不要使用group_concat()。

个人经验:有些盲注也可以试试看报错注入,因为有的时候报错注入的致命错误会显示出来,数据库只忽略普通报错

Last modification:May 9th, 2020 at 10:18 pm