技术社区
安全培训
技术社群
积分商城
先知平台
漏洞库
历史记录
清空历史记录
相关的动态
相关的文章
相关的用户
相关的圈子
相关的话题
注册
登录
webshell免杀之浅谈phpwebshell中如何控制传入内容
真爱和自由
WEB安全
202浏览 · 2025-03-26 17:48
返回文档
webshell免杀之浅谈phpwebshell中如何控制传入内容
前言
对webshell的研究还是有一个星期了,来总结一下我们应该如何控制外来的参数内容
毕竟webshell需要任意命令执行的话,不得不实现任意参数的传入,下面是我自己总结的一些方法,重点是研究如何出传入参数,所给出的webshell的重点也是在如何传入参数
必须知道的基础
有些常见的,比如
1
$_GET
:
○
用于收集通过 URL 查询字符串传递的数据。它是一个关联数组,包含了 URL 中的所有查询参数。
○
例如,访问
example.com/page.php?name=John&age=25
,则
$_GET['name']
为
John
,
$_GET['age']
为
25
。
1
$_POST
:
○
用于收集通过 HTTP POST 方法发送的数据。通常用于表单提交。
○
例如,表单中有一个字段
username
,提交后可以通过
$_POST['username']
获取其值。
1
$_COOKIE
:
○
用于访问客户端存储的 cookie 数据。它是一个关联数组,包含了所有可用的 cookie。
○
例如,若设置了一个 cookie
user
,可以通过
$_COOKIE['user']
获取其值。
1
$_REQUEST
:
○
包含了
$_GET
、
$_POST
和
$_COOKIE
中的数据。它是一个合并的数组,允许访问所有请求数据。
○
例如,若同时通过 GET 和 POST 发送了相同的参数,
$_REQUEST['param']
将返回 POST 中的值。
1
$_SERVER
:
○
包含了关于服务器和执行环境的信息。它是一个关联数组,提供了许多服务器变量,如请求方法、用户代理等。
○
例如,
$_SERVER['REQUEST_METHOD']
可以获取请求方法(GET、POST等),
$_SERVER['HTTP_USER_AGENT']
可以获取用户的浏览器信息。
1
$_FILES
:
○
用于处理通过 HTTP POST 上传的文件。它是一个关联数组,包含了上传文件的信息,如文件名、类型、大小等。
○
例如,若表单中有一个文件上传字段
file
,可以通过
$_FILES['file']
获取文件的相关信息。
1
$GLOBALS
:
○
是一个超级全局数组,用于访问全局作用域中的变量。它包含了所有全局变量的名称和值。
○
例如,若在函数中定义了一个全局变量
$var
,可以通过
$GLOBALS['var']
访问它。
这里强调一下$_SERVER
因为它内部还包含了许多的可以传入参数的点
比如这里随便拿一个例子来举HTTP_ACCEPT
比如我前段时间构造的一个webshell
就是通过
`$$string1['HTTP_ACCEPT']也就是
来传入参数的
get_meta_tags
分析
get_meta_tags — 从一个文件中提取所有的 meta 标签 content 属性,返回一个数组
官方的例子
我们基于这个思路该如何构造一个简单的webshell呢?
首先可控点我们需要抓住,就是外部的文件,其中标签我们也可以控制,那岂不是就可以值了
webshell例子
1.html内容如下
webshell
图片加载失败
成功执行
getallheaders()
分析
getallheaders — 获取全部 HTTP 请求头信息
官方的例子
效果
图片加载失败
可以发现是把全部的header都取出来了
如果用这个构造webshell,那我们只需要控制header就可以了
webshell的例子
就是获取header的key和value,然后按照动态命令执行去组装
图片加载失败
返回内容如下
可以发现是执行了命令
get_defined_vars
分析
get_defined_vars — 返回由所有已定义变量所组成的数组
返回值
图片加载失败
比如其中有些值我就可以拿来使用
其中有一个这样的内容
C:\Program Files\nodejs
;
C:\WINDOWS\system32
system就有了
参数如何控制?
["SCRIPT_NAME"]=> string(6) "/1.php" ["REQUEST_URI"]=> string(6) "/1.php
我们可以选择控制文件名对吧
而且获取的有_SERVER,其实很多就可以控制了
webshell例子
我在本地是
输出
然后只需要组装就好了
注意
不过在webshell检测中一般会忽略文件名,当然我们还可以通过查询string去访问,反正办法很多
filter_input
分析
filter_input — 通过名称获取特定的外部变量,并且可以通过过滤器处理它
官方的例子
以上示例的输出类似于:
我们的构造思路其实就来了,input是可以从url获取的
那我们就可以控制传入的值了
看下它的各种参数
INPUT_GET
,
INPUT_POST
,
INPUT_COOKIE
, **
INPUT_SERVER
**或 **
INPUT_ENV
**之一。
待获取的变量名。
要应用的过滤器 ID。
过滤器类型
手册页面列出了可用的过滤器。
如果省略,将使用
FILTER_DEFAULT
,默认等同于
``
FILTER_UNSAFE_RAW
。这将导致不进行任何默认过滤。
一个选项的关联数组,或者按位区分的标示。如果过滤器接受选项,可以通过数组的 "flags" 位去提供这些标示。
通过type就知道传入参数的方法很多了
然后还可以自定义方法,这也是我们的关键
看如下例子
可以通过FILTER_CALLBACK设置自定义的处理方法,通过options来选择
webshell例子
图片加载失败
0
人收藏
0
人喜欢
转载
分享
0
条评论
某人
表情
可输入
255
字
评论
没有评论
发布投稿
热门文章
1
契约锁电子签章系统 pdfverifier 远程代码执行漏洞分析(补丁包逆向分析)
2
COFF文件解析 | CoffLdr
3
Java内存马篇——WebSocket内存马及GodZilla二开
4
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
5
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
近期热点
一周
月份
季度
1
契约锁电子签章系统 pdfverifier 远程代码执行漏洞分析(补丁包逆向分析)
2
COFF文件解析 | CoffLdr
3
Java内存马篇——WebSocket内存马及GodZilla二开
4
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
5
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
暂无相关信息
暂无相关信息
优秀作者
1
T0daySeeker
贡献值:41700
2
一天
贡献值:24800
3
Yale
贡献值:24000
4
1674701160110592
贡献值:21800
5
1174735059082055
贡献值:16000
6
手术刀
贡献值:14000
7
Loora1N
贡献值:13000
8
bkbqwq
贡献值:12800
9
lufei
贡献值:11000
10
xsran
贡献值:10600
目录
webshell免杀之浅谈phpwebshell中如何控制传入内容
前言
必须知道的基础
get_meta_tags
分析
webshell例子
getallheaders()
分析
webshell的例子
get_defined_vars
分析
webshell例子
注意
filter_input
分析
webshell例子
转载
标题
作者:
你好
http://www.a.com/asdsabdas
文章
转载
自
复制到剪贴板
没有评论