您現(xiàn)在的位置:首頁 >關(guān)于我們 >行業(yè)新聞 >解析Asp.Net木馬文件操作

解析Asp.Net木馬文件操作

時(shí)間:2007年10月12日

本文主要介紹一下Asp.net木馬中文件操作功能的具體實(shí)現(xiàn)。 (關(guān)于防Asp.Net木馬及Webshell攻擊的解決辦法見文章ASP.NET木馬及Webshell安全解決方案)

要編寫Asp.net木馬,首先要導(dǎo)入名稱空間System.IO。名稱空間System.IO提供了大量文件和文件夾的操作功能,包括讀寫文件、創(chuàng)建和刪除目錄以及察看文件和目錄的屬性。

1. 淺談取得文件和文件夾的信息
詳細(xì)說一下attributes集合,它提供了文件和文件夾的額外信息,如是否只讀的或隱藏的。
文件和目錄的屬性
屬性 數(shù)字值
ReadOnly(只讀) 1
Hidden(隱藏) 2
System(系統(tǒng)) 4
Directory(目錄) 16
Archive(存檔) 32
Encrypted(加密) 64
Normal(普通) 128
Tempory(臨時(shí)) 256
SparseFile(稀疏文件) 512
Compressed(壓縮) 2048
Offline(脫機(jī)) 4096
NotContentIndexed(非內(nèi)容索引) 8192

要改變文件的屬性,只需將這些值類加。例如,要將目錄設(shè)置為隱藏+系統(tǒng)+加密+壓縮,可以使用下面的語句:
f.attributes=2138
2138即2+4+64+2048
這些值估計(jì)新手很難記憶,我們直接用屬性名稱來設(shè)置,只要用或bitor來分割各屬性,如:
f.attributes=FileAttributes.Hidden BitOr FileAttributes.System BitOr FileAttributes. Encrypted BitOr FileAttributes. Compressed
上述代碼相當(dāng)于f.attributes=2138
要確定文件或者文件夾的某個(gè)屬性被設(shè)置,可使用與操作符bitand這樣來檢測(cè):
if f.attributes bitand fileattributes.hidden >0 then
response.write(“屬性為隱藏!”)
end if

檢測(cè)函數(shù):
sub getfileinfo()
dim f as new fileinfo(server.mappath(“test.aspx”))
f =new fileinfo(strf)
label1.text="文件信息:
文件名稱:"& f.name &
"
文件路徑:" & f.directoryname &
"
創(chuàng)建時(shí)間:" & f.CreationTime &
"
最后訪問時(shí)間:" & f.lastaccesstime &
"
最后修改時(shí)間:" & f.lastwritetime &
"
文件長度:" & f.length & "bytes
文件屬性:" & f.attributes & "

"

dir=f.directory
label1.text+="目錄信息:
目錄名:"& dir.name &"
目錄全名:" & dir.fullname & "
創(chuàng)建時(shí)間:" & dir.CreationTime & "
最后訪問時(shí)間:" & dir.lastaccesstime & "
最后修改時(shí)間:" & dir.lastwritetime & "
父母錄:" & dir.parent.name &
"
目錄屬性:" & dir.attributes & "

"
end sub

2. 打開文件的各種手法
Asp.net允許以二進(jìn)制和Unicode模式打開文件,由于二進(jìn)制方法比較少用,下面主要介紹用Unicode打開文件的各種模式。

File對(duì)象的open方法
方法 描述
Open() 按照提供的參數(shù)打開文件,返回一個(gè)stream流
OpenRead() 返回文件的一個(gè)只讀流
OpenText() 返回一個(gè)SteamReader對(duì)象
OpenWrite() 返回文件的一個(gè)讀寫流
其中,open()方法接受3個(gè)參數(shù),從做到右依次為filemode(打開方式),fileaccess(訪問權(quán)限),fileshare(處理共享)
FileMode值
模式 說明
Append(僅適用write訪問權(quán)限) 若文件存在,打開
若文件不存在,創(chuàng)建一個(gè)新文件
Create 創(chuàng)建新文件或者覆蓋已經(jīng)存在的文件
CreateNew 創(chuàng)建新文件
Open 打開已存在的文件
Openorcreate 若文件存在,打開
若文件不存在,創(chuàng)建一個(gè)新文件
Truncate 打開已存在的文件并清空原來所有的內(nèi)容


FileAccess的值
權(quán)限 說明
Read 只讀
Write 只寫
ReadWrite 讀寫
FileShare的值
權(quán)限 說明
Read 只讀
Write 只寫
ReadWrite 讀寫
None 文件獨(dú)占,其他進(jìn)程不能訪問該文件


3. 怎樣讀取文件數(shù)據(jù)
在Asp.net中,主要由SteamReader的方法實(shí)現(xiàn)。 SteamReader取得反饋信息的方法有三種:
read:一次讀取一個(gè)字符
readline:讀取字符直到行尾
readtoend:讀取字符直到流結(jié)尾
第一中方法read返回的是Ascii碼值,我們可以string.chr(objreader.read)來轉(zhuǎn)化為實(shí)際值
還可以從流中返回指定數(shù)目的字符數(shù), objreader.read(char(),start,end)
下面這個(gè)例子是返回三十個(gè)字符。
Dim objreader as new StreamReader(server.mappath(“test.aspx”))
Dim arrstr() as char=new char(30)
Objreader.read(arrstr,0,30)
For I=0 to ubound(arrstr)-1
lblResponse.text+=arrstr(i)
next
objreader.close

用第二種方法readline時(shí),此時(shí)我們可以配合peek()使用,peek()方法判斷是否到了流結(jié)尾,注意:peek()方法獲取下一個(gè)字符,但并不將其返回。
我們可以用一個(gè)Web服務(wù)器控件label(id="lblResponse")來顯示獲取的數(shù)據(jù)。
Dim objreader as new StreamReader(server.mappath(“test.aspx”))
while objreader.peek() > -1
lblResponse.text+=server.HTMLEncode(objreader.ReadLine) & "
"
end while
objreader.close
第三種方法最簡單易用:
Dim objreader as new StreamReader(server.mappath(“test.aspx”))
lblResponse.text+=server.HTMLEncode(objreader.ReadtoEnd)
objreader.close

4. 輕輕松松寫文件
在Asp.net中,主要由StreamWriter的方法實(shí)現(xiàn)。
可以這樣定義一個(gè)StreamWriter
dim objwriter as new StreamWriter(filestream,append)
注意append這個(gè)參數(shù) ,它是一個(gè)布爾型
Append值
Flase 若文件存在,原文件被覆蓋
若文件不存在,創(chuàng)建該文件
True 追加到文件尾部
Steamwriter寫數(shù)據(jù)的方法比StreamReader少,有write()和writeline()兩種

Dim objwriter as new StreamWriter(server.mappath(“test.aspx”),true)
Objwriter.writeline() ‘寫入了一個(gè)換行符
Objwriter.writeline(“這將寫入一行數(shù)據(jù)”)
Objwrite.write(“寫入數(shù)據(jù),但不帶換行符”)

5.文件和目錄的復(fù)制、創(chuàng)建、刪除、移動(dòng)
文件和目錄的復(fù)制、創(chuàng)建、刪除、移動(dòng)
方法 說明
Directory.CreateDirectories 創(chuàng)建指定的所有目錄
Directory.CreateDirectory 創(chuàng)建一個(gè)目錄
Directory.Delete 刪除一個(gè)目錄
File.Copy 復(fù)制文件,overwrite指定是否覆蓋已有文件
File.Create 創(chuàng)建新文件
File.CreateText 創(chuàng)建一個(gè)StreamWriter對(duì)象
File.Delete 刪除一個(gè)文件
File.ChangeExtension 修改擴(kuò)展名,將extension為nothing將刪除擴(kuò)展名,擴(kuò)展名中必須有“.”
File.HasExtension 判斷是否有擴(kuò)展名,如果有,返回真值
Move 移動(dòng)文件或目錄

6.測(cè)試...

 

                                                    海騰數(shù)據(jù)中心(技術(shù)部整理)
                                                    2007-10-12

Copyright© 2004-2020 河南海騰電子技術(shù)有限公司 版權(quán)所有   經(jīng)營性ICP/ISP證 備案號(hào):B1-20180452   豫公網(wǎng)安備 41019702002018號(hào)    電子營業(yè)執(zhí)照