安全中国首页 > 文章中心 > Oblog文章
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:www.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

Oblog4.5跨站漏洞大观园(图)

更新时间:2007-10-17 1:36:36
责任编辑:池天
热 点:
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
文章作者:落叶纷飞[S.S.T]
    oblog这套程序大家应该都很熟悉了吧,它凭着它的简洁、安全、稳定成为国内多用户blog的首选。这天无聊,就下了套上个月才出的oblog4.5最新版来看代码,谁知,居然看出了N多XSS点。
    首先给大家看一个另类点的跨站点,虽然利用价值不大,但是我觉得跨这个点的思路大家可以学习下。我们来看upload.asp和user_files.asp文件的漏洞代码。
upload.asp:
....省略部分代码....
Set File = Upload.UploadFiles(FormName)
F_FileName = FilePath & File.FileName
file_name = File.FileName
//这里是文件名赋值的过程,后面是上传过程的代码,所以省略。

user_files.asp:
....省略部分代码....
<%
i=0
Do while not rs.eof
imgsrc = rs("file_path")
ext=rs("file_ext")
If InStr("jpg,jpeg,gif,bmp,png,psd",ext) Then
imgsrc0 = imgsrc
Else
imgsrc0 = "images/nopic.gIf"
End if
%>
....省略部分代码....
<a href="<%=imgsrc%>" onclick="chk_iddiv(’<%=cstr(rs("fileid"))%>’)" target="_blank" title="cssbody=[dogvdvbdy] cssheader=[dogvdvhdr] body=[<table cellpadding=’0’><tr><td><img src=’<%=imgsrc0%>’ onload=’javascript:if(this.width>190){this.resized=true;this.style.width=190;}’ /></td></tr></table>] fixedabsx=[5] fixedabsy=[47]"><%=OB_IIF(rs("file_showname"),rs("file_name"))%></a></td>
....省略部分代码....
    代码中设定只允许上传后缀名为jpg,jpeg,gif,bmp,png,psd的文件,而且后面的代码似乎与漏洞无任何关系,我们该怎么利用呢?不用急且听我道来,我们来看第三段代码,它看似与漏洞最没有关系,但是请大家仔细看一下,它的作用是接收upload.asp文件上传时的文件名,那么,我们把文件名改为跨站代码+后缀,再上传到服务器,是不是就可以成功执行跨站语句了呢?根据windows的特性,文件名中不能含有“/、\、|、:、<、>、?、*、"”这几个字符,如图1


    可能有朋友会想到用rename命令来更改文件名,但是经过测试发现,用rename修改文件名时只要含有以上字符就会修改失败。那么我们该怎样利用这个漏洞呢?看看这些被系统过滤的字符,我们可以发现没有过滤“%”,那么,我们可不可以把文件编码后台再传到服务器上呢?我们来实践下,我们用URL编码器来把“’><script>alert()</script><’”这段代码编码一下,编码后字符串变为“%27%3E%3Cscript%3Ealert%28%29%3C%2Fscript%3E%3C%27”,如图2


    OK!我们再把一张图片的文件名改为“%27%3E%3Cscript%3Ealert%28%29%3C%2Fscript%3E%3C%27.gif”,成功改名!好的,我们把它传上服务器看看,上传成功后,我们打开“图片文件”看看,如图3


    呵呵,跨站成功!这个跨站点利用不大,因为只有自己才能看原来的文件名,在这里我只是想给大家看一种新的跨站思路而已。
    我们再看下一个跨站点,这个跨站点存在于user_photo.asp、user_subject.asp、index.asp这三个文件中,我们来看它们的漏洞代码:
user_subject.asp:
....省略部分代码....
Sub addclass()
Dim subjectname, rs, ordernum,ishide
subjectname = Trim(request.Form("subjectname"))
....省略部分代码....
If subjectname = "" Or oblog.strLength(subjectname) > 50 Then oblog.adderrstr ("分类名不能为空且不能大于50字符)!")
....省略部分代码....
    rs.open "select top 1 * from [oblog_subject] Where SubjectType=" & t, conn, 1, 3
    rs.addnew
    rs("subjectname") = subjectname
    rs("userid") = oblog.l_uid
    rs("ordernum") = ordernum
    rs("subjectType") = t
    If ishide = "on" Then RS("ishide") = 1 Else rs("ishide") = 0
    rs.Update
....省略部分代码....
user_photo.asp:
....省略部分代码....
我的分类:
<%=subjectname%>
....省略部分代码....
index.asp文件的作用是当有新的数据插入库的时候就生成index.html文件,所以,跨站的代码就插入到了index.html文件中了。

1 2 下一页

 
相关文章
一日一文章
 
一日一软件
一日一动画