经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 网络安全 » 查看文章
命令执行-过滤了字母或者过滤了数字+字母的绕过方法
来源:cnblogs  作者:Dark1nt  时间:2021/6/7 9:10:21  对本文有异议

0x00 序言

总结下命令执行绕过字母数字的一些小技巧。

0x01 原理

管理员为了防止任意用户输入的恶意代码导致的命令执行,在用户输入处加了一层waf拦截,waf可能是通过正则匹配过滤了字母,也可能是通过正则匹配过滤了字母和数字。

0x02 过滤了字母的绕过方式

  1. <?php
  2. /*
  3. # -*- coding: utf-8 -*-
  4. # @Author: Lazzaro
  5. # @Date: 2020-09-05 20:49:30
  6. # @Last Modified by: h1xa
  7. # @Last Modified time: 2020-09-07 20:03:51
  8. # @email: h1xa@ctfer.com
  9. # @link: https://ctfer.com
  10. */
  11. // 你们在炫技吗?
  12. if(isset($_GET['c'])){
  13. $c=$_GET['c'];
  14. if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){
  15. system($c);
  16. }
  17. }else{
  18. highlight_file(__FILE__);
  19. }
  • 代码审计
    ??过滤了字母 分号 反引号 百分号 和 %09 %26 <>
    但是可以观察到其实没有过滤空格。

0x02.1 使用 /bin/base64 xxx 进行绕过

Linux的bin目录一般保存了所有的二进制命令, 正常我们输入的cat xxx啥的 其实也可以通过/bin/cat 打开文件,而哪种命令打开文件还能带有数字呢? 可以尝试使用 base64 去打开文件,将文件以base64编码输出

  • base32
  • base64

    虽然这样输入依然有字母,但是我们可以通过通配符?去绕过,而且因为有了数字,匹配的会更加准确
    如果直接使用通配符是不行的,因为这在Linux无法通过????去找到命令

    这里因为我用kali测试的

    测试过程中发现居然还有别的目录被匹配到了,笑了

    改成32进行测试,发现也不行

    服了
    测试成功的一次是

    如果全用通配符的话 会匹配到别的东西

    如果只改回一个为字母,则能正常匹配,至少能正常匹配了,kali直接使用/bin/base32 去匹配的话可能有问题。
    应该是如果要执行命令的话一定要绝对路径,因为指针指向的可能是绝对路径的地址,所以这里要想使用通配符的话必须通过/usr/bin/base64去执行命令。
    这里因为测试的时候发现/bin/x11/base32 可用所以直接

    但是这是kali。
    题目的正常解法可以直接 /bin/base64 flag.php => /???/????64 ????????
    可能是因为题目服务器配置比较干净吧
    了解原理就行了。

0x02.2 使用 /usr/bin/bzip2 去压缩文件夹

可以发现我的Kali东西比较多。。。

发现又是x11

不折腾了
常规操作,如果是比较干净的linux系统直接 /???/???/???2 ????????
最后????????是 flag.php
压缩后 直接 访问 对应的url即可比如 访问 https:/xx/flag.php.bz2 可用直接下载

0x02.3 使用.去执行sh文件

非常妙的思路,linux中.相当于source,可以直接执行sh文件


不管有无文件后缀名,都是根据命令来选择打开文件的方式。

而且因为php文件在上传时 会在服务端/tmp目录下生成php?????? 随机六个字母
所以可以通过 ?c=. /???/????????[@-[] 去进行匹配
[@-[]也是一种通配符,匹配方式是匹配@~[的范围,查ascii表可知道 正好是大写字母
然后我们生成一个提交表单

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>POST数据包POC</title>
  7. </head>
  8. <body>
  9. <form action="{.url}" method="post" enctype="multipart/form-data">
  10. <!--链接是当前打开的题目链接-->
  11. <label for="file">文件名:</label>
  12. <input type="file" name="file" id="file"><br>
  13. <input type="submit" name="submit" value="提交">
  14. </form>
  15. </body>
  16. </html>

向指定url进行php文件提交 同时?c=. /???/????????[@-[]
在php文件里写入

  1. #!/bin/bash
  2. ls

多次提交,可实现任意命令执行。

绕过了字母和数字的过滤方式

  • 使用.去执行sh文件

原文链接:http://www.cnblogs.com/Dark1nt/p/14852301.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号