设为首页 收藏本站
查看: 956|回复: 0

[经验分享] php webshell分析和绕过waf技巧

[复制链接]

尚未签到

发表于 2018-12-14 13:22:59 | 显示全部楼层 |阅读模式
前言
  WebShell是***者使用的恶意脚本,它的用途主要是在***后的Web应用程序上建立持久性的后门。webshell本身不能***或者利用远程漏洞,所以说它总是***的第二阶段,这个阶段我们经常称为post-exploitation。(PS:Post Exploitation是国外***测试标准里面的一个阶段)
WebShell常用函数
  现在的Web应用程序基本上是采用PHP开发的,所以本篇文章也主要介绍的是php环境下的WebShell。WebShell无非就是使用PHP内置的函数来执行命令,以下就是用于在php中执行shell命令的一些最常用的函数。
system()
  system()函数接收命令作为参数,并输出结果。
  以下示例演示了运行dir命令,显示执行php文件目录的目录列表:
   -->
驱动器 C 中的卷没有标签。 卷的序列号是 7C53-7529 C:\phpstudy\WWW 的目录 2016-12-02 15:39  
    . 2016-12-02 15:39
  
    .. 2016-12-02 15:38 56 hello.php 2016-12-02 15:38 29 system.php 2016-12-02 15:39
  
    test 2 个文件 85 字节 3 个目录 871,600,128 可用字节
  exec()
  exec()函数接收一个命令作为参数,当不输出结果,如果指定第二个可选参数,则结果将作为数组返回。否则,如果回显,将只显示结果的最后一行。
-->
  我们可以使用echo来输出exec()函数的结果。可以发现只有结果的最后一行。
-->
3 个目录 871,538,688 可用字节  如果指定第二个参数,则在数组中返回结果。
   -->
3 个目录 871,538,688 可用字节Array ( [0] => 驱动器 C 中的卷没有标签。 [1] => 卷的序列号是 7C53-7529 [2] => [3] => C:\phpstudy\WWW 的目录 [4] => [5] => 2016-12-02 15:52 . [6] => 2016-12-02 15:52 .. [7] => 2016-12-02 16:15 53 exec.php [8] => 2016-12-02 15:38 56 hello.php [9] => 2016-12-02 15:46 25 system.php [10] => 2016-12-02 15:39 test [11] => 3 个文件 134 字节 [12] => 3 个目录 871,538,688 可用字节 )  shell_exec()
  shell_exec()函数类似于exec()函数,但不同的是,它会将整个结果作为字符串输出。
-->
驱动器 C 中的卷没有标签。 卷的序列号是 7C53-7529 C:\phpstudy\WWW 的目录 2016-12-02 16:26 . 2016-12-02 16:26 .. 2016-12-02 16:15 53 exec.php 2016-12-02 15:38 56 hello.php 2016-12-02 16:27 34 shellexec.php 2016-12-02 15:46 25 system.php 2016-12-02 15:39 test 4 个文件 168 字节 3 个目录 871,460,864 可用字节passthru()
  passthru()函数执行命令并返回输出。
-->驱动器 C 中的卷没有标签。 卷的序列号是 7C53-7529 C:\phpstudy\WWW 的目录 2016-12-02 16:35 . 2016-12-02 16:35 .. 2016-12-02 16:15 53 exec.php 2016-12-02 15:38 56 hello.php 2016-12-02 16:35 27 passthru.php 2016-12-02 16:27 34 shellexec.php 2016-12-02 15:46 25 system.php 2016-12-02 15:39 test 5 个文件 195 字节 3 个目录 871,456,768 可用字节  proc_open()
  proc_open()函数执行一个命令,并且打开用来输入/输出的文件指针。
  这个函数可能很难理解,简单的来说,通过使用proc_open()函数,我们可以创建一个进程用于我们的脚本和我们想要运行程序之间的通信。详见PHP文档:
  http://php.net/manual/zh/function.proc-open.php
preg_replace()与/e修饰符
  preg_replace()函数可以执行正则表达式的搜索和替换
  如果使用/e修饰符,意味着使用eval执行替换,这样我们就可以传递一个要由eval()函数执行的代码
-->\\ 的用户帐户 ------------------------------------------------------------------------------- Administrator ASPNET Guest HelpAssistant SUPPORT_388945a0 命令运行完毕,但发生一个或多个错误。反引号
  肯定很多人没有注意到这点吧,php将反引号的内容作为shell命令执行。
  结果:

  某WAF也没扫描到:

隐藏WebShell-免杀之路
  利用HTTP请求头
  在php中,我们可以很容易获取到HTTP请求头里面的某些特殊字符串头,比如User-Agent。同样的原理,我也可以利用这个来传入需要执行的命令。
  通过User-Agent传入命令执行:

  某waf也是扫描到,当然除了User-Agent,我们还有Accept-Language等特殊字符串头,这里就不做演示了,主要的还是方法。
  混淆技术
  上面的方法虽然过了waf,但是我们人工一看就知道有问题,所以我们还需要一些混淆技术来隐藏webshell。首先我们来认识一下几个常用功能。
  eval() :把字符串作为PHP代码执行
  assert() :判断一个表达式是否成立,直接传入字符串会当做 PHP 代码来执行
  base64() :使用base64对数据进行编码
  gzdeflate() :对数据进行Deflate压缩,gzinflate()解压缩
  str_rot13() :对字符串执行 ROT13 转换
  回调函数
  这种办法国内我是看了phithon的介绍,不过这里我肯定要介绍是最新能绕waf的函数。
create_function()

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-651387-1-1.html 上篇帖子: php编译安装常见错误 下篇帖子: PHP安装mcrypt.so报错 mcrypt.h not found 的解决办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表