微尔文章系统v1.51 (修正版)上传漏洞
漏洞文件:/manage/video/upfile_soft.asp
—————————————————————————————————
fileExt=lcase(right(file.filename,4)) if fileEXT=”asp” or fileEXT=”asa” or fileEXT=”aspx” then response.write “<font size=2>文件格式不对 [ <a href=# onclick=history.go(-1)>重新上传</a> ] </font>” response.end end if
—————————————————————————————————
源码是这样的,据以前的朋友说这个版本存在上传漏洞可以上传cer等asp.dll解析的扩展名
其实不然,这个版本可以上传任意扩展名的文件,因为源码是这样写的
fileExt=lcase(right(file.filename,4)) //获得文件的最后4位
if fileEXT=”asp” or fileEXT=”asa” or fileEXT=”aspx” //如果是否为asp,asa,aspx
比如我们上传 xxx.asp 那么最后4位是 .asp
而判断的是否为asp .asp 并不等于asp
按照源码作者的意思是应该这样写:
if fileEXT=”.asp” or fileEXT=”.asa” or fileEXT=”.aspx” //要在扩展名前加个.
虽然只是一个. 但是意义就完全不同了,因此这个版本的系统可以上传任意扩展名文件
微尔文章系统v1.51漏洞
这系统以前有人分析过 今天看到有了更新的版本 于是下载回来看了下
以前的漏洞是补上了 但是新的漏洞又来了 一个是上传漏洞 一个是后台注入
先说上传 在 /manage/video/upfile_soft.asp里 没有包含身份验证文件
gl.asp 但恰恰代码写的不严谨 造成严重漏洞 看下代码:
if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then
response.write "<font size=2>文件格式不对 [ <a href=# onclick=history.go(-1)>重新上传</a> ]</font>"
response.end
end if
错误犯的太低级了 我们可以上传cer php 以及其他格式的文件来达到邪恶的目的:
打开 http://localhost/manage/video/upload_soft.asp 直接上传cer
在down文件夹中 也存在同样的漏洞
估计是作者太粗心了 后台验证文件在很多地方没有包含 没包含的地方也同样有注入漏洞
真是太"巧"了吧! 漏洞出现在 /manage/ClassModifySmall.asp
构造一个 http://localhost/manage/ClassModifySmall.asp?SmallClassID=1
注入吧 工具都能跑了.. 前台的安全不能遮掩后台的简陋.
微尔网站管理系统注入漏洞
漏洞页面:ProductShow.asp ,videoShow.asp
问题代码:
一:
videoShow.asp
<!--#include file="Inc/SysVideo.asp" -->
<!--#include file="inc/Check_Sql.asp"--> //头文件调用了 防注入页面,
<!--#include file="inc/mkmenu.asp"-->
<!--#include file="admin/config.asp"-->
------------------------------以上省略部分代码--------------------------------------------------
dim ID
ID=trim(request("ID")) //问题出在这,request对象并没有指出用哪种方式提取变量id,
if Id="" then
response.Redirect("Video.asp") //如果id为空,则跳到Video.asp页面,
end if
sql="select * from Download_video where ID=" & ID & "" //这里id直接代入数据库查询,
Set rs= Server.CreateObject("ADODB.Recordset")
rs.open sql,conn,1,3
----------------------------以下省略部分代码--------------------------------------------------
变量都可以用request来直接取得的,并且是有先后顺序的,譬如你用这样的语句request("id")取得id变量,asp会先从Form过来的数据找变量,然后是QueryString部分,然后是Cookie部分。但是如果你指定了request.cookies("id")就只会从cookie里找变量内容,没有的话就为空,同理,如果用的是request.form("id")就会只从表单里取变量而不会理会其他提交方式中的内容。这三个取得变量的地方也是是我们经常提交数据的地方,并且都是很容易就能修改的,而videoShow.asp他写的是直接request("id"),并没有指明是那种方式,即使加了防注入,我们也可以突破防注入,用cookies注入,修补办法就是加上request的方法,把request("id")改为request.queryString("id"),
看看防注入页面,防注入页面只对 '----- 对 get query 值 的过滤.和 '-----对 post 表 单值的过滤.
也就是过滤了request.QueryString和request.form的方法,而并没有过滤request.cookies的方法,cookies注
入也就产生了
二:
ProductShow.asp:
<!--#include file="Inc/SysProduct.asp" --> //头文件
<!--#include file="jjfunc.asp"--> //这里程序员忽略了调用 防注入系统,
<%
ShowSmallClassType=ShowSmallClassType_Article
dim ID
ID=trim(request("ID")) /这里 trim函数过滤了空格 注意他是直接提取id变量的值,没指哪种方式,而防 注入系统只检查request.form和request.queryString,而request.cookies忽略了 存在cookies注入,修补办法就是将request("ID")改为request.queryString(ID),
if ID="" then
response.Redirect("Product.asp") //id为空,则转向Product.asp页面,
end if
sql="select * from Product where ID=" & ID & "" //这里id参数直接代入数据库查询,
Set rs= Server.CreateObject("ADODB.Recordset")
rs.open sql,conn,1,3
if rs.bof and rs.eof then
response.write"<SCRIPT language=JavaScript>alert('找不到此产品!');"
response.write"javascript:history.go(-1)</SCRIPT>"
else
rs("Hits")=rs("Hits")+1
rs.update
Start=Rs("Title")
BigClassName=Rs("BigClassName")
SmallClassName=Rs("SmallClassName")
%>
漏洞就为大家简单介绍完了,总结来说,就是ProductShow.asp ,videoShow.asp页面都存在cookies注入,而
ProductShow.asp 由于忽略了调用防注入页面,可以直接注入,
具体利用方法 看下个动画,就先到这里,
漏洞利用:
现在本机测试,直接注入ProductShow.asp页面,
可以注入 现在去测试下 官方网站
官方网站也可以注入
去网上找个
都可以注入 下面给大家演示下 cookies注入
Powered by:VierCMS
也可以注入