一:古老的OR注入漏洞。
看一下首页,做的好凑合。有个登陆的地方,如图1.
二话不说,试’or’=’or’,
点击登陆。没想到竟然直接进来了。我们看下它的login.asp,关键代码如下:
!--#include file="conn.asp"-->
FCBLOG
用户登陆
function del_space(s)
{
for(i=0;i
for(j=s.length-1;j>=0;--j)
{
if(s.charAt(j)!=" ")
break;
}
return s.substring(i, j);
}
function VerifySubmit()
{
topic = del_space(document.form1.name.value);
if (topic.length == 0)
{
alert("您忘了写用户名!");
return false;
}
if (document.form1.pwd.value == "")
{
alert("请输入密码!");
return false;
}
return true;
}
只用了javascript在本地做了个判断用户名和密码是否为空就直接放过去了,也
没用其它文件来判断下数据,当然也没有做过滤,不产生注入才怪,如图2
二:跨站漏洞。
首页还有个留言的版块,我们去看看!直接在几个框框中输入:alert(/
冰的原点/),如图3
提交,果然不出所料啊,对话框弹了出来,而且还
弹了两次,如图4
.这里有个问题,大家看下我们提交的文字在页面上的显示,如图5
.也就是为什么只弹了两次,而没有第三次呢?我们右键-查看源文件,发现有
如下代码:
<li>标题:<script>alert(/冰的原点/)</script></li><li>内容:
<script>alert(/冰的原点/)
</script></li><address><script>alert(/冰的原点/)</script>发表留言
于2007-10-26 14:16:41</address></li><li>标题:kk</li><li>内容:
kkkkkk</li><address>kk发表留言于2007-8-29 23:31:38</address></li></ul>
也就是说程序对内容传递过来的值进行了转化,把<和>分别转化成了<和>,只做了一次过滤,哎,程序员是马虎了(这里我没有去看它的程序源代码了)。
三:真假注入。
我们先把程序放到工具里面去,看有没有明显的注入,如图6
.显然工具无能为力
。而且我看了下,大部分的页面都是静态的。有人就会问了,都是静态的还能注
入么?这里它的静态的页面都是用JS调用生成的,几乎每个页面都包含如下代码:
if(page=totalpage)then
’生成HTML静态首页
Set fso = Server.CreateObject("Scripting.FileSystemObject")
fso.CreateFolder(Server.MapPath(""))
Set fout = fso.CreateTextFile(Server.MapPath("msgpost.html"))
fout.WriteLine show
fout.close
response.redirect "msgpost.html"
end if%>
正因为有这样的东西,所以值在传递的时候,都没怎么过滤,代码如下:
’打开模板代码,并将其中特殊代码转变为接受值
sql1="select id,user_skin_main,user_skin_showlog from fc_moban where
default=true"
set rs1=Server.CreateObject("adodb.recordset")
rs1.open sql1,conn,1,1
user_skin_main=rs1("user_skin_main")
user_skin_showlog=rs1("user_skin_showlog")
rs1.close
像这样的代码还有很多呢。